]> granicus.if.org Git - clang/commitdiff
For friend class decls, always use TK_Reference so we'll try to look up existing...
authorAnders Carlsson <andersca@mac.com>
Mon, 11 May 2009 22:25:03 +0000 (22:25 +0000)
committerAnders Carlsson <andersca@mac.com>
Mon, 11 May 2009 22:25:03 +0000 (22:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71481 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Parse/ParseDeclCXX.cpp
test/Parser/cxx-friend.cpp

index f684649f858b38b4e78ad931f1a31012e6d79e9e..e1e81ec33d3e5eae1eadd36fa5fd33dbb6034182 100644 (file)
@@ -455,7 +455,7 @@ void Parser::ParseClassSpecifier(tok::TokenKind TagTokKind,
   Action::TagKind TK;
   if (Tok.is(tok::l_brace) || (getLang().CPlusPlus && Tok.is(tok::colon)))
     TK = Action::TK_Definition;
-  else if (Tok.is(tok::semi))
+  else if (Tok.is(tok::semi) && !DS.isFriendSpecified())
     TK = Action::TK_Declaration;
   else
     TK = Action::TK_Reference;
index 5bfaf2fdbce7afbdb594a8c5365f36d24a6f21db..ea30ddcbd0a814982f35de8db18912f8cb68493f 100644 (file)
@@ -3,3 +3,15 @@
 class C {
   friend class D;
 };
+
+class A {
+public:
+       void f();
+};
+
+class B {
+  // 'A' here should refer to the declaration above.  
+  friend class A;
+
+ void f(A *a) { a->f(); }
+};