SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %x_37:ptr<function, mat4x3<f32>, read_write> = var
    %x_38_phi:ptr<function, mat4x3<f32>, read_write> = var
    %x_48_phi:ptr<function, vec3<f32>, read_write> = var
    %7:f32 = load_vector_element %gl_FragCoord, 1u
    %x_32:f32 = let %7
    %9:bool = lt %x_32, 1.0f
    if %9 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        store %x_38_phi, mat4x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f), vec3<f32>(0.0f))
        exit_if  # if_1
      }
      $B4: {  # false
        store %x_37, mat4x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f), vec3<f32>(0.0f))
        %10:mat4x3<f32> = load %x_37
        store %x_38_phi, %10
        exit_if  # if_1
      }
    }
    %11:mat4x3<f32> = load %x_38_phi
    %x_38:mat4x3<f32> = let %11
    %13:mat3x4<f32> = transpose %x_38
    %14:f32 = access %13, 0u, 1u
    %x_40:f32 = let %14
    loop [b: $B5] {  # loop_1
      $B5: {  # body
        %16:bool = gt %x_40, 1.0f
        if %16 [t: $B6] {  # if_2
          $B6: {  # true
            store %x_48_phi, vec3<f32>(0.0f)
            exit_loop  # loop_1
          }
        }
        store %x_48_phi, vec3<f32>(1.0f, 0.0f, 0.0f)
        exit_loop  # loop_1
      }
    }
    %17:vec3<f32> = load %x_48_phi
    %x_48:vec3<f32> = let %17
    %19:f32 = access %x_48, 0u
    %20:f32 = access %x_48, 1u
    %21:f32 = access %x_48, 2u
    %22:vec4<f32> = construct %19, %20, %21, 1.0f
    store %x_GLF_color, %22
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B7: {
    store %gl_FragCoord, %gl_FragCoord_param
    %25:void = call %main_1
    %26:vec4<f32> = load %x_GLF_color
    %27:main_out = construct %26
    ret %27
  }
}

invalid entry point IO struct uses
********************************************************************
*  The tint shader compiler has encountered an unexpected error.   *
*                                                                  *
*  Please help us fix this issue by submitting a bug report at     *
*  crbug.com/tint with the source program that triggered the bug.  *
********************************************************************
