Hi,
In cases where ReleaseMacroInfo gets called and it doesn't cleanup the Preprocessor's MIChainHead can lead to double deletion. I am sending the patch that fixes the problem for me.
Vassil


diff --git a/lib/Lex/PPDirectives.cpp b/lib/Lex/PPDirectives.cpp
index 5f38387..1a9b5eb 100644
--- a/lib/Lex/PPDirectives.cpp
+++ b/lib/Lex/PPDirectives.cpp
@@ -94,6 +94,14 @@ Preprocessor::AllocateVisibilityMacroDirective(SourceLocation Loc,
 /// error in the macro definition.
 void Preprocessor::ReleaseMacroInfo(MacroInfo *MI) {
   // Don't try to reuse the storage; this only happens on error paths.
+
+  // If this is on the macro info chain, avoid double deletion on teardown.
+  while (MacroInfoChain *I = MIChainHead) {
+    if (&(I->MI) == MI)
+      I->Next = (I->Next) ? I->Next->Next : 0;
+    MIChainHead = I->Next;
+  }
+
   MI->~MacroInfo();
 }

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to