Changeset 262064 in webkit


Ignore:
Timestamp:
May 22, 2020 11:01:21 AM (4 years ago)
Author:
keith_miller@apple.com
Message:

Checkpoint inlined call return handler needs an exception check when dispatching
https://bugs.webkit.org/show_bug.cgi?id=212104

Reviewed by Yusuke Suzuki.

JSTests:

  • stress/for-of-done-getter-osr-exits-inlined-to-value-getter-with-exception.js: Added.

(let.d.get done):
(let.d.get value):
(foo):
(catch):

Source/JavaScriptCore:

  • llint/LLIntSlowPaths.cpp:

(JSC::LLInt::dispatchToNextInstruction):
(JSC::LLInt::slow_path_checkpoint_osr_exit_from_inlined_call):
(JSC::LLInt::slow_path_checkpoint_osr_exit):

Location:
trunk
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/JSTests/ChangeLog

    r262017 r262064  
     12020-05-22  Keith Miller  <keith_miller@apple.com>
     2
     3        Checkpoint inlined call return handler needs an exception check when dispatching
     4        https://bugs.webkit.org/show_bug.cgi?id=212104
     5
     6        Reviewed by Yusuke Suzuki.
     7
     8        * stress/for-of-done-getter-osr-exits-inlined-to-value-getter-with-exception.js: Added.
     9        (let.d.get done):
     10        (let.d.get value):
     11        (foo):
     12        (catch):
     13
    1142020-05-21  Alexey Shvayka  <shvaikalesh@gmail.com>
    215
  • trunk/Source/JavaScriptCore/ChangeLog

    r262054 r262064  
     12020-05-22  Keith Miller  <keith_miller@apple.com>
     2
     3        Checkpoint inlined call return handler needs an exception check when dispatching
     4        https://bugs.webkit.org/show_bug.cgi?id=212104
     5
     6        Reviewed by Yusuke Suzuki.
     7
     8        * llint/LLIntSlowPaths.cpp:
     9        (JSC::LLInt::dispatchToNextInstruction):
     10        (JSC::LLInt::slow_path_checkpoint_osr_exit_from_inlined_call):
     11        (JSC::LLInt::slow_path_checkpoint_osr_exit):
     12
    1132020-05-22  Paulo Matos  <pmatos@igalia.com>
    214
  • trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp

    r261755 r262064  
    20872087}
    20882088
    2089 inline SlowPathReturnType dispatchToNextInstruction(CodeBlock* codeBlock, InstructionStream::Ref pc)
    2090 {
    2091     RELEASE_ASSERT(!codeBlock->vm().exceptionForInspection());
     2089inline SlowPathReturnType dispatchToNextInstruction(ThrowScope& scope, CodeBlock* codeBlock, InstructionStream::Ref pc)
     2090{
     2091    if (scope.exception())
     2092        return encodeResult(returnToThrow(scope.vm()), nullptr);
     2093
    20922094    if (Options::forceOSRExitToLLInt() || codeBlock->jitType() == JITType::InterpreterThunk) {
    20932095        const Instruction* nextPC = pc.next().ptr();
     
    21112113    VM& vm = codeBlock->vm();
    21122114    SlowPathFrameTracer tracer(vm, callFrame);
     2115    auto scope = DECLARE_THROW_SCOPE(vm);
    21132116
    21142117    std::unique_ptr<CheckpointOSRExitSideState> sideState = vm.findCheckpointOSRSideState(callFrame);
     
    21512154    }
    21522155
    2153     return dispatchToNextInstruction(codeBlock, pc);
     2156    return dispatchToNextInstruction(scope, codeBlock, pc);
    21542157}
    21552158
     
    21952198        break;
    21962199    }
    2197     if (UNLIKELY(scope.exception()))
    2198         return encodeResult(returnToThrow(vm), nullptr);
    2199 
    2200     return dispatchToNextInstruction(codeBlock, pc);
     2200
     2201    return dispatchToNextInstruction(scope, codeBlock, pc);
    22012202}
    22022203
Note: See TracChangeset for help on using the changeset viewer.