SKIP: FAILED

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

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

%main_1 = func():void {
  $B2: {
    %iv:ptr<function, vec2<i32>, read_write> = var
    %5:vec4<f32> = load %frag_color
    %6:vec2<f32> = swizzle %5, xy
    %7:vec2<f32> = mul %6, 256.0f
    %8:vec2<i32> = call %tint_v2f32_to_v2i32, %7
    store %iv, %8
    %10:i32 = load_vector_element %iv, 1u
    %11:i32 = call %tint_div_i32, %10, 2i
    %13:i32 = and %11, 64i
    %14:bool = eq %13, 64i
    if %14 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        store %color_out, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_1
      }
      $B4: {  # false
        store %color_out, vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f)
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%frag_color_param:vec4<f32> [@location(1)]):main_out {
  $B5: {
    store %frag_color, %frag_color_param
    %17:void = call %main_1
    %18:vec4<f32> = load %color_out
    %19:main_out = construct %18
    ret %19
  }
}
%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B6: {
    %22:bool = eq %rhs, 0i
    %23:bool = eq %lhs, -2147483648i
    %24:bool = eq %rhs, -1i
    %25:bool = and %23, %24
    %26:bool = or %22, %25
    %27:i32 = select %rhs, 1i, %26
    %28:i32 = div %lhs, %27
    ret %28
  }
}
%tint_v2f32_to_v2i32 = func(%value:vec2<f32>):vec2<i32> {
  $B7: {
    %30:vec2<i32> = convert %value
    %31:vec2<bool> = gte %value, vec2<f32>(-2147483648.0f)
    %32:vec2<i32> = select vec2<i32>(-2147483648i), %30, %31
    %33:vec2<bool> = lte %value, vec2<f32>(2147483520.0f)
    %34:vec2<i32> = select vec2<i32>(2147483647i), %32, %33
    ret %34
  }
}

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