function foo()
{
    return arguments.length;
}

function bar(...args)
{
    var a = [42];
    if (isFinalTier())
        a = args;
    return {ftl: isFinalTier(), result: foo(...a)};
}

function baz()
{
    return bar(1, 2, 3, 4);
}

noInline(baz);

for (var i = 0; i < 100000; ++i) {
    var result = baz();
    if (result.ftl) {
        if (result.result != 4)
            throw "Error: bad result in loop in DFG: " + result.result;
    } else {
        if (result.result != 1)
            throw "Error: bad result in loop before DFG: " + result.result;
    }
}
