From c956500eb6d0ef05cd4fcde83de8a46d22dcdbaf Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Sun, 29 Dec 2013 08:00:04 +0000 Subject: [PATCH] Store the global variable that's created so that it's reclaimed afterwards. This plugs a memory leak in ARM's FastISel by storing the GV in Module so that it's reclaimed. PR17978 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198160 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/ARMFastISel.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/Target/ARM/ARMFastISel.cpp b/lib/Target/ARM/ARMFastISel.cpp index f696113b424..845bb145e8b 100644 --- a/lib/Target/ARM/ARMFastISel.cpp +++ b/lib/Target/ARM/ARMFastISel.cpp @@ -77,6 +77,7 @@ class ARMFastISel : public FastISel { /// Subtarget - Keep a pointer to the ARMSubtarget around so that we can /// make the right decision when generating code for different targets. + Module &M; const ARMSubtarget *Subtarget; const TargetMachine &TM; const TargetInstrInfo &TII; @@ -91,6 +92,7 @@ class ARMFastISel : public FastISel { explicit ARMFastISel(FunctionLoweringInfo &funcInfo, const TargetLibraryInfo *libInfo) : FastISel(funcInfo, libInfo), + M(const_cast(*funcInfo.Fn->getParent())), TM(funcInfo.MF->getTarget()), TII(*TM.getInstrInfo()), TLI(*TM.getTargetLowering()) { @@ -2244,7 +2246,7 @@ unsigned ARMFastISel::getLibcallReg(const Twine &Name) { EVT LCREVT = TLI.getValueType(GVTy); if (!LCREVT.isSimple()) return 0; - GlobalValue *GV = new GlobalVariable(Type::getInt32Ty(*Context), false, + GlobalValue *GV = new GlobalVariable(M, Type::getInt32Ty(*Context), false, GlobalValue::ExternalLinkage, 0, Name); assert(GV->getType() == GVTy && "We miscomputed the type for the global!"); return ARMMaterializeGV(GV, LCREVT.getSimpleVT()); -- 2.34.1