blob: a71f570f901d72ed525e74bd45e9c7dfed80a50b [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
var profile, result;
var a = 0;
function toSafeInt(n) {
return Math.round(Math.round(n * 10) / 10);
}
function test0() {
for(var i = 0; i < 2; ++i) {
if(1) do {
return 0;
} while(1);
}
};
test0();
test0();
function test1() {
var d = 1;
var g = 1.1;
for(var i = 0; i < 2; ++i) {
d ^= g >= 0 ? g : 0;
for(var j = 0; j < 2; ++j)
d = g;
g & 255;
}
function test1a() { d; }
};
test1();
test1();
function test2() {
var obj0 = {};
var obj1 = {};
var func0 = function(p0, p1) {
this.method0 = func0;
}
obj0.method0 = func0;
var f = 1;
for(var __loopvar0 = 0; __loopvar0 < 3; ++__loopvar0) {
(function(p0, p1, p2, p3) {
"use strict";
obj1 = (new obj0.method0(1, 1, 1, 1, 1, 1));
})(1);
obj0 = obj1;
var litObj3 = { prop0: ((obj0.prop0++) - Math.pow((1383554054 + -22), (obj0.prop0 ^= 1))), prop1: obj0.prop1, prop2: 1, prop3: 1, prop4: 1, prop5: 1, prop6: (--f), prop7: 1.1, prop8: 1 };
}
};
test2();
test2();
var shouldBailout = false;
function test3() {
for(var i = 0; i < 3; ++i) {
if(- ~2147483647, 1, (this.prop0--), 1, 1, ((shouldBailout ? func2 = leaf : 1), 1));
}
};
test3();
test3();
function test4() {
var o = profile ? createFloat64Array() : [1.1];
var p = "0";
o[p] += o[p];
return o[p];
function createFloat64Array() {
var a = new Float64Array(1);
a[0] = 1.1;
return a;
}
}
profile = true;
test4();
profile = false;
result = test4();
new RegExp("test4").exec("test4"); // overwrite the stack to invalidate any numbers that were allocated on the stack
WScript.Echo("test4: " + result);
function test5() {
var obj0 = {};
var func1 = function(p0, p1, p2) {
}
obj0.method0 = func1;
var b = 1;
var e = 1730745725.1;
(function() {
var __loopvar1 = 0;
while(((e >>= 714649918.1)) && __loopvar1 < 3) {
__loopvar1++;
b /= obj0.method0(1, 1, -2071119430.9, 1);
e = 1949149674.1;
WScript.Echo("test5: good");
return 1;
}
var litObj3 = { prop0: 1, prop1: 4.1219102077814E+17, prop2: 1, prop3: 1, prop4: -8.45710040200392E+18, prop5: 1, prop6: 1, prop7: 1, prop8: 1 };
obj0.method0((this.prop0 * -3.51338110666416E+18), obj0.prop1);
if(-634731549.9) {
if((obj0.prop1 <= 1)) {
var __loopvar6 = 0;
while(((Function("") instanceof Boolean)) && __loopvar6 < 3) {
__loopvar6++;
obj0.prop0 = (1, obj1.prop1, obj1.prop1);
a = obj1;
let a;
}
}
else {
e = -1152902162.9;
}
}
else {
WScript.Echo("obj0.prop1 = " + (obj0.prop1 | 0));
}
WScript.Echo("obj1.prop1 = " + (obj1.prop1 | 0));
})();
};
test5();
test5();
function test6() {
var a = 1;
var b = 8.58155630194204E+18;
var i = 0;
do {
for(var j = 0; j < 2; ++j) {
b /= 1;
a = 1 % a;
}
} while(++i < 2);
};
test6();
test6();
// - Profile data says that 'd' is likely float
// - Due to 'd = 1', we have a tagged int for 'd'
// - In the loop prepass, the source value should not be changed because the value is not precise as we're still in the prepass
function test7() {
var a, d;
var o = {};
for(var i = 0; d = a * 1 && i < 2; ++i);
for(var i = 0; i < 2 && o.p < 1; i++ + o.p++) {
d = 1;
for(var j = 0; j < 2; ++j)
d %= 1;
a = 1;
}
return d;
function test11a() { d; }
};
test7();
test7();
// - 'b' is a slot variable and is treated as a field
// - At 'b = i', the value of 'i' gets transferred to 'b'
// - At 'c = c && b', in the block that handles 'c = b', it is copy-propped as 'c = i'
// - Even though 'i' is invariant with respect to the inner loop, if 'c = i' is hoisted out of the inner loop as 'c2 = i' and
// inside the loop, 'c = c2', then 'c2' should not be made the sym store of the value of 'i' because after the merge caused by
// '&&', 'c2' won't be live anymore (since we don't hoist 'c2' into every preceding block, and only to the landing pad)
// - At the final 'c = b', assuming the above problem manifests, the value of 'b' will have a sym store 'c2', which is not live
// anymore. So, the value's sym store is set to 'b', giving ownership of the value to 'b'. This is less than ideal because 'i'
// actually owns the value.
// - At this point, because 'b' now owns the value, and profile data says it is likely float (because of the first assignment to
// 'b'), we go ahead and change the value type to likely float. Since 'b' doesn't actually own the value, that effectively
// changes the value type of 'i' to likely float as well.
function test8(a) {
var b = -2147483648 % 1;
var c = 0;
if(a) {
for(var i = 0; i < 2; i++) {
for(var j = 0; j < 2; ++j) {
b = i;
c = c && b;
c = b;
}
}
}
return b;
function test0a() { b; }
};
test8();
test8();
function test9() {
var d = 1;
var __loopvar0 = 0;
do {
__loopvar0++;
d = (-2 / ((--d) == 0 ? 1 : (--d)));
} while((1) && __loopvar0 < 3)
return d | 0;
};
WScript.Echo("test9: " + test9());
WScript.Echo("test9: " + test9());
// Implicit calls should be disabled at the load of 'a.p' with flow-based array check hoisting
function test10(a, b) {
var sum = a[0];
sum += a.p;
var a2 = a;
a = b;
a2[0] = ++b;
sum += a2[0];
sum += a + b;
return sum;
}
var test10_a = [1];
test10_a.p = 2;
WScript.Echo("test10: " + test10(test10_a, 3));
Object.defineProperty(
test10_a,
"p",
{
configurable: true,
enumerable: true,
get: function() {
Object.defineProperty(
test10_a,
"0",
{
configurable: true,
enumerable: true,
get: function() { return 5; },
set: function() { }
});
return 2;
}
});
WScript.Echo("test10: " + test10(test10_a, 3));
function test11() {
var obj0 = {};
var a = 1;
var l = 1;
a = (-2061493789 << 1);
l = a;
obj0.prop0 = a;
a = ((~1) * (-obj0.prop0));
a ^= obj0.prop0;
return l | 0;
};
test11();
test11();
function test12() {
var c = 1;
var f = 1;
a = 21414358.1;
while(f < 1)
c();
while(a %= 1) {
c = Math.abs(c) % 4;
c = "substring" + c + "bug";
c = c.substring(3, 11);
switch(c) {
case "string0b":
break;
case "string1b":
break;
case "string2b":
break;
case "string3b":
break;
};
a = 1;
}
};
test12();
test12();
function test13(a, rid, q) {
for(var i = 0; i < q.length; i++) {
if(q[i][0] == rid) {
for(var j = 1; j < q[i].length; j++) {
if(q[i][j] == a) {
if(q[i].length == 2) {
q.splice(i, 1);
}
else {
q[i].splice(j, 1);
}
return;
}
}
}
}
}
(function test13Runner() {
var q = [];
for(var i = 0; i < 4; ++i)
q.push([0, 1, 2, 3]);
test13(1, 0, q);
test13(1, 0, q);
})();
function test14(a, i, o) {
a[i] = 1;
o.p;
return a[i];
}
(function test14Runner() {
var a = [1];
var o = {};
WScript.Echo("test14: " + test14(a, 0, o));
Object.defineProperty(
o,
"p",
{
configurable: true,
enumerable: true,
get: function() {
Object.defineProperty(
a,
"0",
{
configurable: true,
enumerable: true,
get: function() {
return 2;
}
});
}
});
WScript.Echo("test14: " + test14(a, 0, o));
})();
function test15(a, o) {
a[0] = 1;
o.p;
return a[0];
}
(function test15Runner() {
var a = [1];
var o = {};
WScript.Echo("test15: " + test15(a, o));
Object.defineProperty(
o,
"p",
{
configurable: true,
enumerable: true,
get: function() {
Object.defineProperty(
a,
"0",
{
configurable: true,
enumerable: true,
get: function() {
return 2;
}
});
}
});
WScript.Echo("test15: " + test15(a, o));
})();
(function test16Runner() {
var obj0;
function test16() {
var obj1 = {};
var arrObj0 = {};
var func1 = function(argStr0, argObj1, argMath2) {
eval("'use strict';");
}
var ui8 = new Uint8Array(256);
var __loopvar0 = 0;
do {
__loopvar0++;
var __loopvar1 = 0;
while((1) && __loopvar1 < 3) {
__loopvar1++;
}
obj0 = obj1;
} while((1) && __loopvar0 < 3)
if((arrObj0.length ? 1 : obj1.prop0)) {
}
11
};
test16();
test16();
})();
function test17() {
var x = 0;
(function() {
(function foo(y) { y >> null; })(x);
})();
};
test17();
test17();
function test18(o) {
function test18a(a, o) {
var b = a + 1;
var c = a + (o | 0);
return b ^ c;
}
WScript.Echo("test18: " + test18a(0x7fffffff, o));
}
test18(1);
test18(
{
valueOf: function() {
WScript.Echo("test18: valueOf");
return 2;
}
});
function test20() {
var a = new Array(10);
var o = {};
o.p = ~-2147483648;
a[0] = o.p;
return a[0];
};
test20();
test20();
(function test21Runner() {
function test21(o) {
var a = 0.1;
var b = 1.1;
var c = 2.1;
a += 0.1;
c += 0.1;
var d = 0;
for(var i = 0; i < 4; ++i) {
d = a + 0.1;
b += 0.1;
a = b;
b = c;
c = o;
if(!o)
b = 6.1;
}
return d;
}
var o = { valueOf: function() { return 9.1; } };
WScript.Echo("test21: " + toSafeInt(test21(o)));
WScript.Echo("test21: " + toSafeInt(test21(o)));
})();
function test22() {
var a = 1.5;
var b = 1;
for(var i = 0; i < 2; ++i) {
a = b;
b = true;
}
WScript.Echo("test22: " + (a | 0));
};
test22();
test22();
(function test23Runner() {
function test23(o) {
var sum = 0;
var a = o.a;
sum += a[0];
sum += o.b[0];
for(var i = 1; i < 2; ++i)
a[i] = 1.1;
sum += a[1];
sum += o.b[1];
return sum;
}
var o = {
a: [1],
b: [2, 3]
};
WScript.Echo("test23: " + test23(o));
o.a = [1];
o.b = o.a;
WScript.Echo("test23: " + test23(o));
})();
(function test24Runner() {
function test24(a, profile) {
var sum = 0;
var o = {};
o.a = a;
for(var i = 0; i < 2; ++i) {
if(profile)
o.a[1] = null;
else
sum += o.a[0];
}
return sum;
}
var a = [1.1, 2.2];
WScript.Echo("test24: " + test24(a, true));
WScript.Echo("test24: " + test24(a, false));
})();
(function test25Runner() {
function test25(a, b) {
var sum = 0;
sum += a[0];
b[3] = 0;
sum += a[2];
return sum;
}
var a = [1, 2, 3];
var b = {};
WScript.Echo("test25: " + test25(a, b));
a = [1];
b = a;
WScript.Echo("test25: " + test25(a, b));
})();
(function test26Runner() {
function test26(a, b) {
var c = a[0];
b[0] = "x";
WScript.Echo("test26: " + a[0]);
};
var a = [1];
test26(a, {});
test26(a, a);
})();
(function test27Runner() {
function test27(o) {
if(o) {
o.p;
return 1;
o.p === o.p;
}
Math.log(1);
}
var o = { get p() { return 0; } };
test27(o);
test27(0);
})();
(function test28Runner() {
function test28(a, profile) {
var sum = 0;
var o = {};
o.a = a;
for(var i = 0; i < 2; ++i) {
for(var j = 0; j < 2; ++j) {
if(profile)
o.a[1] = null;
else
sum += o.a[0];
}
for(var j = 0; j < 2; ++j) {
if(profile)
o.a[1] = null;
else
sum += o.a[0];
}
}
return sum;
}
var a = [1.1, 2.2];
WScript.Echo("test28: " + Math.round(test28(a, true) * 10) / 10);
WScript.Echo("test28: " + Math.round(test28(a, false) * 10) / 10);
})();
function test29() {
var a0 = [];
var a1 = [];
for(var i = 0; i < 2; ++i) {
a0.push(0);
test29a(a1);
}
function test29a(a) {
a[2] = 1.1;
a[1];
}
};
test29();
test29();
(function test30Runner() {
function test30(a) {
a[0];
for(var i = 0; i < 2; ++i) {
if(i === 0)
a[2] = 0;
else
a.push(0);
}
};
var a = [0];
test30(a);
test30(a);
})();
(function test31Runner() {
function test31(a) {
a[0];
for(var i = 0; i < 2; ++i) {
if(i === 0)
a[2] = 0;
else
a.push(0);
}
};
var a = [null];
test31(a);
test31(a);
})();
function test32(b, d) {
var c = 1;
do {
var a = c;
c = -b;
++b;
} while(d);
return a;
};
WScript.Echo("test32: " + test32(0, 0));
WScript.Echo("test32: " + test32(0, 0));
function test33(a) {
return test33a(a);
function test33a(a) {
return a << this;
}
};
test33(3);
test33({});
function test34() {
var a = [0];
var b = a;
a = a.pop();
b.push(b[0]);
a = b;
for(var i = 0; i < 1; ++i) {
if(!b) {
b = 1;
break;
}
a[0];
}
};
test34();
test34();
function test35() {
for(var i = 0; i < 1; ++i)
var VarArr0 = [null];
for(var i = 0; i < 1; ++i)
VarArr0[2] = 0;
}
test35();
test35();
function test36() {
return Math.abs(-2147483648) & 1;
}
test36();
test36();
function test37() {
var k = ~(2147483648 + (1.1 & 1));
k -= ((2147483647 - (2147483648 + (1.1 & 1))) * -1073741824);
k |= 0;
return k;
}
WScript.Echo("test37: " + test37());
WScript.Echo("test37: " + test37());
(function test38Runner() {
var x;
function test38() {
var z1;
var u3056;
(function() {
with(u3056 += [z1]) x;
})();
(function() {
for(qmsdtp = 0; qmsdtp < 16 && undefined && (y %= null) ; ++qmsdtp) {
if(qmsdtp % 7 == 5) {
} else {
with(1 ^ (/x/g.prototype.prototype)) { }
}
};;
})();
};
test38();
test38();
})();
(function test39Runner() {
var shouldBailout = false;
function test39() {
var IntArr1 = [152];
var FloatArr0 = [-870672233.9];
var VarArr0 = [];
var a = 1377203759;
var h = -760994394;
this.prop1 = -7.90411814882572E+18;
var __loopvar1 = 0;
do {
__loopvar1++;
} while(((IntArr1[(((((shouldBailout ? (IntArr1[(((VarArr0[(1)]) >= 0 ? (VarArr0[(1)]) : 0) & 0xF)] = 'x') : undefined), VarArr0[(1)]) >= 0 ? VarArr0[(1)] : 0)) & 0XF)] ? (FloatArr0[(((((shouldBailout ? (FloatArr0[((((this.prop1 /= h)) >= 0 ? ((this.prop1 /= h)) : 0) & 0xF)] = 'x') : undefined), (this.prop1 /= h)) >= 0 ? (this.prop1 /= h) : 0)) & 0XF)] - FloatArr0[(((((shouldBailout ? (FloatArr0[((((a++)) >= 0 ? ((a++)) : 0) & 0xF)] = 'x') : undefined), (a++)) >= 0 ? (a++) : 0)) & 0XF)]) : 1)) && __loopvar1 < 3)
11
};
test39();
shouldBailout = true;
test39();
})();
function test40() {
var p;
for(var i = 0; i < 1; i++) {
do {
p = 1 ^ -2147483649;
if(1 !== p)
p -= 2147483647;
else
break;
} while(false);
}
return p;
}
WScript.Echo("test40: " + test40());
WScript.Echo("test40: " + test40());
function test41() {
for(var i = 124.90088411141187; i < 3; i++) {
var a = [_test41_nonexistentRootVar];
for(var j = 264.3966821487993; j < 4; ++j) {
var a = [_test41_nonexistentRootVar];
_test41_nonexistentRootVar = a[2];
}
}
}
test41();
test41();
function test42() {
var a = [];
a[1] = -3;
a[2147483648] = -3;
a[a.length] = -2;
function test42a() {
return a[2147483646];
}
while(test42a()) {
}
a.pop();
while(a.pop());
"" + [].slice();
}
test42();
test42();
test42();
test42();
function test43() {
var a = new Int8Array();
do {
{ };
Array(a).shift()[0];
} while(false);
}
test43();
test43();
function test44() {
var obj1 = {};
var test44a = function() {
return protoObj1 < obj1 || 1 != 1;
};
var protoObj1 = Object(obj1);
obj1.prop0 = 1;
for(var i = 0; test44a() && i < 1; ++i);
}
test44();
test44();
function test45() {
var arrObj0;
var protoObj0 = {};
protoObj0.prop0 = 1;
var v15 = Array();
protoObj0.prop0;
if(v15 instanceof Date) {
v15[protoObj0.prop0 && arrObj0.length];
}
}
test45();
test45();
function test46() {
var protoObj0 = Object();
protoObj0.length = 100;
1 >> -964252921 + protoObj0.length - ~1;
}
test46();
test46();
function test47() {
var a = 0, sum = 0;
for(var i = 0; i < 2; ++i) {
sum -= a;
a = {};
}
return sum;
}
test47();
test47();
(function test48Runner() {
var ctxt = {
getStackVar: function() { try { } catch(ex) { } }
};
function test48(oargs, sttop2) {
for(var asis_from = oargs.length - 1; asis_from >= 0; asis_from--) {
if(oargs[asis_from].containsFunctionCall()) {
break;
}
}
asis_from++;
var args = [];
for(var i = 0; i < asis_from; i++) {
args[i] = ctxt.getStackVar(sttop2 + i);
}
for(; i < oargs.length; i++) {
args[i] = oargs[i];
}
}
var args = [];
test48(args, 0);
test48(args, 0);
})();
function test49() {
var obj0 = {};
var arrObj0 = {};
obj0.method1 = function() {
while(arrObj0[{} + 0] || (arguments[{}] = 'x', arrObj0[{} + 0])) {
}
};
arrObj0.method0 = obj0.method1;
arrObj0[0] = -238193011.9;
arrObj0.method0();
"" + [];
}
test49();
test49();
function test50(a) {
var index = -6;
for(var i = 0; i < 1; ++i) {
var index2 = index;
index = index2;
a[index];
}
}
test50([]);
test50([]);
function test51(v1, n) {
var v2 = 0;
var v3 = -6;
for(var i = 0; i < n; ++i) {
v2 = v3;
v1[v3];
v3 = v2;
}
}
test51([null], 0);
test51([null], 1);
(function test52Runner() {
function test52(a) {
var sum = 0;
var j = 1;
for(var i = 0; i < 12; ++i) {
if(j == 11)
j = 0;
else
++j;
sum += a[j];
}
return sum;
}
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
test52(a);
test52(a);
})();
(function test53Runner() {
function test53(a, j) {
var sum = 0;
for(var i = 0; i < 12; ++i) {
if(j == 11)
j = 0;
else
++j;
sum += a[j];
}
return sum;
}
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
test53(a, 1);
test53(a, 1);
})();
function test54() {
var a = 1420236100;
for(var i = 0; a += 27, i < 1; ++i) {
}
}
test54();
test54();
function test55(a, b) {
b >>= 0;
return a >>> b--;
}
WScript.Echo("test55: " + test55(-1, 0));
WScript.Echo("test55: " + test55(-1, 0));
function test56() {
if('a' ? null : undefined) {
if(this)
test56a();
}
function test56a() { }
}
test56();
test56();
function test57(a) {
var b = (a + 1) | 0;
var c = a + 1;
return c - b;
}
WScript.Echo("test57: " + test57(0x7fffffff));
WScript.Echo("test57: " + test57(0x7fffffff));
function test58(a) {
return 1 / (a * -1 && test58a());
function test58a() {
try { } catch(ex) { }
return 1;
}
}
WScript.Echo("test58: " + test58(0));
WScript.Echo("test58: " + test58(0));
function test59() {
var f64 = new Float64Array(256);
if(!f64.length) {
while(f64[120]) {
}
}
}
test59();
test59();
function test60(a) {
var sum = 0;
var j = 2;
for(var i = 0; i < 2; ++i) {
j -= j;
sum += a[j];
}
return sum;
}
test60([1]);
test60([1]);
function test61(arr, a) {
var v7 = 0;
var v8 = 0;
do {
v8 = v7;
v7 = arr[0];
if(v8) {
break;
}
++a;
} while(!test61);
return a;
}
WScript.Echo("test61: " + test61([], 0));
WScript.Echo("test61: " + test61([], 0));
(function test62Runner() {
var boo = false;
function test62() {
var n = boo ? 1 : 2;
var a = [1, 1];
var i = n - 2, j = i, k = i;
var sum = 0;
while(sum += a[j]) {
++i;
if(i >= n)
break;
sum += a[k];
++j;
++k;
}
}
test62();
test62();
})();
function test63(a, b) {
a |= 0;
b |= 0;
if(a >= b) {
if(a + 1 === 0x3fffffff + 1)
return a + 1;
}
return 0;
}
test63();
test63();
function test64(a) {
a |= 0;
if(a < 0)
a = 0;
return a + 0x7fffffff;
}
test64(0);
test64(0);
(function test65Runner() {
function test65(o, s) {
var a = o[s];
o.a = a;
var b;
var sum = 0;
for(var i = 0; i < 2; ++i) {
sum += a.p;
b = o.a;
sum += a[i];
}
return sum + (b ? 1 : 0);
}
var o = { a: [1, 2] };
o.a.p = 3;
test65(o, "a");
test65(o, "a");
})();
function test66() {
var a = test66a(0);
var b = test66a();
return a + b;
function test66a() {
return test66a.arguments.length;
}
}
WScript.Echo("test66: " + test66());
WScript.Echo("test66: " + test66());