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

%func_ = func():i32 {
  $B2: {
    %coord:ptr<function, vec2<f32>, read_write> = var
    %tmp3:ptr<function, f32, read_write> = var
    %tmp2:ptr<function, array<f32, 1>, read_write> = var
    %tmp:ptr<function, vec4<f32>, read_write> = var
    %x_48:ptr<function, f32, read_write> = var
    store %coord, vec2<f32>(1.0f)
    %9:f32 = load_vector_element %coord, 1u
    %10:i32 = call %tint_f32_to_i32, %9
    %12:bool = lt %10, 180i
    if %12 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %13:ptr<function, f32, read_write> = access %tmp2, 0i
        %14:f32 = load %13
        store %x_48, %14
        %15:f32 = load %x_48
        store %tmp3, %15
        exit_if  # if_1
      }
      $B4: {  # false
        store %continue_execution, false
        exit_if  # if_1
      }
    }
    %16:f32 = load %x_48
    %17:vec4<f32> = construct %16
    store %tmp, %17
    ret 1i
  }
}
%main_1 = func():void {
  $B5: {
    %19:i32 = call %func_
    %x_9:i32 = let %19
    %21:bool = eq %x_9, 1i
    if %21 [t: $B6, f: $B7] {  # if_2
      $B6: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_2
      }
      $B7: {  # false
        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %23:void = call %main_1
    %24:vec4<f32> = load %x_GLF_color
    %25:main_out = construct %24
    %26:bool = load %continue_execution
    %27:bool = eq %26, false
    if %27 [t: $B9] {  # if_3
      $B9: {  # true
        terminate_invocation
      }
    }
    ret %25
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B10: {
    %29:i32 = convert %value
    %30:bool = gte %value, -2147483648.0f
    %31:i32 = select -2147483648i, %29, %30
    %32:bool = lte %value, 2147483520.0f
    %33:i32 = select 2147483647i, %31, %32
    ret %33
  }
}

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