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_6: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 {
    %m:ptr<function, mat2x2<f32>, read_write> = var
    %5:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %6:i32 = load %5
    %x_30:f32 = convert %6
    %8:vec2<f32> = construct %x_30, 0.0f
    %9:vec2<f32> = construct 0.0f, %x_30
    %10:mat2x2<f32> = construct %8, %9
    %11:mat2x2<f32> = transpose %10
    %12:mat2x2<f32> = transpose %11
    store %m, %12
    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %14:i32 = load %13
    %x_39:f32 = convert %14
    %16:vec2<f32> = construct %x_39, 0.0f
    %17:vec2<f32> = construct 0.0f, %x_39
    %x_42:mat2x2<f32> = construct %16, %17
    %19:ptr<function, vec2<f32>, read_write> = access %m, 0u
    %20:vec2<f32> = load %19
    %21:vec2<f32> = access %x_42, 0u
    %22:vec2<bool> = eq %20, %21
    %23:bool = all %22
    %24:ptr<function, vec2<f32>, read_write> = access %m, 1u
    %25:vec2<f32> = load %24
    %26:vec2<f32> = access %x_42, 1u
    %27:vec2<bool> = eq %25, %26
    %28:bool = all %27
    %29:bool = and %23, %28
    if %29 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %30:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %31:i32 = load %30
        %32:f32 = convert %31
        %33:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %34:i32 = load %33
        %35:f32 = convert %34
        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %37:i32 = load %36
        %38:f32 = convert %37
        %39:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %40:i32 = load %39
        %41:f32 = convert %40
        %42:vec4<f32> = construct %32, %35, %38, %41
        store %x_GLF_color, %42
        exit_if  # if_1
      }
      %b4 = block {  # false
        %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %44:i32 = load %43
        %45:f32 = convert %44
        %46:vec4<f32> = construct %45
        store %x_GLF_color, %46
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b5 {
  %b5 = block {
    %48:void = call %main_1
    %49:vec4<f32> = load %x_GLF_color
    %50:main_out = construct %49
    ret %50
  }
}

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