summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-09-13 23:59:13 +0000
committerAnders Carlsson <andersca@mac.com>2009-09-13 23:59:13 +0000
commit40a90c87540127b583a54416f99b504175e1e66a (patch)
tree6a149d42b2f62cdf6f8bcb1bfe01237487a8facb
parent64f18eceaff6bbca0fbdc009fe33021a717040b0 (diff)
downloadbcm5719-llvm-40a90c87540127b583a54416f99b504175e1e66a.tar.gz
bcm5719-llvm-40a90c87540127b583a54416f99b504175e1e66a.zip
Fix a bug in getFriendObjectKind where we would clear out all mask bits except IDNS_TagFriend and IDNS_OrdinaryFriend but then check for IDNS_Tag and IDNS_Ordinary.
llvm-svn: 81730
-rw-r--r--clang/include/clang/AST/DeclBase.h3
-rw-r--r--clang/test/SemaTemplate/friend.cpp10
2 files changed, 12 insertions, 1 deletions
diff --git a/clang/include/clang/AST/DeclBase.h b/clang/include/clang/AST/DeclBase.h
index ed609fe1011..7e188c26f9c 100644
--- a/clang/include/clang/AST/DeclBase.h
+++ b/clang/include/clang/AST/DeclBase.h
@@ -443,7 +443,8 @@ public:
unsigned mask
= (IdentifierNamespace & (IDNS_TagFriend | IDNS_OrdinaryFriend));
if (!mask) return FOK_None;
- return (mask & (IDNS_Tag | IDNS_Ordinary) ? FOK_Declared : FOK_Undeclared);
+ return (IdentifierNamespace & (IDNS_Tag | IDNS_Ordinary) ?
+ FOK_Declared : FOK_Undeclared);
}
// Implement isa/cast/dyncast/etc.
diff --git a/clang/test/SemaTemplate/friend.cpp b/clang/test/SemaTemplate/friend.cpp
new file mode 100644
index 00000000000..cd74cb1b365
--- /dev/null
+++ b/clang/test/SemaTemplate/friend.cpp
@@ -0,0 +1,10 @@
+// RUN: clang-cc -fsyntax-only -verify %s
+template<typename T> struct A {
+ struct B { };
+
+ friend struct B;
+};
+
+void f() {
+ A<int>::B b;
+}
OpenPOWER on IntegriCloud