From fae219a033656506d0c8cea62e22036d68b4bf6a Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Wed, 28 Aug 2013 17:27:13 +0000 Subject: [PATCH] PR16995: Failing to associate static members with their enclosing class In the transition from declaration (with some members) to definition, we were overwriting the list of members with the empty list when attaching template parameters. The fix is in llvm::DICompositeType::addMember (along with asserts that cause this bug to be covered by existing Clang test cases), including adding some asserts to catch this sort of issue which found issues fixed in this commit. llvm-svn: 189494 --- clang/lib/CodeGen/CGDebugInfo.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 153f285d493b..09202bbbb834 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -1122,17 +1122,14 @@ CollectCXXMemberFunctions(const CXXRecordDecl *RD, llvm::DIFile Unit, // the functions. for(DeclContext::decl_iterator I = RD->decls_begin(), E = RD->decls_end(); I != E; ++I) { - Decl *D = *I; - if (D->isImplicit()) - continue; - - if (const CXXMethodDecl *Method = dyn_cast(D)) { + if (const CXXMethodDecl *Method = dyn_cast(*I)) { // Reuse the existing member function declaration if it exists llvm::DenseMap::iterator MI = SPCache.find(Method->getCanonicalDecl()); - if (MI == SPCache.end()) - EltTys.push_back(CreateCXXMemberFunction(Method, Unit, RecordTy)); - else + if (MI == SPCache.end()) { + if (!Method->isImplicit()) + EltTys.push_back(CreateCXXMemberFunction(Method, Unit, RecordTy)); + } else EltTys.push_back(MI->second); } } -- GitLab