aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/ModuleProvider.h15
1 files changed, 10 insertions, 5 deletions
diff --git a/include/llvm/ModuleProvider.h b/include/llvm/ModuleProvider.h
index 19b0005ec5..8ef7427657 100644
--- a/include/llvm/ModuleProvider.h
+++ b/include/llvm/ModuleProvider.h
@@ -11,17 +11,16 @@ class Function;
class Module;
class AbstractModuleProvider {
- Module *M;
-
protected:
+ Module *TheModule;
AbstractModuleProvider();
public:
virtual ~AbstractModuleProvider();
- /// getModule - returns the module this provider is encapsulating
+ /// getModule - returns the module this provider is encapsulating.
///
- Module* getModule() { return M; }
+ Module* getModule() { return TheModule; }
/// materializeFunction - make sure the given function is fully read.
///
@@ -33,7 +32,13 @@ public:
/// releaseModule - no longer delete the Module* when provider is destroyed.
///
- Module* releaseModule() { Module *tempM = M; M = 0; return tempM; }
+ virtual Module* releaseModule() {
+ // Since we're losing control of this Module, we must hand it back complete
+ materializeModule();
+ Module *tempM = TheModule;
+ TheModule = 0;
+ return tempM;
+ }
};