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, 3> @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
}

%main_1 = func():void {
  $B2: {
    %x_32_phi:ptr<function, i32, read_write> = var
    %5:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
    %6:i32 = load %5
    %x_24:i32 = let %6
    %8:f32 = convert %x_24
    %x_25:f32 = let %8
    %10:vec4<f32> = construct %x_25, %x_25, %x_25, %x_25
    store %x_GLF_color, %10
    %11:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
    %12:i32 = load %11
    %x_28:i32 = let %12
    %14:u32 = bitcast %x_28
    %15:u32 = and %14, 31u
    %16:i32 = shl %x_28, %15
    %17:u32 = and 1u, 31u
    %18:i32 = shr %16, %17
    %x_30:i32 = let %18
    store %x_32_phi, %x_24
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %20:i32 = load %x_32_phi
        %x_32:i32 = let %20
        %22:bool = lt %x_30, 10i
        if %22 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %x_33:ptr<function, i32, read_write> = var
        %24:i32 = add %x_32, 1i
        store %x_33, %24
        %25:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
        %26:i32 = load %25
        %x_39:i32 = let %26
        %28:i32 = load %x_33
        %29:i32 = let %28
        %30:i32 = bitcast %x_39
        %31:bool = eq %29, %30
        if %31 [t: $B7] {  # if_2
          $B7: {  # true
            %32:f32 = convert %x_28
            %x_43:f32 = let %32
            %34:vec4<f32> = construct %x_43, %x_25, %x_25, %x_43
            store %x_GLF_color, %34
            exit_loop  # loop_1
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %35:i32 = load %x_33
        store %x_32_phi, %35
        next_iteration  # -> $B3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %37:void = call %main_1
    %38:vec4<f32> = load %x_GLF_color
    %39:main_out = construct %38
    ret %39
  }
}

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