Ignore:
Timestamp:
Mar 18, 2009, 12:24:39 AM (16 years ago)
Author:
[email protected]
Message:

<rdar://problem/6692138> REGRESSION (Safari 4): Incorrect function return value when using IE "try ... finally" memory leak work-around (24654)
<https://bugs.webkit.org/show_bug.cgi?id=24654>

Reviewed by Cameron Zwarich.

If the return value for a function is in a local register we need
to copy it before executing any finalisers, otherwise it is possible
for the finaliser to clobber the result.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/parser/Nodes.cpp

    r41342 r41806  
    20102010        dst = 0;
    20112011    RegisterID* r0 = m_value ? generator.emitNode(dst, m_value.get()) : generator.emitLoad(dst, jsUndefined());
     2012    RefPtr<RegisterID> returnRegister;
    20122013    if (generator.scopeDepth()) {
    20132014        RefPtr<Label> l0 = generator.newLabel();
     2015        if (generator.hasFinaliser() && !r0->isTemporary()) {
     2016            returnRegister = generator.emitMove(generator.newTemporary(), r0);
     2017            r0 = returnRegister.get();
     2018        }
    20142019        generator.emitJumpScopes(l0.get(), 0);
    20152020        generator.emitLabel(l0.get());
Note: See TracChangeset for help on using the changeset viewer.