SKIP: FAILED

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

buf0 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr, 2> @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 {
    %f:ptr<function, f32, read_write> = var
    %a:ptr<function, i32, read_write> = var
    store %f, 2.0f
    %x_27:f32 = load %f
    %7:f32 = clamp 1.0f, 1.0f, %x_27
    %8:f32 = sub 1.0f, %7
    %9:i32 = convert %8
    store %a, %9
    %x_31:i32 = load %a
    %11:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %x_33:i32 = load %11
    %13:bool = eq %x_31, %x_33
    if %13 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %14:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %x_39:i32 = load %14
        %16:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %x_42:i32 = load %16
        %18:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %x_45:i32 = load %18
        %20:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %x_48:i32 = load %20
        %22:f32 = convert %x_39
        %23:f32 = convert %x_42
        %24:f32 = convert %x_45
        %25:f32 = convert %x_48
        %26:vec4<f32> = construct %22, %23, %24, %25
        store %x_GLF_color, %26
        exit_if  # if_1
      }
      %b4 = block {  # false
        %27:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %x_52:i32 = load %27
        %x_53:f32 = convert %x_52
        %30:vec4<f32> = construct %x_53, %x_53, %x_53, %x_53
        store %x_GLF_color, %30
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b5 {
  %b5 = block {
    %32:void = call %main_1
    %33:vec4<f32> = load %x_GLF_color
    %34:main_out = construct %33
    ret %34
  }
}

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