SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # 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 {
  %b2 = block {
    %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
    %x_44:f32 = load %8
    %10:vec4<f32> = construct 4.0f, 87.589996337890625f, %x_44, 92.51000213623046875f
    store %I, %10
    store %Nref, vec4<f32>(17.049999237060546875f, -6.09999990463256835938f, 4329.37060546875f, 2.70000004768371582031f)
    %x_46:vec4<f32> = load %N
    %x_47:vec4<f32> = load %I
    %x_48:vec4<f32> = load %Nref
    %14:vec4<f32> = faceForward %x_46, %x_47, %x_48
    store %v, %14
    %x_50:vec4<f32> = load %v
    %16:vec4<bool> = eq %x_50, vec4<f32>(-1.0f, -2.0f, -3.0f, -4.0f)
    %17:bool = all %16
    if %17 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_1
      }
      %b4 = block {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b5 {
  %b5 = block {
    %19:void = call %main_1
    %20:vec4<f32> = load %x_GLF_color
    %21:main_out = construct %20
    ret %21
  }
}

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