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
  %continue_execution:ptr<private, bool, read_write> = var, true
}

%main_1 = func():void {
  $B2: {
    %a:ptr<function, i32, read_write> = var
    store %a, 1i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %6:i32 = load %a
        %7:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %8:i32 = load %7
        %9:bool = gte %6, %8
        if %9 [t: $B5] {  # if_1
          $B5: {  # true
            exit_loop  # loop_1
          }
        }
        if true [t: $B6] {  # if_2
          $B6: {  # true
            store %continue_execution, false
            exit_if  # if_2
          }
        }
        %10:i32 = load %a
        %11:i32 = add %10, 1i
        store %a, %11
        continue  # -> $B4
      }
      $B4: {  # continuing
        %12:i32 = load %a
        %x_39:i32 = let %12
        %14:bool = neq %x_39, 1i
        %15:bool = eq %14, false
        break_if %15  # -> [t: exit_loop loop_1, f: $B3]
      }
    }
    %16:i32 = load %a
    %17:bool = eq %16, 1i
    if %17 [t: $B7, f: $B8] {  # if_3
      $B7: {  # true
        %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %19:i32 = load %18
        %20:f32 = convert %19
        %21:f32 = let %20
        %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %23:i32 = load %22
        %24:f32 = convert %23
        %25:f32 = let %24
        %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %27:i32 = load %26
        %28:f32 = convert %27
        %29:vec4<f32> = construct 1.0f, %21, %25, %28
        store %x_GLF_color, %29
        exit_if  # if_3
      }
      $B8: {  # false
        %30:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %31:i32 = load %30
        %32:f32 = convert %31
        %33:vec4<f32> = construct %32
        store %x_GLF_color, %33
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %35:void = call %main_1
    %36:vec4<f32> = load %x_GLF_color
    %37:main_out = construct %36
    %38:bool = load %continue_execution
    %39:bool = eq %38, false
    if %39 [t: $B10] {  # if_4
      $B10: {  # true
        terminate_invocation
      }
    }
    ret %37
  }
}

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