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
    %9:f32 = load %8
    %10:vec4<f32> = construct 4.0f, 87.589996337890625f, %9, 92.51000213623046875f
    store %I, %10
    store %Nref, vec4<f32>(17.049999237060546875f, -6.09999990463256835938f, 4329.37060546875f, 2.70000004768371582031f)
    %11:vec4<f32> = load %N
    %12:vec4<f32> = load %I
    %13:vec4<f32> = load %Nref
    %14:vec4<f32> = faceForward %11, %12, %13
    store %v, %14
    %15:vec4<f32> = load %v
    %16:vec4<bool> = eq %15, 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.  *
********************************************************************
