[llvm] r281718 - Trying to fix Mangler memory leak in TargetLoweringObjectFile.

Eric Liu via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 16 04:50:57 PDT 2016


Author: ioeric
Date: Fri Sep 16 06:50:57 2016
New Revision: 281718

URL: http://llvm.org/viewvc/llvm-project?rev=281718&view=rev
Log:
Trying to fix Mangler memory leak in TargetLoweringObjectFile.

Summary:
`TargetLoweringObjectFile` can be re-used and thus `TargetLoweringObjectFile::Initialize()`
can be called multiple times causing `Mang` pointer memory leak.

Reviewers: echristo

Subscribers: llvm-commits, mehdi_amini

Differential Revision: https://reviews.llvm.org/D24659

Modified:
    llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h
    llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp

Modified: llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h?rev=281718&r1=281717&r2=281718&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h (original)
+++ llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h Fri Sep 16 06:50:57 2016
@@ -38,7 +38,7 @@ class TargetLoweringObjectFile : public
   MCContext *Ctx;
 
   /// Name-mangler for global names.
-  Mangler *Mang;
+  Mangler *Mang = nullptr;
 
   TargetLoweringObjectFile(
     const TargetLoweringObjectFile&) = delete;

Modified: llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp?rev=281718&r1=281717&r2=281718&view=diff
==============================================================================
--- llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp (original)
+++ llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp Fri Sep 16 06:50:57 2016
@@ -43,6 +43,8 @@ using namespace llvm;
 void TargetLoweringObjectFile::Initialize(MCContext &ctx,
                                           const TargetMachine &TM) {
   Ctx = &ctx;
+  // `Initialize` can be called more than once.
+  if (Mang != nullptr) delete Mang;
   Mang = new Mangler();
   InitMCObjectFileInfo(TM.getTargetTriple(), TM.isPositionIndependent(),
                        TM.getCodeModel(), *Ctx);




More information about the llvm-commits mailing list