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
    %x_41:f32 = let %9
    %11:i32 = call %tint_f32_to_i32, %x_41
    %13:bool = lt %11, 180i
    if %13 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %14:ptr<function, f32, read_write> = access %tmp2, 0i
        %15:f32 = load %14
        store %x_48, %15
        %16:f32 = load %x_48
        store %tmp3, %16
        exit_if  # if_1
      }
      $B4: {  # false
        store %continue_execution, false
        exit_if  # if_1
      }
    }
    %17:f32 = load %x_48
    %18:f32 = load %x_48
    %19:f32 = load %x_48
    %20:f32 = load %x_48
    %21:vec4<f32> = construct %17, %18, %19, %20
    store %tmp, %21
    ret 1i
  }
}
%main_1 = func():void {
  $B5: {
    %23:i32 = call %func_
    %x_9:i32 = let %23
    %25:bool = eq %x_9, 1i
    if %25 [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: {
    %27:void = call %main_1
    %28:vec4<f32> = load %x_GLF_color
    %29:main_out = construct %28
    %30:bool = load %continue_execution
    %31:bool = eq %30, false
    if %31 [t: $B9] {  # if_3
      $B9: {  # true
        terminate_invocation
      }
    }
    ret %29
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B10: {
    %33:i32 = convert %value
    %34:bool = gte %value, -2147483648.0f
    %35:i32 = select -2147483648i, %33, %34
    %36:bool = lte %value, 2147483520.0f
    %37:i32 = select 2147483647i, %35, %36
    ret %37
  }
}

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