18a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
28a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// Redistribution and use in source and binary forms, with or without
38a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// modification, are permitted provided that the following conditions are
48a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// met:
58a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org//
68a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org//     * Redistributions of source code must retain the above copyright
78a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org//       notice, this list of conditions and the following disclaimer.
88a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org//     * Redistributions in binary form must reproduce the above
98a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org//       copyright notice, this list of conditions and the following
108a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org//       disclaimer in the documentation and/or other materials provided
118a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org//       with the distribution.
128a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org//     * Neither the name of Google Inc. nor the names of its
138a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org//       contributors may be used to endorse or promote products derived
148a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org//       from this software without specific prior written permission.
158a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org//
168a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
178a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
188a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
198a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
208a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
218a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
228a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
238a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
248a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
258a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
268a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
278a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org
288a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org// Flags: --allow-natives-syntax
298a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org
308a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.orgfunction f(i, b) {
318a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org  var a = 0;
328a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org  if (b) {
338a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org    var c = 1 << i;
348a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org    a = c + c;
358a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org  }
368a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org  var x = a >> 3;
378a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org  return a;
388a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org}
398a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org
408a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.orgf(1, false);
418a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.orgf(1, true);
428a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org%OptimizeFunctionOnNextCall(f);
438a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.orgassertEquals((1 << 30) * 2, f(30, true));
448a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org
458a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org
468a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.orgvar global = 1;
478a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org
488a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.orgfunction f2(b) {
498a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org  var a = 0;
508a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org  if (b) {
518a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org    a = global;
528a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org  }
538a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org  var x = a >> 3;
548a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org  return a;
558a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org}
568a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org
578a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.orgf2(false);
588a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.orgf2(true);
598a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org%OptimizeFunctionOnNextCall(f2);
608a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.orgglobal = 2.5;
618a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.orgassertEquals(global, f2(true));
62