[llvm-commits] [llvm-gcc-4.2] r52476 - in /llvm-gcc-4.2/trunk/gcc: llvm-backend.cpp llvm-debug.cpp llvm-debug.h

Bill Wendling isanbard at gmail.com
Wed Jun 18 17:18:40 PDT 2008


Author: void
Date: Wed Jun 18 19:18:40 2008
New Revision: 52476

URL: http://llvm.org/viewvc/llvm-project?rev=52476&view=rev
Log:
Better fix for the memory smasher. Delete and recreate the TheDebugInfo object
when deleting and recreating the TheModule object.

Modified:
    llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp
    llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp
    llvm-gcc-4.2/trunk/gcc/llvm-debug.h

Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp?rev=52476&r1=52475&r2=52476&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Wed Jun 18 19:18:40 2008
@@ -203,7 +203,6 @@
     RegisterRegAlloc::setDefault(createLocalRegisterAllocator);
  
   if (!optimize && debug_info_level > DINFO_LEVEL_NONE)
-    // TheDebugInfo is taking ownership of TheModule.
     TheDebugInfo = new DebugInfo(TheModule);
 }
 
@@ -227,9 +226,8 @@
 void llvm_pch_read(const unsigned char *Buffer, unsigned Size) {
   std::string ModuleName = TheModule->getModuleIdentifier();
 
-  // Don't delete the module if the debug info isn't done with it yet.
-  if (!TheDebugInfo || TheDebugInfo->getModule() != TheModule)
-    delete TheModule;
+  delete TheModule;
+  delete TheDebugInfo;
 
   clearTargetBuiltinCache();
 
@@ -238,6 +236,7 @@
 
   std::string ErrMsg;
   TheModule = ParseBitcodeFile(MB, &ErrMsg);
+  TheDebugInfo = new DebugInfo(TheModule);
   delete MB;
 
   if (!TheModule) {

Modified: llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp?rev=52476&r1=52475&r2=52476&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp Wed Jun 18 19:18:40 2008
@@ -225,10 +225,6 @@
   SR.setModule(M);
 }
 
-DebugInfo::~DebugInfo() {
-  delete M;
-}
-
 /// getValueFor - Return a llvm representation for a given debug information
 /// descriptor.
 Value *DebugInfo::getValueFor(DebugInfoDesc *DD) {

Modified: llvm-gcc-4.2/trunk/gcc/llvm-debug.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-debug.h?rev=52476&r1=52475&r2=52476&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-debug.h (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-debug.h Wed Jun 18 19:18:40 2008
@@ -77,12 +77,10 @@
   
 public:
   DebugInfo(Module *m);
-  ~DebugInfo();
 
   // Accessors.
   void setLocationFile(const char *FullPath) { CurFullPath = FullPath; }
   void setLocationLine(int LineNo)           { CurLineNo = LineNo; }
-  const Module *getModule() const            { return M; }
   
   /// getValueFor - Return a llvm representation for a given debug information
   /// descriptor.





More information about the llvm-commits mailing list