fix unsafe on evaluate of reduce_vars (#1870)
Determine if variables with non-constant values can escape and be modified. fixes #1865
This commit is contained in:
@@ -300,7 +300,7 @@ unsafe_evaluate_array: {
|
||||
}
|
||||
}
|
||||
|
||||
unsafe_evaluate_equality: {
|
||||
unsafe_evaluate_equality_1: {
|
||||
options = {
|
||||
evaluate : true,
|
||||
reduce_vars : true,
|
||||
@@ -308,47 +308,62 @@ unsafe_evaluate_equality: {
|
||||
unused : true
|
||||
}
|
||||
input: {
|
||||
function f0(){
|
||||
function f0() {
|
||||
var a = {};
|
||||
console.log(a === a);
|
||||
return a === a;
|
||||
}
|
||||
|
||||
function f1(){
|
||||
function f1() {
|
||||
var a = [];
|
||||
console.log(a === a);
|
||||
return a === a;
|
||||
}
|
||||
console.log(f0(), f1());
|
||||
}
|
||||
expect: {
|
||||
function f0() {
|
||||
return true;
|
||||
}
|
||||
function f1() {
|
||||
return true;
|
||||
}
|
||||
console.log(f0(), f1());
|
||||
}
|
||||
expect_stdout: true
|
||||
}
|
||||
|
||||
function f2(){
|
||||
unsafe_evaluate_equality_2: {
|
||||
options = {
|
||||
collapse_vars: true,
|
||||
evaluate : true,
|
||||
passes : 2,
|
||||
reduce_vars : true,
|
||||
unsafe : true,
|
||||
unused : true
|
||||
}
|
||||
input: {
|
||||
function f2() {
|
||||
var a = {a:1, b:2};
|
||||
var b = a;
|
||||
var c = a;
|
||||
console.log(b === c);
|
||||
return b === c;
|
||||
}
|
||||
|
||||
function f3(){
|
||||
function f3() {
|
||||
var a = [1, 2, 3];
|
||||
var b = a;
|
||||
var c = a;
|
||||
console.log(b === c);
|
||||
return b === c;
|
||||
}
|
||||
console.log(f2(), f3());
|
||||
}
|
||||
expect: {
|
||||
function f0(){
|
||||
console.log(true);
|
||||
function f2() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function f1(){
|
||||
console.log(true);
|
||||
}
|
||||
|
||||
function f2(){
|
||||
console.log(true);
|
||||
}
|
||||
|
||||
function f3(){
|
||||
console.log(true);
|
||||
function f3() {
|
||||
return true;
|
||||
}
|
||||
console.log(f2(), f3());
|
||||
}
|
||||
expect_stdout: true
|
||||
}
|
||||
|
||||
passes: {
|
||||
@@ -2078,3 +2093,32 @@ try_abort: {
|
||||
}
|
||||
expect_stdout: "1 undefined"
|
||||
}
|
||||
|
||||
issue_1865: {
|
||||
options = {
|
||||
evaluate: true,
|
||||
reduce_vars: true,
|
||||
unsafe: true,
|
||||
}
|
||||
input: {
|
||||
function f(a) {
|
||||
a.b = false;
|
||||
}
|
||||
console.log(function() {
|
||||
var some = { thing: true };
|
||||
f(some);
|
||||
return some.thing;
|
||||
}());
|
||||
}
|
||||
expect: {
|
||||
function f(a) {
|
||||
a.b = false;
|
||||
}
|
||||
console.log(function() {
|
||||
var some = { thing: true };
|
||||
f(some);
|
||||
return some.thing;
|
||||
}());
|
||||
}
|
||||
expect_stdout: true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user