SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
  quarter:f32 @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %N:ptr<function, vec4<f32>, read_write> = var
    %I:ptr<function, vec4<f32>, read_write> = var
    %Nref:ptr<function, vec4<f32>, read_write> = var
    %v:ptr<function, vec4<f32>, read_write> = var
    store %N, vec4<f32>(1.0f, 2.0f, 3.0f, 4.0f)
    %8:ptr<uniform, f32, read> = access %x_7, 0u
    %9:f32 = load %8
    %x_44:f32 = let %9
    %11:vec4<f32> = construct 4.0f, 87.589996337890625f, %x_44, 92.51000213623046875f
    store %I, %11
    store %Nref, vec4<f32>(17.049999237060546875f, -6.09999990463256835938f, 4329.37060546875f, 2.70000004768371582031f)
    %12:vec4<f32> = load %N
    %x_46:vec4<f32> = let %12
    %14:vec4<f32> = load %I
    %x_47:vec4<f32> = let %14
    %16:vec4<f32> = load %Nref
    %x_48:vec4<f32> = let %16
    %18:vec4<f32> = faceForward %x_46, %x_47, %x_48
    store %v, %18
    %19:vec4<f32> = load %v
    %x_50:vec4<f32> = let %19
    %21:vec4<bool> = eq %x_50, vec4<f32>(-1.0f, -2.0f, -3.0f, -4.0f)
    %22:bool = all %21
    if %22 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_1
      }
      $B4: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %24:void = call %main_1
    %25:vec4<f32> = load %x_GLF_color
    %26:main_out = construct %25
    ret %26
  }
}

unhandled variable address space
********************************************************************
*  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.  *
********************************************************************
