SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
  color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %color:ptr<private, vec4<f32>, read_write> = var
}

%drawShape_vf2_ = func(%pos:ptr<function, vec2<f32>, read_write>):vec3<f32> {
  $B2: {
    %c3:ptr<function, bool, read_write> = var
    %x_35_phi:ptr<function, bool, read_write> = var
    %6:f32 = load_vector_element %pos, 1u
    %x_32:f32 = let %6
    %8:bool = lt %x_32, 1.0f
    %x_33:bool = let %8
    store %c3, %x_33
    store %x_35_phi, %x_33
    loop [b: $B3] {  # loop_1
      $B3: {  # body
        %10:bool = load %x_35_phi
        %x_35:bool = let %10
        if %x_35 [t: $B4, f: $B5] {  # if_1
          $B4: {  # true
            exit_if  # if_1
          }
          $B5: {  # false
            exit_loop  # loop_1
          }
        }
        ret vec3<f32>(1.0f)
      }
    }
    ret vec3<f32>(1.0f)
  }
}
%main_1 = func():void {
  $B6: {
    %param:ptr<function, vec2<f32>, read_write> = var
    store %param, vec2<f32>(1.0f)
    %14:vec3<f32> = call %drawShape_vf2_, %param
    %x_29:vec3<f32> = let %14
    store %color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B7: {
    %17:void = call %main_1
    %18:vec4<f32> = load %color
    %19:main_out = construct %18
    ret %19
  }
}

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