SKIP: FAILED

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

buf1 = 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, buf1, read> = var @binding_point(0, 1)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %idx:ptr<function, i32, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %indexable:ptr<function, array<strided_arr, 2>, read_write> = var
    %7:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %8:i32 = load %7
    %x_27:i32 = let %8
    %10:u32 = bitcast %x_27
    %11:u32 = and %10, 31u
    %12:i32 = shl 1i, %11
    store %idx, %12
    %13:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %14:i32 = load %13
    %x_30:i32 = let %14
    %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %17:i32 = load %16
    %x_32:i32 = let %17
    %19:i32 = load %idx
    %x_34:i32 = let %19
    %21:strided_arr = construct %x_30
    %22:strided_arr = let %21
    %23:strided_arr = construct %x_32
    %24:array<strided_arr, 2> = construct %22, %23
    store %indexable, %24
    %25:ptr<function, i32, read_write> = access %indexable, %x_34, 0u
    %26:i32 = load %25
    %x_36:i32 = let %26
    store %a, %x_36
    %28:i32 = load %a
    %x_37:i32 = let %28
    %30:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %31:i32 = load %30
    %x_39:i32 = let %31
    %33:bool = eq %x_37, %x_39
    if %33 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %34:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %35:i32 = load %34
        %x_45:i32 = let %35
        %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %38:i32 = load %37
        %x_48:i32 = let %38
        %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %41:i32 = load %40
        %x_51:i32 = let %41
        %43:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %44:i32 = load %43
        %x_54:i32 = let %44
        %46:f32 = convert %x_45
        %47:f32 = let %46
        %48:f32 = convert %x_48
        %49:f32 = let %48
        %50:f32 = convert %x_51
        %51:f32 = let %50
        %52:f32 = convert %x_54
        %53:vec4<f32> = construct %47, %49, %51, %52
        store %x_GLF_color, %53
        exit_if  # if_1
      }
      $B4: {  # false
        %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %55:i32 = load %54
        %x_58:i32 = let %55
        %57:f32 = convert %x_58
        %x_59:f32 = let %57
        %59:vec4<f32> = construct %x_59, %x_59, %x_59, %x_59
        store %x_GLF_color, %59
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %61:void = call %main_1
    %62:vec4<f32> = load %x_GLF_color
    %63:main_out = construct %62
    ret %63
  }
}

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