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_global_loop_count:ptr<private, i32, read_write> = var
  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%func_ = func():i32 {
  $B2: {
    loop [b: $B3] {  # loop_1
      $B3: {  # body
        %5:i32 = load %x_GLF_global_loop_count
        %6:bool = lt %5, 100i
        if %6 [t: $B4, f: $B5] {  # if_1
          $B4: {  # true
            exit_if  # if_1
          }
          $B5: {  # false
            exit_loop  # loop_1
          }
        }
        %7:i32 = load %x_GLF_global_loop_count
        %8:i32 = add %7, 1i
        store %x_GLF_global_loop_count, %8
        %9:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %10:i32 = load %9
        %x_78:i32 = let %10
        ret %x_78
      }
    }
    %12:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
    %13:i32 = load %12
    %x_80:i32 = let %13
    ret %x_80
  }
}
%main_1 = func():void {
  $B6: {
    %a:ptr<function, i32, read_write> = var
    store %x_GLF_global_loop_count, 0i
    loop [b: $B7, c: $B8] {  # loop_2
      $B7: {  # body
        %17:i32 = load %x_GLF_global_loop_count
        %18:i32 = add %17, 1i
        store %x_GLF_global_loop_count, %18
        if false [t: $B9] {  # if_2
          $B9: {  # true
            ret
          }
        }
        continue  # -> $B8
      }
      $B8: {  # continuing
        %19:i32 = load %x_GLF_global_loop_count
        %x_39:i32 = let %19
        %21:bool = lt %x_39, 100i
        %22:bool = and true, %21
        %23:bool = eq %22, false
        break_if %23  # -> [t: exit_loop loop_2, f: $B7]
      }
    }
    %24:i32 = call %func_
    %x_42:i32 = let %24
    store %a, %x_42
    %26:i32 = load %a
    %27:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
    %28:i32 = load %27
    %29:bool = eq %26, %28
    if %29 [t: $B10, f: $B11] {  # if_3
      $B10: {  # true
        %30:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %31:i32 = load %30
        %32:f32 = convert %31
        %33:f32 = let %32
        %34:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %35:i32 = load %34
        %36:f32 = convert %35
        %37:f32 = let %36
        %38:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %39:i32 = load %38
        %40:f32 = convert %39
        %41:f32 = let %40
        %42:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %43:i32 = load %42
        %44:f32 = convert %43
        %45:vec4<f32> = construct %33, %37, %41, %44
        store %x_GLF_color, %45
        exit_if  # if_3
      }
      $B11: {  # false
        %46:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %47:i32 = load %46
        %48:f32 = convert %47
        %49:vec4<f32> = construct %48
        store %x_GLF_color, %49
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B12: {
    %51:void = call %main_1
    %52:vec4<f32> = load %x_GLF_color
    %53:main_out = construct %52
    ret %53
  }
}

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