OSDN Git Service

Subzero: Fix a memory leak.
authorJim Stichnoth <stichnot@chromium.org>
Sat, 8 Aug 2015 15:37:02 +0000 (08:37 -0700)
committerJim Stichnoth <stichnot@chromium.org>
Sat, 8 Aug 2015 15:37:02 +0000 (08:37 -0700)
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.

src/IceConverter.cpp
src/IceConverter.h
src/IceTranslator.cpp
src/IceTranslator.h
src/PNaClTranslator.h

index 0fe6f10..1d10ba4 100644 (file)
@@ -655,7 +655,7 @@ class LLVM2ICEGlobalsConverter : public LLVM2ICEConverter {
   LLVM2ICEGlobalsConverter() = delete;
   LLVM2ICEGlobalsConverter(const LLVM2ICEGlobalsConverter &) = delete;
   LLVM2ICEGlobalsConverter &
-  operator-(const LLVM2ICEGlobalsConverter &) = delete;
+  operator=(const LLVM2ICEGlobalsConverter &) = delete;
 
 public:
   explicit LLVM2ICEGlobalsConverter(Ice::Converter &Converter)
index f2dbb3a..43ee3cb 100644 (file)
@@ -34,7 +34,7 @@ public:
   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.
index a2db1a2..e3a32dc 100644 (file)
@@ -27,8 +27,6 @@ Translator::Translator(GlobalContext *Ctx)
     : Ctx(Ctx), NextSequenceNumber(GlobalContext::getFirstSequenceNumber()),
       ErrorStatus() {}
 
-Translator::~Translator() = default;
-
 IceString Translator::createUnnamedName(const IceString &Prefix, SizeT Index) {
   if (Index == 0)
     return Prefix;
index 9fe46ee..449b216 100644 (file)
@@ -41,7 +41,7 @@ class Translator {
 public:
   explicit Translator(GlobalContext *Ctx);
 
-  ~Translator();
+  virtual ~Translator() = default;
   const ErrorCode &getErrorStatus() const { return ErrorStatus; }
 
   GlobalContext *getContext() const { return Ctx; }
index b6286e8..24a627b 100644 (file)
@@ -34,6 +34,7 @@ class PNaClTranslator : public Translator {
 
 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