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_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: {
    %count:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %7:i32 = load %6
    store %count, %7
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %9:i32 = load %8
    store %i, %9
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %10:i32 = load %i
        %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %12:i32 = load %11
        %13:bool = lt %10, %12
        if %13 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %14:i32 = load %count
        %15:i32 = call %tint_mod_i32, %14, -93448i
        %17:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %18:i32 = load %17
        %19:bool = gt %15, %18
        if %19 [t: $B7] {  # if_2
          $B7: {  # true
            %20:i32 = load %count
            %21:i32 = add %20, 1i
            store %count, %21
            exit_if  # if_2
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %22:i32 = load %i
        %23:i32 = add %22, 1i
        store %i, %23
        next_iteration  # -> $B3
      }
    }
    %24:i32 = load %count
    %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 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_6, 0u, 2i, 0u
        %29:i32 = load %28
        %30:f32 = convert %29
        %31:f32 = let %30
        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %33:i32 = load %32
        %34:f32 = convert %33
        %35:f32 = let %34
        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %37:i32 = load %36
        %38:f32 = convert %37
        %39:f32 = let %38
        %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 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_6, 0u, 1i, 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
  }
}
%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B11: {
    %54:bool = eq %rhs, 0i
    %55:bool = eq %lhs, -2147483648i
    %56:bool = eq %rhs, -1i
    %57:bool = and %55, %56
    %58:bool = or %54, %57
    %59:i32 = select %rhs, 1i, %58
    %60:i32 = let %59
    %61:i32 = div %lhs, %60
    %62:i32 = mul %61, %60
    %63:i32 = sub %lhs, %62
    ret %63
  }
}

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