SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: S = struct @align(8) {
  f1:i32 @offset(0)
  f2:mat2x2<f32> @offset(8)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

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

%main_1 = func():void {
  $B2: {
    %x_41:ptr<function, mat2x2<f32>, read_write> = var
    %x_6:ptr<function, i32, read_write> = var
    %x_42:ptr<function, mat2x2<f32>, read_write> = var
    %x_49_phi:ptr<function, mat2x2<f32>, read_write> = var
    %8:f32 = load_vector_element %gl_FragCoord, 0u
    %x_44:f32 = let %8
    %10:bool = lt %x_44, 0.0f
    if %10 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        store %x_42, mat2x2<f32>(vec2<f32>(1.0f, 2.0f), vec2<f32>(3.0f, 4.0f))
        store %x_49_phi, mat2x2<f32>(vec2<f32>(1.0f, 2.0f), vec2<f32>(3.0f, 4.0f))
        exit_if  # if_1
      }
      $B4: {  # false
        store %x_42, mat2x2<f32>(vec2<f32>(0.5f, -0.5f), vec2<f32>(-0.5f, 0.5f))
        store %x_49_phi, mat2x2<f32>(vec2<f32>(0.5f, -0.5f), vec2<f32>(-0.5f, 0.5f))
        exit_if  # if_1
      }
    }
    %11:mat2x2<f32> = load %x_49_phi
    %x_49:mat2x2<f32> = let %11
    %13:mat2x2<f32> = transpose %x_49
    %14:S = construct 1i, %13
    %x_51:S = let %14
    %16:i32 = access %x_51, 0u
    %x_52:i32 = let %16
    store %x_6, %x_52
    %18:mat2x2<f32> = access %x_51, 1u
    store %x_41, %18
    %19:mat2x2<f32> = load %x_41
    %x_56:mat2x2<f32> = let %19
    %21:mat2x2<f32> = load %x_41
    %x_59:mat2x2<f32> = let %21
    %23:mat2x2<f32> = load %x_41
    %x_63:mat2x2<f32> = let %23
    %25:mat2x2<f32> = load %x_41
    %x_66:mat2x2<f32> = let %25
    %27:f32 = convert %x_52
    %28:f32 = let %27
    %29:f32 = access %x_56, 0u, 0u
    %30:f32 = access %x_59, 1u, 0u
    %31:f32 = add %29, %30
    %32:f32 = access %x_63, 0u, 1u
    %33:f32 = access %x_66, 1u, 1u
    %34:f32 = add %32, %33
    %35:f32 = convert %x_52
    %36:vec4<f32> = construct %28, %31, %34, %35
    store %x_GLF_color, %36
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B5: {
    store %gl_FragCoord, %gl_FragCoord_param
    %39:void = call %main_1
    %40:vec4<f32> = load %x_GLF_color
    %41:main_out = construct %40
    ret %41
  }
}

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.  *
********************************************************************
