aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2012-04-16 10:15:36 -0400
committerJason Merrill <jason@gcc.gnu.org>2012-04-16 10:15:36 -0400
commit1c4010c6d61d3fa7f5fceeb09ea06a260bc5128c (patch)
treeda899adfc67cc945e6f04a944f283f48b894ec88 /gcc
parentac9a074c7249d0a042b827696caa3f694befaee5 (diff)
downloadgcc-1c4010c6d61d3fa7f5fceeb09ea06a260bc5128c.zip
gcc-1c4010c6d61d3fa7f5fceeb09ea06a260bc5128c.tar.gz
gcc-1c4010c6d61d3fa7f5fceeb09ea06a260bc5128c.tar.bz2
re PR c++/51148 ([C++0x] Unexpanded template param packs wrongly accepted in friend class declarations)
PR c++/51148 * friend.c (make_friend_class): Call check_for_bare_parameter_packs. From-SVN: r186495
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/friend.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic127.C15
4 files changed, 28 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c511a12..5a3d337 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2012-04-16 Jason Merrill <jason@redhat.com>
+
+ PR c++/51148
+ * friend.c (make_friend_class): Call check_for_bare_parameter_packs.
+
2012-04-16 Jan Hubicka <jh@suse.cz>
* decl2.c (collect_candidates_for_java_method_alias): Use FOR_EACH
diff --git a/gcc/cp/friend.c b/gcc/cp/friend.c
index e532a30..87a093a 100644
--- a/gcc/cp/friend.c
+++ b/gcc/cp/friend.c
@@ -239,6 +239,9 @@ make_friend_class (tree type, tree friend_type, bool complain)
friend_type = cv_unqualified (friend_type);
+ if (check_for_bare_parameter_packs (friend_type))
+ return;
+
if (friend_depth)
/* If the TYPE is a template then it makes sense for it to be
friends with itself; this means that each instantiation is
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 847f90e..27df0fb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-04-16 Jason Merrill <jason@redhat.com>
+
+ PR c++/51148
+ * g++.dg/cpp0x/variadic127.C: New.
+
2012-04-16 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* lib/plugin-support.exp (plugin-test-execute): Properly determine
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic127.C b/gcc/testsuite/g++.dg/cpp0x/variadic127.C
new file mode 100644
index 0000000..2e0d593
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic127.C
@@ -0,0 +1,15 @@
+// PR c++/51148
+// { dg-do compile { target c++11 } }
+
+template<typename... Types>
+struct S
+{};
+
+template<typename... Types>
+struct T
+{
+ friend class S<Types>; // { dg-error "parameter packs not expanded" }
+};
+
+int main()
+{}