]> granicus.if.org Git - clang/commitdiff
Fix test failures caused by reading memory after freeing it. My fix is
authorEli Friedman <eli.friedman@gmail.com>
Fri, 27 Mar 2009 20:56:17 +0000 (20:56 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Fri, 27 Mar 2009 20:56:17 +0000 (20:56 +0000)
rather nasty, but I can't think of a better fix off the top of my head.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67867 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ASTContext.cpp

index 84976a029449d8c0a732104772c6f960cd55036c..e433769a9ce882cff1c42e534384dccd719303f7 100644 (file)
@@ -81,8 +81,14 @@ ASTContext::~ASTContext() {
   for (llvm::FoldingSet<NestedNameSpecifier>::iterator 
          NNS = NestedNameSpecifiers.begin(),
          NNSEnd = NestedNameSpecifiers.end(); 
-       NNS != NNSEnd; ++NNS)
-    NNS->Destroy(*this);
+       NNS != NNSEnd; ) {
+    // This loop iterates, then destroys so that it doesn't cause invalid
+    // reads.
+    // FIXME: Find a less fragile way to do this!
+    NestedNameSpecifier* N = &*NNS;
+    ++NNS;
+    N->Destroy(*this);
+  }
 
   if (GlobalNestedNameSpecifier)
     GlobalNestedNameSpecifier->Destroy(*this);