diff options
author | Owen Anderson <resistor@mac.com> | 2010-10-20 22:22:30 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2010-10-20 22:22:30 +0000 |
commit | 75f6df283f726c289b240fe8c5f2f42cdfff5d5f (patch) | |
tree | db80bdfeaf16f8f7510d3d24f9603e33f1bb0e7f /include | |
parent | ba13864483b696e7f8e2058c3a50b5d901f2213b (diff) | |
download | external_llvm-75f6df283f726c289b240fe8c5f2f42cdfff5d5f.zip external_llvm-75f6df283f726c289b240fe8c5f2f42cdfff5d5f.tar.gz external_llvm-75f6df283f726c289b240fe8c5f2f42cdfff5d5f.tar.bz2 |
Attempt to fix valgrind complaining about (benign) leaks in pass registration by having PassRegistry
delete PassInfo objects that were created using new-style initialization.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116959 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/PassRegistry.h | 5 | ||||
-rw-r--r-- | include/llvm/PassSupport.h | 16 |
2 files changed, 12 insertions, 9 deletions
diff --git a/include/llvm/PassRegistry.h b/include/llvm/PassRegistry.h index 31d48a4..5d89c49 100644 --- a/include/llvm/PassRegistry.h +++ b/include/llvm/PassRegistry.h @@ -53,7 +53,7 @@ public: /// registerPass - Register a pass (by means of its PassInfo) with the /// registry. Required in order to use the pass with a PassManager. - void registerPass(const PassInfo &PI); + void registerPass(const PassInfo &PI, bool ShouldFree = false); /// registerPass - Unregister a pass (by means of its PassInfo) with the /// registry. @@ -63,7 +63,8 @@ public: // an analysis group) with the registry. Like registerPass, this is required // in order for a PassManager to be able to use this group/pass. void registerAnalysisGroup(const void *InterfaceID, const void *PassID, - PassInfo& Registeree, bool isDefault); + PassInfo& Registeree, bool isDefault, + bool ShouldFree = false); /// enumerateWith - Enumerate the registered passes, calling the provided /// PassRegistrationListener's passEnumerate() callback on each of them. diff --git a/include/llvm/PassSupport.h b/include/llvm/PassSupport.h index d1b4f26..d00d0c0 100644 --- a/include/llvm/PassSupport.h +++ b/include/llvm/PassSupport.h @@ -149,7 +149,7 @@ private: static void* initialize##passName##PassOnce(PassRegistry &Registry) { \ PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \ PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \ - Registry.registerPass(*PI); \ + Registry.registerPass(*PI, true); \ return PI; \ } \ void llvm::initialize##passName##Pass(PassRegistry &Registry) { \ @@ -167,7 +167,7 @@ private: #define INITIALIZE_PASS_END(passName, arg, name, cfg, analysis) \ PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \ PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \ - Registry.registerPass(*PI); \ + Registry.registerPass(*PI, true); \ return PI; \ } \ void llvm::initialize##passName##Pass(PassRegistry &Registry) { \ @@ -252,7 +252,7 @@ struct RegisterAnalysisGroup : public RegisterAGBase { static void* initialize##agName##AnalysisGroupOnce(PassRegistry &Registry) { \ initialize##defaultPass##Pass(Registry); \ PassInfo *AI = new PassInfo(name, & agName :: ID); \ - Registry.registerAnalysisGroup(& agName ::ID, 0, *AI, false); \ + Registry.registerAnalysisGroup(& agName ::ID, 0, *AI, false, true); \ return AI; \ } \ void llvm::initialize##agName##AnalysisGroup(PassRegistry &Registry) { \ @@ -265,10 +265,11 @@ struct RegisterAnalysisGroup : public RegisterAGBase { if (!def) initialize##agName##AnalysisGroup(Registry); \ PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \ PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \ - Registry.registerPass(*PI); \ + Registry.registerPass(*PI, true); \ \ PassInfo *AI = new PassInfo(name, & agName :: ID); \ - Registry.registerAnalysisGroup(& agName ::ID, & passName ::ID, *AI, def); \ + Registry.registerAnalysisGroup(& agName ::ID, & passName ::ID, \ + *AI, def, true); \ return AI; \ } \ void llvm::initialize##passName##Pass(PassRegistry &Registry) { \ @@ -283,10 +284,11 @@ struct RegisterAnalysisGroup : public RegisterAGBase { #define INITIALIZE_AG_PASS_END(passName, agName, arg, n, cfg, analysis, def) \ PassInfo *PI = new PassInfo(n, arg, & passName ::ID, \ PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \ - Registry.registerPass(*PI); \ + Registry.registerPass(*PI, true); \ \ PassInfo *AI = new PassInfo(n, & agName :: ID); \ - Registry.registerAnalysisGroup(& agName ::ID, & passName ::ID, *AI, def); \ + Registry.registerAnalysisGroup(& agName ::ID, & passName ::ID, \ + *AI, def, true); \ return AI; \ } \ void llvm::initialize##passName##Pass(PassRegistry &Registry) { \ |