summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2012-04-20 07:12:26 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2012-04-20 07:12:26 +0000
commit61e582f6bccfffdcd3ba93a5bf5a7e1c5b882a6d (patch)
treebc9aa9b868b3c61ed1fdfee6dd46b33471cdfd9c /clang/lib/Sema
parentabadc660e081d6bebb0f19f441dfb16c3bd08412 (diff)
downloadbcm5719-llvm-61e582f6bccfffdcd3ba93a5bf5a7e1c5b882a6d.tar.gz
bcm5719-llvm-61e582f6bccfffdcd3ba93a5bf5a7e1c5b882a6d.zip
Replace r155185 with a better fix, which also addresses PR12557. When looking
up an elaborated type specifier in a friend declaration, only look for type declarations, per [basic.lookup.elab]p2. If we know that the redeclaration lookup for a friend class template in a dependent context finds a non-template, don't delay the diagnostic to instantiation time. llvm-svn: 155187
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r--clang/lib/Sema/SemaTemplate.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp
index a0b996beecd..e16e7d67c63 100644
--- a/clang/lib/Sema/SemaTemplate.cpp
+++ b/clang/lib/Sema/SemaTemplate.cpp
@@ -867,7 +867,7 @@ Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK,
// Find any previous declaration with this name.
DeclContext *SemanticContext;
- LookupResult Previous(*this, Name, NameLoc, LookupOrdinaryName,
+ LookupResult Previous(*this, Name, NameLoc, LookupTagName,
ForRedeclaration);
if (SS.isNotEmpty() && !SS.isInvalid()) {
SemanticContext = computeDeclContext(SS, true);
@@ -938,7 +938,7 @@ Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK,
while (!OutermostContext->isFileContext())
OutermostContext = OutermostContext->getLookupParent();
- if (PrevClassTemplate &&
+ if (PrevDecl &&
(OutermostContext->Equals(PrevDecl->getDeclContext()) ||
OutermostContext->Encloses(PrevDecl->getDeclContext()))) {
SemanticContext = PrevDecl->getDeclContext();
@@ -951,7 +951,7 @@ Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK,
}
}
- if (CurContext->isDependentContext()) {
+ if (CurContext->isDependentContext() && PrevClassTemplate) {
// If this is a dependent context, we don't want to link the friend
// class template to the template in scope, because that would perform
// checking of the template parameter lists that can't be performed
OpenPOWER on IntegriCloud