SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
  el:f32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 2> @offset(0)
}

strided_arr_1 = struct @align(4) {
  el:i32 @offset(0)
}

buf1 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr_1, 2> @offset(0)
}

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

%b1 = block {  # root
  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %v1:ptr<function, vec2<f32>, read_write> = var
    %6:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_35:f32 = load %6
    %8:vec2<f32> = construct %x_35
    store %v1, %8
    %9:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %x_38:i32 = load %9
    %11:f32 = load_vector_element %v1, 1u
    %12:f32 = ldexp %11, -256i
    store_vector_element %v1, %x_38, %12
    %13:vec2<f32> = load %v1
    %14:vec2<f32> = construct %x_35, 0.0f
    %15:vec2<f32> = construct 0.0f, %x_35
    %16:mat2x2<f32> = construct %14, %15
    %17:vec2<f32> = mul %13, %16
    %18:f32 = access %17, 0u
    %19:bool = eq %18, %x_35
    if %19 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %x_53:f32 = convert %x_38
        %21:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %22:i32 = load %21
        %x_56:f32 = convert %22
        %24:vec4<f32> = construct %x_53, %x_56, %x_56, %x_53
        store %x_GLF_color, %24
        exit_if  # if_1
      }
      %b4 = block {  # false
        %25:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %26:i32 = load %25
        %27:f32 = convert %26
        %28:vec4<f32> = construct %27
        store %x_GLF_color, %28
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b5 {
  %b5 = block {
    %30:void = call %main_1
    %31:vec4<f32> = load %x_GLF_color
    %32:main_out = construct %31
    ret %32
  }
}

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