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

%x_47 = func():void {
  $B2: {
    store %continue_execution, false
    ret
  }
}
%main_1 = func():void {
  $B3: {
    loop [b: $B4] {  # loop_1
      $B4: {  # body
        %x_30_phi:ptr<function, i32, read_write> = var
        %x_48_phi:ptr<function, bool, read_write> = var
        store %x_30_phi, 0i
        loop [b: $B5, c: $B6] {  # loop_2
          $B5: {  # body
            %x_31:ptr<function, i32, read_write> = var
            %9:i32 = load %x_30_phi
            %x_30:i32 = let %9
            store %x_48_phi, false
            %11:bool = lt %x_30, 10i
            if %11 [t: $B7, f: $B8] {  # if_1
              $B7: {  # true
                exit_if  # if_1
              }
              $B8: {  # false
                exit_loop  # loop_2
              }
            }
            %12:f32 = load_vector_element %gl_FragCoord, 1u
            %x_37:f32 = let %12
            %14:bool = lt %x_37, 0.0f
            if %14 [t: $B9] {  # if_2
              $B9: {  # true
                %15:f32 = load_vector_element %gl_FragCoord, 0u
                %x_42:f32 = let %15
                %17:bool = lt %x_42, 0.0f
                if %17 [t: $B10, f: $B11] {  # if_3
                  $B10: {  # true
                    store %x_48_phi, false
                    exit_loop  # loop_2
                  }
                  $B11: {  # false
                    continue  # -> $B6
                  }
                }
                exit_if  # if_2
              }
            }
            %18:void = call %x_47
            continue  # -> $B6
          }
          $B6: {  # continuing
            %19:i32 = add %x_30, 1i
            store %x_31, %19
            %20:i32 = load %x_31
            store %x_30_phi, %20
            next_iteration  # -> $B5
          }
        }
        %21:bool = load %x_48_phi
        %x_48:bool = let %21
        if %x_48 [t: $B12] {  # if_4
          $B12: {  # true
            exit_loop  # loop_1
          }
        }
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_loop  # loop_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B13: {
    store %gl_FragCoord, %gl_FragCoord_param
    %25:void = call %main_1
    %26:vec4<f32> = load %x_GLF_color
    %27:main_out = construct %26
    %28:bool = load %continue_execution
    %29:bool = eq %28, false
    if %29 [t: $B14] {  # if_5
      $B14: {  # true
        terminate_invocation
      }
    }
    ret %27
  }
}

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