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_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %f:ptr<function, f32, read_write> = var
    store %f, 142.6999969482421875f
    %x_25:f32 = load %f
    %6:i32 = convert %x_25
    %7:f32 = convert %6
    %8:bool = gt %7, 100.0f
    if %8 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %9:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_33:i32 = load %9
        %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_36:i32 = load %11
        %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_39:i32 = load %13
        %15:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_42:i32 = load %15
        %17:f32 = convert %x_33
        %18:f32 = convert %x_36
        %19:f32 = convert %x_39
        %20:f32 = convert %x_42
        %21:vec4<f32> = construct %17, %18, %19, %20
        store %x_GLF_color, %21
        exit_if  # if_1
      }
      %b4 = block {  # false
        %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_46:i32 = load %22
        %x_47:f32 = convert %x_46
        %25:vec4<f32> = construct %x_47, %x_47, %x_47, %x_47
        store %x_GLF_color, %25
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b5 {
  %b5 = block {
    %27:void = call %main_1
    %28:vec4<f32> = load %x_GLF_color
    %29:main_out = construct %28
    ret %29
  }
}

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