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
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %continue_execution:ptr<private, bool, read_write> = var, true
}

%main_1 = func():void {
  $B2: {
    %ll:ptr<function, i32, read_write> = var
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    %6:f32 = load_vector_element %gl_FragCoord, 0u
    %7:i32 = call %tint_f32_to_i32, %6
    %9:bool = lt %7, 2000i
    if %9 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        exit_if  # if_1
      }
      $B4: {  # false
        store %ll, 0i
        loop [b: $B5, c: $B6] {  # loop_1
          $B5: {  # body
            %10:f32 = load_vector_element %gl_FragCoord, 0u
            %11:bool = lt %10, 0.0f
            if %11 [t: $B7] {  # if_2
              $B7: {  # true
                store %continue_execution, false
                exit_if  # if_2
              }
            }
            %12:i32 = load %ll
            %13:bool = gte %12, 5i
            if %13 [t: $B8] {  # if_3
              $B8: {  # true
                exit_loop  # loop_1
              }
            }
            continue  # -> $B6
          }
          $B6: {  # continuing
            %14:i32 = load %ll
            %15:i32 = add %14, 1i
            store %ll, %15
            next_iteration  # -> $B5
          }
        }
        %16:f32 = load_vector_element %gl_FragCoord, 0u
        %17:i32 = call %tint_f32_to_i32, %16
        %18:bool = gte %17, 2000i
        if %18 [t: $B9] {  # if_4
          $B9: {  # true
            store %continue_execution, false
            exit_if  # if_4
          }
        }
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B10: {
    store %gl_FragCoord, %gl_FragCoord_param
    %21:void = call %main_1
    %22:vec4<f32> = load %x_GLF_color
    %23:main_out = construct %22
    %24:bool = load %continue_execution
    %25:bool = eq %24, false
    if %25 [t: $B11] {  # if_5
      $B11: {  # true
        terminate_invocation
      }
    }
    ret %23
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B12: {
    %27:i32 = convert %value
    %28:bool = gte %value, -2147483648.0f
    %29:i32 = select -2147483648i, %27, %28
    %30:bool = lte %value, 2147483520.0f
    %31:i32 = select 2147483647i, %29, %30
    ret %31
  }
}

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