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
diff --git a/lib/Sema/SemaAccess.cpp b/lib/Sema/SemaAccess.cpp
index e2b7a7e..90d3177 100644
--- a/lib/Sema/SemaAccess.cpp
+++ b/lib/Sema/SemaAccess.cpp
@@ -514,9 +514,6 @@
 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 1d633a9..1958095 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -6538,8 +6538,6 @@
   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 af852aa..5cfacf7 100644
--- a/lib/Sema/SemaTemplate.cpp
+++ b/lib/Sema/SemaTemplate.cpp
@@ -1365,12 +1365,8 @@
   // 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 @@
     }
   }
 
-  // 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 82c2b31..f23611b 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 T> class A {
-    class Member {};
+template <class T> class A {
+  class Member {
   };
+};
 
-  class B {
-    template <class T> friend class A<T>::Member;
-  };
+class B {
+  template <class T> friend class A<T>::Member;
+};
 
-  A<int> a;
-  B b;
-}
-
-// rdar://problem/8204127
-namespace test1 {
-  template <class T> struct A;
-
-  class C {
-    static void foo();
-    template <class T> friend void A<T>::f();
-  };
-
-  template <class T> struct A {
-    void f() { C::foo(); }
-  };
-
-  template <class T> struct A<T*> {
-    void f() { C::foo(); }
-  };
-
-  template <> struct A<char> {
-    void f() { C::foo(); }
-  };
-}
-
-// FIXME: these should fail!
-namespace test2 {
-  template <class T> struct A;
-
-  class C {
-    static void foo();
-    template <class T> friend void A<T>::g();
-  };
-
-  template <class T> struct A {
-    void f() { C::foo(); }
-  };
-
-  template <class T> struct A<T*> {
-    void f() { C::foo(); }
-  };
-
-  template <> struct A<char> {
-    void f() { C::foo(); }
-  };
-}
+A<int> a;
+B b;