From a38a573ade0b306a961b32be8065fb0db9898cee Mon Sep 17 00:00:00 2001 From: titzer Date: Fri, 14 Aug 2015 06:07:27 -0700 Subject: [PATCH] [turbofan] Gracefully handle missing info()->context() in CodeGenerator::IsMaterializableFromFrame() R=mstarzinger@chromium.org BUG= Review URL: https://codereview.chromium.org/1292233004 Cr-Commit-Position: refs/heads/master@{#30176} --- src/compiler.cc | 5 +++++ src/compiler.h | 1 + src/compiler/code-generator.cc | 4 +++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/compiler.cc b/src/compiler.cc index 8a0ea19..7e0f0fd 100644 --- a/src/compiler.cc +++ b/src/compiler.cc @@ -102,6 +102,11 @@ bool CompilationInfo::has_shared_info() const { } +bool CompilationInfo::has_context() const { + return parse_info_ && !parse_info_->context().is_null(); +} + + CompilationInfo::CompilationInfo(ParseInfo* parse_info) : CompilationInfo(parse_info, nullptr, BASE, parse_info->isolate(), parse_info->zone()) { diff --git a/src/compiler.h b/src/compiler.h index 78ae812..6baddf1 100644 --- a/src/compiler.h +++ b/src/compiler.h @@ -154,6 +154,7 @@ class CompilationInfo { Handle context() const; Handle shared_info() const; bool has_shared_info() const; + bool has_context() const; // ----------------------------------------------------------- Isolate* isolate() const { diff --git a/src/compiler/code-generator.cc b/src/compiler/code-generator.cc index 4f0b039..ca74795 100644 --- a/src/compiler/code-generator.cc +++ b/src/compiler/code-generator.cc @@ -232,7 +232,8 @@ void CodeGenerator::RecordSafepoint(ReferenceMap* references, bool CodeGenerator::IsMaterializableFromFrame(Handle object, int* offset_return) { if (linkage()->GetIncomingDescriptor()->IsJSFunctionCall()) { - if (object.is_identical_to(info()->context()) && !info()->is_osr()) { + if (info()->has_context() && object.is_identical_to(info()->context()) && + !info()->is_osr()) { *offset_return = StandardFrameConstants::kContextOffset; return true; } else if (object.is_identical_to(info()->closure())) { @@ -531,6 +532,7 @@ void CodeGenerator::BuildTranslationForFrameStateDescriptor( Handle shared_info; if (!descriptor->shared_info().ToHandle(&shared_info)) { + if (!info()->has_shared_info()) return; // Stub with no SharedFunctionInfo. shared_info = info()->shared_info(); } int shared_info_id = DefineDeoptimizationLiteral(shared_info); -- 2.7.4