From: Anders Carlsson Date: Mon, 11 May 2009 22:25:03 +0000 (+0000) Subject: For friend class decls, always use TK_Reference so we'll try to look up existing... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5dc2af12bdb8c71c01556f7d5780c5ef94af0306;p=clang For friend class decls, always use TK_Reference so we'll try to look up existing class decls first. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71481 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/ParseDeclCXX.cpp b/lib/Parse/ParseDeclCXX.cpp index f684649f85..e1e81ec33d 100644 --- a/lib/Parse/ParseDeclCXX.cpp +++ b/lib/Parse/ParseDeclCXX.cpp @@ -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; diff --git a/test/Parser/cxx-friend.cpp b/test/Parser/cxx-friend.cpp index 5bfaf2fdbc..ea30ddcbd0 100644 --- a/test/Parser/cxx-friend.cpp +++ b/test/Parser/cxx-friend.cpp @@ -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(); } +};