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: {
    %c1:ptr<function, bool, read_write> = var
    %uv:ptr<function, vec2<f32>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %x_37:ptr<function, bool, read_write> = var
    %x_9:ptr<function, i32, read_write> = var
    %8:f32 = load_vector_element %uv, 1u
    %9:bool = lt %8, 0.25f
    %x_35:bool = let %9
    store %c1, %x_35
    store %i, 0i
    store %x_37, %x_35
    store %x_9, 0i
    loop [b: $B3] {  # loop_1
      $B3: {  # body
        %11:i32 = load %x_9
        %12:bool = lt %11, 1i
        if %12 [t: $B4, f: $B5] {  # if_1
          $B4: {  # true
            exit_if  # if_1
          }
          $B5: {  # false
            exit_loop  # loop_1
          }
        }
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        ret
      }
    }
    %13:bool = load %x_37
    if %13 [t: $B6] {  # if_2
      $B6: {  # true
        ret
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B7: {
    %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.  *
********************************************************************
