summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2013-08-28 17:27:13 +0000
committerDavid Blaikie <dblaikie@gmail.com>2013-08-28 17:27:13 +0000
commitfae219a033656506d0c8cea62e22036d68b4bf6a (patch)
treede1598a72cedb5758fb833c626166f6354613f8c
parentf18633c3d5434a3ce42657193a3a7deb266d55d5 (diff)
downloadbcm5719-llvm-fae219a033656506d0c8cea62e22036d68b4bf6a.tar.gz
bcm5719-llvm-fae219a033656506d0c8cea62e22036d68b4bf6a.zip
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
-rw-r--r--clang/lib/CodeGen/CGDebugInfo.cpp13
1 files changed, 5 insertions, 8 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp
index 153f285d493..09202bbbb83 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<CXXMethodDecl>(D)) {
+ if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(*I)) {
// Reuse the existing member function declaration if it exists
llvm::DenseMap<const FunctionDecl *, llvm::WeakVH>::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);
}
}
OpenPOWER on IntegriCloud