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
}

%main_1 = func():void {
  $B2: {
    %i:ptr<function, i32, read_write> = var
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    store %i, 1i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %5:i32 = load %i
        %6:bool = lt %5, 2i
        if %6 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %7:f32 = load_vector_element %gl_FragCoord, 1u
        %8:bool = lt %7, 0.0f
        if %8 [t: $B7] {  # if_2
          $B7: {  # true
            %9:f32 = load_vector_element %gl_FragCoord, 0u
            %10:bool = lt %9, 0.0f
            if %10 [t: $B8] {  # if_3
              $B8: {  # true
                store %x_GLF_color, vec4<f32>(226.6959991455078125f, 1.0f, 1.0f, 1.0f)
                exit_if  # if_3
              }
            }
            continue  # -> $B4
          }
        }
        ret
      }
      $B4: {  # continuing
        %11:i32 = load %i
        %12:i32 = add %11, 1i
        store %i, %12
        next_iteration  # -> $B3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B9: {
    store %gl_FragCoord, %gl_FragCoord_param
    %15:void = call %main_1
    %16:vec4<f32> = load %x_GLF_color
    %17:main_out = construct %16
    ret %17
  }
}

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