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: {
    %a:ptr<function, i32, read_write> = var
    %5:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %6:i32 = load %5
    %x_25:i32 = let %6
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %9:i32 = load %8
    %x_29:i32 = let %9
    %11:u32 = and 5u, 31u
    %12:i32 = shl %x_25, %11
    %13:u32 = bitcast %12
    %14:u32 = and %13, 31u
    %15:i32 = shr 1i, %14
    %16:i32 = let %15
    %17:u32 = bitcast %x_29
    %18:u32 = and %17, 31u
    %19:i32 = shr %16, %18
    store %a, %19
    %20:i32 = load %a
    %x_31:i32 = let %20
    %22:bool = eq %x_31, 1i
    if %22 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %23:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %24:i32 = load %23
        %x_37:i32 = let %24
        %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %27:i32 = load %26
        %x_40:i32 = let %27
        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %30:i32 = load %29
        %x_43:i32 = let %30
        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %33:i32 = load %32
        %x_46:i32 = let %33
        %35:f32 = convert %x_37
        %36:f32 = let %35
        %37:f32 = convert %x_40
        %38:f32 = let %37
        %39:f32 = convert %x_43
        %40:f32 = let %39
        %41:f32 = convert %x_46
        %42:vec4<f32> = construct %36, %38, %40, %41
        store %x_GLF_color, %42
        exit_if  # if_1
      }
      $B4: {  # false
        %43:i32 = load %a
        %x_49:i32 = let %43
        %45:f32 = convert %x_49
        %x_50:f32 = let %45
        %47:vec4<f32> = construct %x_50, %x_50, %x_50, %x_50
        store %x_GLF_color, %47
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %49:void = call %main_1
    %50:vec4<f32> = load %x_GLF_color
    %51:main_out = construct %50
    ret %51
  }
}

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