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, 2i, 0u
    %7:i32 = load %6
    store %a, %7
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 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 %i
        %15:i32 = call %tint_mod_i32, 1i, %14
        %17:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %18:i32 = load %17
        %19:bool = eq %15, %18
        if %19 [t: $B7] {  # if_2
          $B7: {  # true
            continue  # -> $B4
          }
        }
        %20:i32 = load %a
        %21:i32 = add %20, 1i
        store %a, %21
        continue  # -> $B4
      }
      $B4: {  # continuing
        %22:i32 = load %i
        %23:i32 = add %22, 1i
        store %i, %23
        next_iteration  # -> $B3
      }
    }
    %24:i32 = load %a
    %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, 3i, 0u
        %29:i32 = load %28
        %30:f32 = convert %29
        %31:f32 = let %30
        %32:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %33:i32 = load %32
        %34:f32 = convert %33
        %35:f32 = let %34
        %36:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %37:i32 = load %36
        %38:f32 = convert %37
        %39:f32 = let %38
        %40:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 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, 2i, 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.  *
********************************************************************
