From: Daniel Dunbar Date: Sat, 19 Sep 2009 20:17:48 +0000 (+0000) Subject: Ok, an AssertingVH definitely doesn't work for now because we free our cache after... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=65f13c3381a31eae8a7219477c37c247ac9838fc;p=clang Ok, an AssertingVH definitely doesn't work for now because we free our cache after the optimizer may have hacked on the module. Use a WeakVH instead. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82324 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index e1dca0e483..1bd0918f1a 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -752,10 +752,13 @@ llvm::DIType CGDebugInfo::getOrCreateType(QualType Ty, return llvm::DIType(); // Check for existing entry. - std::map >::iterator it = + std::map::iterator it = TypeCache.find(Ty.getAsOpaquePtr()); - if (it != TypeCache.end()) - return llvm::DIType(it->second); + if (it != TypeCache.end()) { + // Verify that the debug info still exists. + if (&*it->second) + return llvm::DIType(cast(it->second)); + } // Otherwise create the type. llvm::DIType Res = CreateTypeNode(Ty, Unit); diff --git a/lib/CodeGen/CGDebugInfo.h b/lib/CodeGen/CGDebugInfo.h index d0f0731d6b..b796b1e97c 100644 --- a/lib/CodeGen/CGDebugInfo.h +++ b/lib/CodeGen/CGDebugInfo.h @@ -49,7 +49,7 @@ class CGDebugInfo { /// TypeCache - Cache of previously constructed Types. // FIXME: Eliminate this map. Be careful of iterator invalidation. - std::map > TypeCache; + std::map TypeCache; bool BlockLiteralGenericSet; llvm::DIType BlockLiteralGeneric;