js/src/jit-test/tests/ion/getelem-bounds-hoist.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 var a = [1,2,3,4,5];
     3 // Basic overflow in hoisted condition.
     4 function foo(x, n) {
     5   var v = 0;
     6   for (var i = 0; i < n; i++)
     7     v += x[i];
     8   return v;
     9 }
    10 for (var i = 0; i < 15; i++)
    11   assertEq(foo(a, 5), 15);
    12 assertEq(foo(a, 6), NaN);
    14 // Basic underflow in hoisted condition.
    15 function foo2(x, m, n) {
    16   var v = 0;
    17   for (var i = m; i < n; i++)
    18     v += x[i];
    19   return v;
    20 }
    21 for (var i = 0; i < 15; i++)
    22   assertEq(foo2(a, 0, 5), 15);
    23 assertEq(foo2(a, -1, 5), NaN);
    25 // Overflow when hoisting consolidated condition.
    26 function foo3(x, m, n) {
    27   var v = 0;
    28   for (var i = m; i < n; i++)
    29     v += x[i] + x[i + 1] + x[i + 2];
    30   return v;
    31 }
    32 for (var i = 0; i < 15; i++)
    33   assertEq(foo3(a, 0, 3), 27);
    34 assertEq(foo3(a, 0, 4), NaN);
    36 // Underflow when hoisting consolidated condition.
    37 function foo4(x, m, n) {
    38   var v = 0;
    39   for (var i = m; i < n; i++)
    40     v += x[i] + x[i - 1] + x[i - 2];
    41   return v;
    42 }
    43 for (var i = 0; i < 15; i++)
    44   assertEq(foo4(a, 2, 5), 27);
    45 assertEq(foo4(a, 0, 5), NaN);
    47 // Underflow due to decreasing index.
    48 function foo5(x, n) {
    49   var v = 0;
    50   for (var i = 0; i < n; i++) {
    51     v += x[i];
    52     if (n == 4)
    53       i -= 2;
    54     if (i == -5)
    55       break;
    56   }
    57   return v;
    58 }
    59 for (var i = 0; i < 15; i++)
    60   assertEq(foo5(a, 5), 15);
    61 assertEq(foo5(a, 4), NaN);
    63 // Overflow after access at constant offset.
    64 function foo6(x, m, n) {
    65   var v = 0;
    66   for (var i = m; i < n; i++)
    67     v += x[i + 10];
    68   return v;
    69 }
    70 for (var i = 0; i < 15; i++)
    71   assertEq(foo6(a, -10, -5), 15);
    72 assertEq(foo6(a, -10, -4), NaN);
    74 // Underflow after access at constant offset.
    75 function foo7(x, m, n) {
    76   var v = 0;
    77   for (var i = m; i < n; i++)
    78     v += x[i + 10];
    79   return v;
    80 }
    81 for (var i = 0; i < 15; i++)
    82   assertEq(foo7(a, -10, -5), 15);
    83 assertEq(foo7(a, -11, -5), NaN);

mercurial