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, 4> @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

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

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