SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(4) {
  expect_1:i32 @offset(0), @location(0), @interpolate(flat)
}

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

%main_1 = func():void {
  $B2: {
    %inbounds:ptr<function, bool, read_write> = var
    %x_31:ptr<function, bool, read_write> = var
    %x_32:ptr<function, bool, read_write> = var
    %7:f32 = load_vector_element %gl_FragCoord, 0u
    %8:bool = lt %7, 128.0f
    %x_25:bool = let %8
    store %x_32, %x_25
    %10:bool = eq %x_25, false
    if %10 [t: $B3] {  # if_1
      $B3: {  # true
        %11:f32 = load_vector_element %gl_FragCoord, 1u
        %12:bool = lt %11, 128.0f
        store %x_31, %12
        %13:bool = load %x_31
        store %x_32, %13
        exit_if  # if_1
      }
    }
    %14:bool = load %x_32
    store %inbounds, %14
    %15:bool = load %inbounds
    %16:i32 = select -1i, 1i, %15
    store %expect, %16
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B4: {
    store %gl_FragCoord, %gl_FragCoord_param
    %19:void = call %main_1
    %20:i32 = load %expect
    %21:main_out = construct %20
    ret %21
  }
}

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