1ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org// Copyright 2011 the V8 project authors. All rights reserved.
243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Redistribution and use in source and binary forms, with or without
343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// modification, are permitted provided that the following conditions are
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// met:
543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//
643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     * Redistributions of source code must retain the above copyright
743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       notice, this list of conditions and the following disclaimer.
843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     * Redistributions in binary form must reproduce the above
943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       copyright notice, this list of conditions and the following
1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       disclaimer in the documentation and/or other materials provided
1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       with the distribution.
1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     * Neither the name of Google Inc. nor the names of its
1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       contributors may be used to endorse or promote products derived
1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       from this software without specific prior written permission.
1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//
1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
28ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgfunction g(y) { assertEquals(y, 12); }
29ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
30ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgvar X = 0;
31ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
32ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgfunction foo () {
33ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org  var cnt = 0;
34ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org  var l = -1;
35ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org  var x = 0;
36ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org  while (1) switch (l) {
37ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org      case -1:
38ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        var y = x + 12;
39ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        l = 0;
40ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        break;
41ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org      case 0:
42ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        // Loop for to hit OSR.
43ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        if (cnt++ < 10000000) {
44ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org          l = 0;
45ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org          break;
46ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        } else {
47ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org          l = 1;
48ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org          break;
49ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        }
50ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org      case 1:
51ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        // This case will contain deoptimization
52ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        // because it has no type feedback.
53ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        g(y);
54ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        return;
55ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    };
56ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org}
57ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
58ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgfoo();
59