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
        %x_35:i32 = let %6
        %8:ptr<uniform, i32, read> = access %x_7, 0u
        %9:i32 = load %8
        %x_37:i32 = let %9
        %11:i32 = mul %x_37, 4i
        %12:bool = lt %x_35, %11
        if %12 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %13:i32 = load %r
        %x_41:i32 = let %13
        %15:ptr<uniform, i32, read> = access %x_7, 0u
        %16:i32 = load %15
        %x_43:i32 = let %16
        %18:i32 = load %i
        %x_46:i32 = let %18
        %20:i32 = call %tint_div_i32, %x_41, %x_43
        %22:i32 = access vec4<i32>(1i, 2i, 3i, 4i), %20
        %23:i32 = add %x_46, %22
        store %i, %23
        continue  # -> $B4
      }
      $B4: {  # continuing
        %24:i32 = load %r
        %x_48:i32 = let %24
        %26:i32 = add %x_48, 2i
        store %r, %26
        next_iteration  # -> $B3
      }
    }
    %27:i32 = load %i
    %x_50:i32 = let %27
    %29:bool = eq %x_50, 10i
    if %29 [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: {
    %31:void = call %main_1
    %32:vec4<f32> = load %x_GLF_color
    %33:main_out = construct %32
    ret %33
  }
}
%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B10: {
    %36:bool = eq %rhs, 0i
    %37:bool = eq %lhs, -2147483648i
    %38:bool = eq %rhs, -1i
    %39:bool = and %37, %38
    %40:bool = or %36, %39
    %41:i32 = select %rhs, 1i, %40
    %42:i32 = div %lhs, %41
    ret %42
  }
}

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