SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 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: {  # 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: {
    %m:ptr<function, mat2x2<f32>, read_write> = var
    %5:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %6:i32 = load %5
    %x_29:i32 = let %6
    %8:f32 = convert %x_29
    %x_30:f32 = let %8
    %10:vec2<f32> = construct %x_30, 0.0f
    %11:vec2<f32> = let %10
    %12:vec2<f32> = construct 0.0f, %x_30
    %13:mat2x2<f32> = construct %11, %12
    %14:mat2x2<f32> = transpose %13
    %15:mat2x2<f32> = transpose %14
    store %m, %15
    %16:mat2x2<f32> = load %m
    %x_36:mat2x2<f32> = let %16
    %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %19:i32 = load %18
    %x_38:i32 = let %19
    %21:f32 = convert %x_38
    %x_39:f32 = let %21
    %23:vec2<f32> = construct %x_39, 0.0f
    %24:vec2<f32> = let %23
    %25:vec2<f32> = construct 0.0f, %x_39
    %26:mat2x2<f32> = construct %24, %25
    %x_42:mat2x2<f32> = let %26
    %28:vec2<f32> = access %x_36, 0u
    %29:vec2<f32> = access %x_42, 0u
    %30:vec2<bool> = eq %28, %29
    %31:bool = all %30
    %32:bool = let %31
    %33:vec2<f32> = access %x_36, 1u
    %34:vec2<f32> = access %x_42, 1u
    %35:vec2<bool> = eq %33, %34
    %36:bool = all %35
    %37:bool = and %32, %36
    if %37 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %38:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %39:i32 = load %38
        %x_56:i32 = let %39
        %41:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %42:i32 = load %41
        %x_59:i32 = let %42
        %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %45:i32 = load %44
        %x_62:i32 = let %45
        %47:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %48:i32 = load %47
        %x_65:i32 = let %48
        %50:f32 = convert %x_56
        %51:f32 = let %50
        %52:f32 = convert %x_59
        %53:f32 = let %52
        %54:f32 = convert %x_62
        %55:f32 = let %54
        %56:f32 = convert %x_65
        %57:vec4<f32> = construct %51, %53, %55, %56
        store %x_GLF_color, %57
        exit_if  # if_1
      }
      $B4: {  # false
        %58:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %59:i32 = load %58
        %x_69:i32 = let %59
        %61:f32 = convert %x_69
        %x_70:f32 = let %61
        %63:vec4<f32> = construct %x_70, %x_70, %x_70, %x_70
        store %x_GLF_color, %63
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %65:void = call %main_1
    %66:vec4<f32> = load %x_GLF_color
    %67:main_out = construct %66
    ret %67
  }
}

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