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_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: {
    %c:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %7:i32 = load %6
    store %c, %7
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %9:i32 = load %8
    store %i, %9
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %10:i32 = load %i
        %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %12:i32 = load %11
        %13:bool = lt %10, %12
        if %13 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %14:i32 = load %i
        %15:i32 = complement %14
        store %c, %15
        %16:i32 = load %c
        %17:i32 = max %16, 0i
        %18:i32 = min %17, 3i
        store %c, %18
        continue  # -> $B4
      }
      $B4: {  # continuing
        %19:i32 = load %i
        %20:i32 = add %19, 1i
        store %i, %20
        next_iteration  # -> $B3
      }
    }
    %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %22:i32 = load %21
    %23:f32 = convert %22
    %24:vec4<f32> = construct %23
    store %x_GLF_color, %24
    %25:i32 = load %c
    %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %27:i32 = load %26
    %28:bool = eq %25, %27
    if %28 [t: $B7] {  # if_2
      $B7: {  # true
        %29:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %30:i32 = load %29
        %31:f32 = convert %30
        %32:f32 = let %31
        %33:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %34:i32 = load %33
        %35:f32 = convert %34
        %36:f32 = let %35
        %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %38:i32 = load %37
        %39:f32 = convert %38
        %40:f32 = let %39
        %41:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %42:i32 = load %41
        %43:f32 = convert %42
        %44:vec4<f32> = construct %32, %36, %40, %43
        store %x_GLF_color, %44
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %46:void = call %main_1
    %47:vec4<f32> = load %x_GLF_color
    %48:main_out = construct %47
    ret %48
  }
}

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