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

%main_1 = func():void {
  $B2: {
    store %x_GLF_global_loop_count, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %5:i32 = load %x_GLF_global_loop_count
        %x_30:i32 = let %5
        %7:bool = lt %x_30, 100i
        if %7 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %8:i32 = load %x_GLF_global_loop_count
        %x_33:i32 = let %8
        %10:i32 = add %x_33, 1i
        store %x_GLF_global_loop_count, %10
        %11:i32 = load %x_GLF_global_loop_count
        %x_35:i32 = let %11
        %13:i32 = load %x_GLF_global_loop_count
        %x_36:i32 = let %13
        %15:i32 = mul %x_35, %x_36
        %16:bool = gt %15, 10i
        if %16 [t: $B7] {  # if_2
          $B7: {  # true
            exit_loop  # loop_1
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        next_iteration  # -> $B3
      }
    }
    %17:i32 = load %x_GLF_global_loop_count
    %x_41:i32 = let %17
    %19:bool = eq %x_41, 4i
    if %19 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %20:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %21:i32 = load %20
        %x_47:i32 = let %21
        %23:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %24:i32 = load %23
        %x_50:i32 = let %24
        %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %27:i32 = load %26
        %x_53:i32 = let %27
        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %30:i32 = load %29
        %x_56:i32 = let %30
        %32:f32 = convert %x_47
        %33:f32 = let %32
        %34:f32 = convert %x_50
        %35:f32 = let %34
        %36:f32 = convert %x_53
        %37:f32 = let %36
        %38:f32 = convert %x_56
        %39:vec4<f32> = construct %33, %35, %37, %38
        store %x_GLF_color, %39
        exit_if  # if_3
      }
      $B9: {  # false
        %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %41:i32 = load %40
        %x_60:i32 = let %41
        %43:f32 = convert %x_60
        %x_61:f32 = let %43
        %45:vec4<f32> = construct %x_61, %x_61, %x_61, %x_61
        store %x_GLF_color, %45
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %47:void = call %main_1
    %48:vec4<f32> = load %x_GLF_color
    %49:main_out = construct %48
    ret %49
  }
}

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