| Index: src/compiler/instruction-selector.cc
|
| diff --git a/src/compiler/instruction-selector.cc b/src/compiler/instruction-selector.cc
|
| index 053c64605ba294377d4481687008074202a8f5d6..e52c831ca1dd94b99eb79191ac828b026e013c57 100644
|
| --- a/src/compiler/instruction-selector.cc
|
| +++ b/src/compiler/instruction-selector.cc
|
| @@ -578,13 +578,29 @@ void InstructionSelector::InitializeCallBuffer(Node* call, CallBuffer* buffer,
|
| size_t frame_state_entries = 0;
|
| USE(frame_state_entries); // frame_state_entries is only used for debug.
|
| if (buffer->frame_state_descriptor != nullptr) {
|
| + Node* frame_state =
|
| + call->InputAt(static_cast<int>(buffer->descriptor->InputCount()));
|
| +
|
| + // If it was a syntactic tail call we need to drop the current frame and
|
| + // an arguments adaptor frame on top of it (if the latter is present).
|
| + if (buffer->descriptor->SupportsTailCalls()) {
|
| + frame_state = NodeProperties::GetFrameStateInput(frame_state, 0);
|
| + buffer->frame_state_descriptor =
|
| + buffer->frame_state_descriptor->outer_state();
|
| +
|
| + if (buffer->frame_state_descriptor != nullptr &&
|
| + buffer->frame_state_descriptor->type() ==
|
| + FrameStateType::kArgumentsAdaptor) {
|
| + frame_state = NodeProperties::GetFrameStateInput(frame_state, 0);
|
| + buffer->frame_state_descriptor =
|
| + buffer->frame_state_descriptor->outer_state();
|
| + }
|
| + }
|
| +
|
| InstructionSequence::StateId state_id =
|
| sequence()->AddFrameStateDescriptor(buffer->frame_state_descriptor);
|
| buffer->instruction_args.push_back(g.TempImmediate(state_id.ToInt()));
|
|
|
| - Node* frame_state =
|
| - call->InputAt(static_cast<int>(buffer->descriptor->InputCount()));
|
| -
|
| StateObjectDeduplicator deduplicator(instruction_zone());
|
|
|
| frame_state_entries =
|
|
|