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_6: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
    %i:ptr<function, i32, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %7:i32 = load %6
    store %a, %7
    store %i, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %8:i32 = load %i
        %9:bool = lt %8, 3i
        if %9 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %10:i32 = load %i
        %11:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %12:i32 = load %11
        %13:bool = eq %10, %12
        if %13 [t: $B7, f: $B8] {  # if_2
          $B7: {  # true
            %14:i32 = load %a
            %15:i32 = add %14, 1i
            store %a, %15
            exit_if  # if_2
          }
          $B8: {  # false
            %16:i32 = load %a
            %17:i32 = load %i
            %18:i32 = call %tint_div_i32, %16, %17
            store %a, %18
            exit_if  # if_2
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %20:i32 = load %i
        %21:i32 = add %20, 1i
        store %i, %21
        next_iteration  # -> $B3
      }
    }
    %22:i32 = load %a
    %23:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %24:i32 = load %23
    %25:bool = eq %22, %24
    if %25 [t: $B9, f: $B10] {  # if_3
      $B9: {  # true
        %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %27:i32 = load %26
        %28:f32 = convert %27
        %29:f32 = let %28
        %30:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %31:i32 = load %30
        %32:f32 = convert %31
        %33:f32 = let %32
        %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %35:i32 = load %34
        %36:f32 = convert %35
        %37:f32 = let %36
        %38:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %39:i32 = load %38
        %40:f32 = convert %39
        %41:vec4<f32> = construct %29, %33, %37, %40
        store %x_GLF_color, %41
        exit_if  # if_3
      }
      $B10: {  # false
        %42:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %43:i32 = load %42
        %44:f32 = convert %43
        %45:vec4<f32> = construct %44
        store %x_GLF_color, %45
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B11: {
    %47:void = call %main_1
    %48:vec4<f32> = load %x_GLF_color
    %49:main_out = construct %48
    ret %49
  }
}
%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B12: {
    %52:bool = eq %rhs, 0i
    %53:bool = eq %lhs, -2147483648i
    %54:bool = eq %rhs, -1i
    %55:bool = and %53, %54
    %56:bool = or %52, %55
    %57:i32 = select %rhs, 1i, %56
    %58:i32 = div %lhs, %57
    ret %58
  }
}

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