summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2013-08-20 00:39:40 +0000
committerEli Friedman <eli.friedman@gmail.com>2013-08-20 00:39:40 +0000
commit0eaf10bc943d00f953fbd6870f0f431f891b6a11 (patch)
treeb11aa801a3d18ada26d4be755741ba485f832bd1 /clang/lib
parentef7280c7f408b0b01c1950d40769ef857028bd92 (diff)
downloadbcm5719-llvm-0eaf10bc943d00f953fbd6870f0f431f891b6a11.tar.gz
bcm5719-llvm-0eaf10bc943d00f953fbd6870f0f431f891b6a11.zip
Fix name lookup with dependent using decls.
We previously mishandled UnresolvedUsingValueDecls in NamedDecl::declarationReplaces, which caused us to forget decls when there are multiple dependent using decls for the same name. Fixes PR16936. llvm-svn: 188737
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/AST/Decl.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp
index 9562879de6a..1c2ead0ee59 100644
--- a/clang/lib/AST/Decl.cpp
+++ b/clang/lib/AST/Decl.cpp
@@ -1353,6 +1353,15 @@ bool NamedDecl::declarationReplaces(NamedDecl *OldD) const {
cast<UsingDecl>(OldD)->getQualifier());
}
+ if (isa<UnresolvedUsingValueDecl>(this) &&
+ isa<UnresolvedUsingValueDecl>(OldD)) {
+ ASTContext &Context = getASTContext();
+ return Context.getCanonicalNestedNameSpecifier(
+ cast<UnresolvedUsingValueDecl>(this)->getQualifier()) ==
+ Context.getCanonicalNestedNameSpecifier(
+ cast<UnresolvedUsingValueDecl>(OldD)->getQualifier());
+ }
+
// A typedef of an Objective-C class type can replace an Objective-C class
// declaration or definition, and vice versa.
if ((isa<TypedefNameDecl>(this) && isa<ObjCInterfaceDecl>(OldD)) ||
OpenPOWER on IntegriCloud