// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// VMOptions=--optimization-counter-threshold=10 --no-background-compilation

// @dart = 2.9

import "package:expect/expect.dart";

constants() {
  Expect.equals(0, 499 >> 33);
  Expect.equals(0, (499 << 33) & 0xFFFFFFFF);
  Expect.equals(0, (499 << 32) >> 65);
  Expect.equals(0, (499 << 32) << 65);
}

foo(i) {
  if (i != 0) {
    y--;
    foo(i - 1);
    y++;
  }
}

var y;

// id returns [x] in a way that should be difficult to predict statically.
id(x) {
  y = x;
  foo(10);
  return y;
}

interceptors() {
  Expect.equals(0, id(499) >> 33);
  Expect.equals(0, (id(499) << 33) & 0xFFFFFFFF);
  Expect.equals(0, id(499 << 32) >> 65);
  Expect.equals(0, id(499 << 32) << 65);
}

speculative() {
  var a = id(499);
  var b = id(499 << 32);
  for (int i = 0; i < 1; i++) {
    Expect.equals(0, a >> 33);
    Expect.equals(0, (a << 33) & 0xFFFFFFFF);
    Expect.equals(0, b >> 65);
    Expect.equals(0, b << 65);
  }
}

// JavaScript shifts by the amount modulo 32. That is x << y is equivalent to
// x << (y & 0x1F). Dart does not.
main() {
  for (var i = 0; i < 10; ++i) {
    constants();
    interceptors();
    speculative();
  }
}
