1// Copyright 2014 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Flags: --allow-natives-syntax
6
7// -----------------------------------------------------------------------------
8
9function SmiTaggingCanOverflow(x) {
10 x = x | 0;
11 if (x == 0) return;
12 return x;
13}
14
15SmiTaggingCanOverflow(2147483647);
16SmiTaggingCanOverflow(2147483647);
17%OptimizeFunctionOnNextCall(SmiTaggingCanOverflow);
18assertEquals(2147483647, SmiTaggingCanOverflow(2147483647));
19
20// -----------------------------------------------------------------------------
21
22function ModILeftCanBeNegative() {
23  var x = 0;
24  for (var i = -1; i < 0; ++i) x = i % 2;
25  return x;
26}
27
28ModILeftCanBeNegative();
29%OptimizeFunctionOnNextCall(ModILeftCanBeNegative);
30assertEquals(-1, ModILeftCanBeNegative());
31
32// -----------------------------------------------------------------------------
33
34function ModIRightCanBeZero() {
35  var x = 0;
36  for (var i = -1; i <= 0; ++i) x = (2 % i) | 0;
37  return x;
38}
39
40ModIRightCanBeZero();
41%OptimizeFunctionOnNextCall(ModIRightCanBeZero);
42ModIRightCanBeZero();
43