From f7dc76af6da23002aca4a202e31ec4246bca2b91 Mon Sep 17 00:00:00 2001 From: "ulan@chromium.org" Date: Thu, 20 Mar 2014 09:10:15 +0000 Subject: [PATCH] A64: clean up pending reloc info if code generation was aborted. This fixes assertion failure in destructor of Assembler. BUG=352659 LOG=N R=jochen@chromium.org Review URL: https://codereview.chromium.org/206213002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20100 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/a64/assembler-a64.h | 4 ++++ src/assembler.h | 4 ++++ src/lithium.cc | 1 + 3 files changed, 9 insertions(+) diff --git a/src/a64/assembler-a64.h b/src/a64/assembler-a64.h index c4a0260..3da4382 100644 --- a/src/a64/assembler-a64.h +++ b/src/a64/assembler-a64.h @@ -743,6 +743,10 @@ class Assembler : public AssemblerBase { virtual ~Assembler(); + virtual void AbortedCodeGeneration() { + num_pending_reloc_info_ = 0; + } + // System functions --------------------------------------------------------- // Start generating code from the beginning of the buffer, discarding any code // and data that has already been emitted into the buffer. diff --git a/src/assembler.h b/src/assembler.h index 5a00d44..4d46a25 100644 --- a/src/assembler.h +++ b/src/assembler.h @@ -82,6 +82,10 @@ class AssemblerBase: public Malloced { int pc_offset() const { return static_cast(pc_ - buffer_); } + // This function is called when code generation is aborted, so that + // the assembler could clean up internal data structures. + virtual void AbortedCodeGeneration() { } + static const int kMinimalBufferSize = 4*KB; protected: diff --git a/src/lithium.cc b/src/lithium.cc index 9ccdc7a..24b4d1b 100644 --- a/src/lithium.cc +++ b/src/lithium.cc @@ -446,6 +446,7 @@ Handle LChunk::Codegen() { CodeGenerator::PrintCode(code, info()); return code; } + assembler.AbortedCodeGeneration(); return Handle::null(); } -- 2.7.4