summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-05-11 22:25:03 +0000
committerAnders Carlsson <andersca@mac.com>2009-05-11 22:25:03 +0000
commit22e3784c79a39de7b2a3ee37c231f22cd43b07aa (patch)
tree3a242fb7188161e90db2030e6f90735880e77199
parent2ee73b86c0ad30efcfa0be7668b04b848076e710 (diff)
downloadbcm5719-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.cpp2
-rw-r--r--clang/test/Parser/cxx-friend.cpp12
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(); }
+};
OpenPOWER on IntegriCloud