[cfe-commits] r80272 - in /cfe/trunk: lib/Sema/SemaDecl.cpp lib/Sema/SemaTemplateInstantiateDecl.cpp test/SemaTemplate/instantiate-friend-class.cpp

Eli Friedman eli.friedman at gmail.com
Thu Aug 27 11:38:57 PDT 2009


Author: efriedma
Date: Thu Aug 27 13:38:56 2009
New Revision: 80272

URL: http://llvm.org/viewvc/llvm-project?rev=80272&view=rev
Log:
PR4794: Make instantiating friend class decls not crash.


Added:
    cfe/trunk/test/SemaTemplate/instantiate-friend-class.cpp
Modified:
    cfe/trunk/lib/Sema/SemaDecl.cpp
    cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp

Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=80272&r1=80271&r2=80272&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Thu Aug 27 13:38:56 2009
@@ -4311,7 +4311,10 @@
   New->setLexicalDeclContext(CurContext);
 
   // Set the access specifier.
-  if (!Invalid && TUK != TUK_Friend)
+  // FIXME: This used to be skipped for friend tag decls, but it led to an
+  // assertion in Decl::CheckAccessDeclContext(); once various issues with
+  // friend class decls are sorted out, this should be revisited.
+  if (!Invalid)
     SetMemberAccessSpecifier(New, PrevDecl, AS);
 
   if (TUK == TUK_Definition)

Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp?rev=80272&r1=80271&r2=80272&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp Thu Aug 27 13:38:56 2009
@@ -265,6 +265,8 @@
   FriendClassDecl *NewD =
     FriendClassDecl::Create(SemaRef.Context, DC, D->getLocation(), T,
                             D->getFriendLoc());
+  NewD->setLexicalDeclContext(Owner);
+
   Owner->addDecl(NewD);
   return NewD;
 }

Added: cfe/trunk/test/SemaTemplate/instantiate-friend-class.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/instantiate-friend-class.cpp?rev=80272&view=auto

==============================================================================
--- cfe/trunk/test/SemaTemplate/instantiate-friend-class.cpp (added)
+++ cfe/trunk/test/SemaTemplate/instantiate-friend-class.cpp Thu Aug 27 13:38:56 2009
@@ -0,0 +1,8 @@
+// RUN: clang-cc -fsyntax-only -verify %s
+
+template <class T> class X
+{
+  friend class Y;
+};
+X<int> y;
+





More information about the cfe-commits mailing list