From 72c4c15e030cabf71cffc899ca779a251bcc72d1 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Fri, 20 Aug 2010 03:26:10 +0000 Subject: [PATCH] Revert r111609, which is failing its new test. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111611 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaAccess.cpp | 3 - lib/Sema/SemaDeclCXX.cpp | 2 - lib/Sema/SemaTemplate.cpp | 11 +--- test/CXX/temp/temp.decls/temp.friend/p5.cpp | 61 +++------------------ 4 files changed, 9 insertions(+), 68 deletions(-) diff --git a/lib/Sema/SemaAccess.cpp b/lib/Sema/SemaAccess.cpp index e2b7a7e061..90d3177222 100644 --- a/lib/Sema/SemaAccess.cpp +++ b/lib/Sema/SemaAccess.cpp @@ -514,9 +514,6 @@ static AccessResult MatchesFriend(Sema &S, static AccessResult MatchesFriend(Sema &S, const EffectiveContext &EC, FriendDecl *FriendD) { - if (FriendD->isInvalidDecl()) - return AR_accessible; - if (TypeSourceInfo *T = FriendD->getFriendType()) return MatchesFriend(S, EC, T->getType()->getCanonicalTypeUnqualified()); diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 1d633a9048..1958095783 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -6538,8 +6538,6 @@ Sema::ActOnFriendFunctionDecl(Scope *S, FrD->setAccess(AS_public); CurContext->addDecl(FrD); - if (ND->isInvalidDecl()) FrD->setInvalidDecl(); - return DeclPtrTy::make(ND); } diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp index af852aa340..5cfacf78b5 100644 --- a/lib/Sema/SemaTemplate.cpp +++ b/lib/Sema/SemaTemplate.cpp @@ -1365,12 +1365,8 @@ Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, // If there were at least as many template-ids as there were template // parameter lists, then there are no template parameter lists remaining for // the declaration itself. - if (Idx >= NumParamLists) { - // Silently drop template member friend declarations. - // TODO: implement these - if (IsFriend && NumParamLists) Invalid = true; + if (Idx >= NumParamLists) return 0; - } // If there were too many template parameter lists, complain about that now. if (Idx != NumParamLists - 1) { @@ -1399,11 +1395,6 @@ Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, } } - // Silently drop template member template friend declarations. - // TODO: implement these - if (IsFriend && NumParamLists > 1) - Invalid = true; - // Return the last template parameter list, which corresponds to the // entity being declared. return ParamLists[NumParamLists - 1]; diff --git a/test/CXX/temp/temp.decls/temp.friend/p5.cpp b/test/CXX/temp/temp.decls/temp.friend/p5.cpp index 82c2b3169d..f23611bd50 100644 --- a/test/CXX/temp/temp.decls/temp.friend/p5.cpp +++ b/test/CXX/temp/temp.decls/temp.friend/p5.cpp @@ -1,58 +1,13 @@ // RUN: %clang_cc1 -fsyntax-only -verify %s -namespace test0 { - template class A { - class Member {}; +template class A { + class Member { }; +}; - class B { - template friend class A::Member; - }; - - A a; - B b; -} - -// rdar://problem/8204127 -namespace test1 { - template struct A; - - class C { - static void foo(); - template friend void A::f(); - }; +class B { + template friend class A::Member; +}; - template struct A { - void f() { C::foo(); } - }; - - template struct A { - void f() { C::foo(); } - }; - - template <> struct A { - void f() { C::foo(); } - }; -} - -// FIXME: these should fail! -namespace test2 { - template struct A; - - class C { - static void foo(); - template friend void A::g(); - }; - - template struct A { - void f() { C::foo(); } - }; - - template struct A { - void f() { C::foo(); } - }; - - template <> struct A { - void f() { C::foo(); } - }; -} +A a; +B b; -- 2.40.0