constant-folding-osr-exit.js   [plain text]


var foo = [
    function(o) {
        var x = true;
        o.f.f;
        if (x)
            return;
        throw new Error();
    },
    function(o) {
        var x = true;
        o.f.f;
        if (!x)
            throw new Error();
        return;
    },
    function(o) {
        var x = 0;
        var y = 1;
        o.f.f;
        if (x < y)
            return;
        throw new Error();
    },
    function(o) {
        var x = 1;
        var y = 0;
        o.f.f;
        if (x > y)
            return;
        throw new Error();
    },
    function(o) {
        var x = 0;
        var y = 1;
        o.f.f;
        if (x <= y)
            return;
        throw new Error();
    },
    function(o) {
        var x = 1;
        var y = 0;
        o.f.f;
        if (x >= y)
            return;
        throw new Error();
    },
    function(o) {
        var x = 0;
        var y = 1;
        o.f.f;
        if (x >= y)
            throw new Error();
        return;
    },
    function(o) {
        var x = 1;
        var y = 0;
        o.f.f;
        if (x <= y)
            throw new Error();
        return;
    },
    function(o) {
        var x = 0;
        var y = 1;
        o.f.f;
        if (x > y)
            throw new Error();
        return;
    },
    function(o) {
        var x = 1;
        var y = 0;
        o.f.f;
        if (x < y)
            throw new Error();
        return;
    },
    function(o) {
        var x = 42;
        o.f.f;
        if (x == 42)
            return;
        throw new Error();
    },
    function(o) {
        var x = 42;
        o.f.f;
        if (x != 42)
            throw new Error();
        return;
    },
    function(o) {
        var x = 42;
        o.f.f;
        if (x === 42)
            return;
        throw new Error();
    },
    function(o) {
        var x = 42;
        o.f.f;
        if (x !== 42)
            throw new Error();
        return;
    },
];
for (var i = 0; i < foo.length; ++i)
    noInline(foo[i]);

function test(o) {
    var failed = [];
    for (var i = 0; i < foo.length; ++i) {
        try {
            foo[i](o);
        } catch (e) {
            failed.push("Failed " + foo[i] + " with " + e);
        }
    }
    if (failed.length)
        throw failed;
}

var object = {f:{f:42}};

for (var i = 0; i < 10000; ++i) {
    test(object);
}

test({f:{g:43}});