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: {
    %b:ptr<function, bool, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %a:ptr<function, f32, read_write> = var
    store %b, false
    store %i, 1i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %6:i32 = load %i
        %7:bool = gt %6, 0i
        if %7 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %8:i32 = load %i
        %9:f32 = convert %8
        %10:f32 = add 1.0f, %9
        store %a, %10
        %11:f32 = load %a
        %12:f32 = sub 2.0f, %11
        %13:bool = eq %12, 0.0f
        if %13 [t: $B7] {  # if_2
          $B7: {  # true
            store %b, true
            exit_if  # if_2
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %14:i32 = load %i
        %15:i32 = sub %14, 1i
        store %i, %15
        next_iteration  # -> $B3
      }
    }
    %16:bool = load %b
    if %16 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_3
      }
      $B9: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %18:void = call %main_1
    %19:vec4<f32> = load %x_GLF_color
    %20:main_out = construct %19
    ret %20
  }
}

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