diff options
| author | Anders Carlsson <andersca@mac.com> | 2009-05-11 22:25:03 +0000 |
|---|---|---|
| committer | Anders Carlsson <andersca@mac.com> | 2009-05-11 22:25:03 +0000 |
| commit | 22e3784c79a39de7b2a3ee37c231f22cd43b07aa (patch) | |
| tree | 3a242fb7188161e90db2030e6f90735880e77199 | |
| parent | 2ee73b86c0ad30efcfa0be7668b04b848076e710 (diff) | |
| download | bcm5719-llvm-22e3784c79a39de7b2a3ee37c231f22cd43b07aa.tar.gz bcm5719-llvm-22e3784c79a39de7b2a3ee37c231f22cd43b07aa.zip | |
For friend class decls, always use TK_Reference so we'll try to look up existing class decls first.
llvm-svn: 71481
| -rw-r--r-- | clang/lib/Parse/ParseDeclCXX.cpp | 2 | ||||
| -rw-r--r-- | clang/test/Parser/cxx-friend.cpp | 12 |
2 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index f684649f858..e1e81ec33d3 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/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/clang/test/Parser/cxx-friend.cpp b/clang/test/Parser/cxx-friend.cpp index 5bfaf2fdbce..ea30ddcbd0a 100644 --- a/clang/test/Parser/cxx-friend.cpp +++ b/clang/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(); } +}; |

