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: {
    %x_26:ptr<function, vec2<f32>, read_write> = var
    %x_5:ptr<function, i32, read_write> = var
    %x_39:ptr<function, bool, read_write> = var
    %x_40:ptr<function, bool, read_write> = var
    store %x_26, vec2<f32>(0.0f)
    store %x_5, 2i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_27:ptr<function, vec2<f32>, read_write> = var
        %x_4:ptr<function, i32, read_write> = var
        %9:i32 = load %x_5
        %10:bool = lt %9, 3i
        if %10 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %11:i32 = load %x_5
        %12:f32 = convert %11
        %13:vec2<f32> = construct 1.0f, %12
        %14:vec2<f32> = swizzle %13, xy
        store %x_27, %14
        %15:i32 = load %x_5
        %16:i32 = add %15, 1i
        store %x_4, %16
        %17:vec2<f32> = load %x_27
        store %x_26, %17
        %18:i32 = load %x_4
        store %x_5, %18
        next_iteration  # -> $B3
      }
    }
    %19:f32 = load_vector_element %x_26, 0u
    %20:bool = neq %19, 1.0f
    %x_34:bool = let %20
    store %x_40, %x_34
    %22:bool = eq %x_34, false
    if %22 [t: $B7] {  # if_2
      $B7: {  # true
        %23:f32 = load_vector_element %x_26, 1u
        %24:bool = neq %23, 2.0f
        store %x_39, %24
        %25:bool = load %x_39
        store %x_40, %25
        exit_if  # if_2
      }
    }
    %26:bool = load %x_40
    if %26 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_3
      }
      $B9: {  # false
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %28:void = call %main_1
    %29:vec4<f32> = load %x_GLF_color
    %30:main_out = construct %29
    ret %30
  }
}

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