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
}

%main_1 = func():void {
  $B2: {
    %m:ptr<function, mat2x2<f32>, read_write> = var
    store %m, mat2x2<f32>(vec2<f32>(1.0f, 2.0f), vec2<f32>(3.0f, 4.0f))
    %4:mat2x2<f32> = load %m
    %5:mat2x2<f32> = transpose %4
    %6:mat2x2<f32> = let %5
    %7:mat2x2<f32> = load %m
    %8:mat2x2<f32> = transpose %7
    %9:mat2x2<f32> = mul %6, %8
    %x_30:mat2x2<f32> = let %9
    %11:mat2x2<f32> = load %m
    %12:mat2x2<f32> = load %m
    %13:mat2x2<f32> = mul %11, %12
    %14:mat2x2<f32> = transpose %13
    %x_34:mat2x2<f32> = let %14
    %16:vec2<f32> = access %x_30, 0u
    %17:vec2<f32> = access %x_34, 0u
    %18:vec2<bool> = eq %16, %17
    %19:bool = all %18
    %20:bool = let %19
    %21:vec2<f32> = access %x_30, 1u
    %22:vec2<f32> = access %x_34, 1u
    %23:vec2<bool> = eq %21, %22
    %24:bool = all %23
    %25:bool = and %20, %24
    if %25 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_1
      }
      $B4: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %27:void = call %main_1
    %28:vec4<f32> = load %x_GLF_color
    %29:main_out = construct %28
    ret %29
  }
}

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