SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
  two:i32 @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: {
    %i:ptr<function, i32, read_write> = var
    %r:ptr<function, i32, read_write> = var
    store %i, 0i
    store %r, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %6:i32 = load %r
        %7:ptr<uniform, i32, read> = access %x_7, 0u
        %8:i32 = load %7
        %9:i32 = mul %8, 4i
        %10:bool = lt %6, %9
        if %10 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %11:i32 = load %i
        %12:i32 = let %11
        %13:i32 = load %r
        %14:ptr<uniform, i32, read> = access %x_7, 0u
        %15:i32 = load %14
        %16:i32 = call %tint_div_i32, %13, %15
        %18:i32 = access vec4<i32>(1i, 2i, 3i, 4i), %16
        %19:i32 = add %12, %18
        store %i, %19
        continue  # -> $B4
      }
      $B4: {  # continuing
        %20:i32 = load %r
        %21:i32 = add %20, 2i
        store %r, %21
        next_iteration  # -> $B3
      }
    }
    %22:i32 = load %i
    %23:bool = eq %22, 10i
    if %23 [t: $B7, f: $B8] {  # if_2
      $B7: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_2
      }
      $B8: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %25:void = call %main_1
    %26:vec4<f32> = load %x_GLF_color
    %27:main_out = construct %26
    ret %27
  }
}
%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B10: {
    %30:bool = eq %rhs, 0i
    %31:bool = eq %lhs, -2147483648i
    %32:bool = eq %rhs, -1i
    %33:bool = and %31, %32
    %34:bool = or %30, %33
    %35:i32 = select %rhs, 1i, %34
    %36:i32 = div %lhs, %35
    ret %36
  }
}

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