SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
  el:i32 @offset(0)
}

buf1 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr, 2> @offset(0)
}

strided_arr_1 = struct @align(4) {
  el:f32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr_1, 2> @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, buf1, read> = var @binding_point(0, 1)
  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
}

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

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