SKIP: FAILED

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

$B1: {  # root
  %x_2:ptr<private, vec4<f32>, read_write> = var
  %x_3:ptr<private, i32, read_write> = var
  %x_4:ptr<private, i32, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %x_33:ptr<function, i32, read_write> = var
    %6:vec4<f32> = load %x_2
    %x_18:vec4<f32> = let %6
    %8:i32 = load %x_3
    %x_28:i32 = let %8
    store %x_33, 0i
    %10:f32 = access %x_18, 0u
    %11:i32 = call %tint_f32_to_i32, %10
    %13:i32 = and %11, 1i
    %14:i32 = let %13
    %15:f32 = access %x_18, 1u
    %16:i32 = call %tint_f32_to_i32, %15
    %17:i32 = and %16, 1i
    %18:i32 = add %14, %17
    %19:i32 = add %18, %x_28
    %20:i32 = let %19
    %21:f32 = access %x_18, 2u
    %22:i32 = call %tint_f32_to_i32, %21
    %23:bool = eq %20, %22
    if %23 [t: $B3] {  # if_1
      $B3: {  # true
        loop [b: $B4, c: $B5] {  # loop_1
          $B4: {  # body
            %x_34:ptr<function, i32, read_write> = var
            %25:i32 = load %x_33
            %26:u32 = bitcast %25
            %27:bool = lt %26, 10u
            if %27 [t: $B6, f: $B7] {  # if_2
              $B6: {  # true
                exit_if  # if_2
              }
              $B7: {  # false
                exit_loop  # loop_1
              }
            }
            continue  # -> $B5
          }
          $B5: {  # continuing
            %28:i32 = load %x_33
            %29:i32 = add %28, 1i
            store %x_34, %29
            %30:i32 = load %x_34
            store %x_33, %30
            next_iteration  # -> $B4
          }
        }
        exit_if  # if_1
      }
    }
    store %x_4, 1i
    ret
  }
}
%tint_symbol = @fragment func(%x_2_param:vec4<f32> [@position], %x_3_param:i32 [@location(0), @interpolate(flat)]):main_out {
  $B8: {
    store %x_2, %x_2_param
    store %x_3, %x_3_param
    %34:void = call %main_1
    %35:i32 = load %x_4
    %36:main_out = construct %35
    ret %36
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B9: {
    %38:i32 = convert %value
    %39:bool = gte %value, -2147483648.0f
    %40:i32 = select -2147483648i, %38, %39
    %41:bool = lte %value, 2147483520.0f
    %42:i32 = select 2147483647i, %40, %41
    ret %42
  }
}

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