Subzero: Fix a memory leak. The problem was that Translator and subclasses need to have virtual destructors since they are used as unique_ptr<>. As a result, only the Translator base class destructor was being invoked. BUG= https://code.google.com/p/nativeclient/issues/detail?id=4290 TEST= make -f Makefile.standalone ASAN=1 check-lit R=ascull@google.com Review URL: https://codereview.chromium.org/1281003003.
diff --git a/src/IceConverter.cpp b/src/IceConverter.cpp index 0fe6f10..1d10ba4 100644 --- a/src/IceConverter.cpp +++ b/src/IceConverter.cpp
@@ -655,7 +655,7 @@ LLVM2ICEGlobalsConverter() = delete; LLVM2ICEGlobalsConverter(const LLVM2ICEGlobalsConverter &) = delete; LLVM2ICEGlobalsConverter & - operator-(const LLVM2ICEGlobalsConverter &) = delete; + operator=(const LLVM2ICEGlobalsConverter &) = delete; public: explicit LLVM2ICEGlobalsConverter(Ice::Converter &Converter)
diff --git a/src/IceConverter.h b/src/IceConverter.h index f2dbb3a..43ee3cb 100644 --- a/src/IceConverter.h +++ b/src/IceConverter.h
@@ -34,7 +34,7 @@ Converter(llvm::Module *Mod, GlobalContext *Ctx) : Translator(Ctx), Mod(Mod) {} - ~Converter() = default; + ~Converter() override = default; /// Converts the LLVM Module to ICE. Sets exit status to false if successful, /// true otherwise.
diff --git a/src/IceTranslator.cpp b/src/IceTranslator.cpp index a2db1a2..e3a32dc 100644 --- a/src/IceTranslator.cpp +++ b/src/IceTranslator.cpp
@@ -27,8 +27,6 @@ : Ctx(Ctx), NextSequenceNumber(GlobalContext::getFirstSequenceNumber()), ErrorStatus() {} -Translator::~Translator() = default; - IceString Translator::createUnnamedName(const IceString &Prefix, SizeT Index) { if (Index == 0) return Prefix;
diff --git a/src/IceTranslator.h b/src/IceTranslator.h index 9fe46ee..449b216 100644 --- a/src/IceTranslator.h +++ b/src/IceTranslator.h
@@ -41,7 +41,7 @@ public: explicit Translator(GlobalContext *Ctx); - ~Translator(); + virtual ~Translator() = default; const ErrorCode &getErrorStatus() const { return ErrorStatus; } GlobalContext *getContext() const { return Ctx; }
diff --git a/src/PNaClTranslator.h b/src/PNaClTranslator.h index b6286e8..24a627b 100644 --- a/src/PNaClTranslator.h +++ b/src/PNaClTranslator.h
@@ -34,6 +34,7 @@ public: explicit PNaClTranslator(GlobalContext *Ctx) : Translator(Ctx) {} + ~PNaClTranslator() override = default; /// Reads the PNaCl bitcode file and translates to ICE, which is then /// converted to machine code. Sets ErrorStatus to 1 if any errors