From 897d24e44a4fde8f47054e3f97e0a63e2b7d88f9 Mon Sep 17 00:00:00 2001 From: Dodji Seketeli Date: Wed, 8 Apr 2009 08:59:02 +0000 Subject: [PATCH] re PR c++/39637 (ICE on ill-formed sizeof() in variadic template) gcc/cp/ChangeLog: 2009-04-08 Dodji Seketeli PR c++/39637 * parser.c (cp_parser_enumerator_definition): Make sure the initializer of the enumerator doesn't contain any bare parameter pack. gcc/testsuite/ChangeLog 2009-04-08 Dodji Seketeli PR c++/39637 * g++.dg/cpp0x/variadic-crash2.C: New test. From-SVN: r145713 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/parser.c | 5 +++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/cpp0x/variadic-crash2.C | 18 ++++++++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/variadic-crash2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4905a601d38f..64c0d09e796f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2009-04-08 Dodji Seketeli + + PR c++/39637 + * parser.c (cp_parser_enumerator_definition): Make sure the + initializer of the enumerator doesn't contain any bare parameter pack. + 2009-04-06 Jason Merrill PR c++/35146 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 9393ba436eb9..d22cee6f12b6 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -11491,6 +11491,11 @@ cp_parser_enumerator_definition (cp_parser* parser, tree type) else value = NULL_TREE; + /* If we are processing a template, make sure the initializer of the + enumerator doesn't contain any bare template parameter pack. */ + if (check_for_bare_parameter_packs (value)) + value = error_mark_node; + /* Create the enumerator. */ build_enumerator (identifier, value, type); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8e70ccf97658..e4737e5fc805 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-04-08 Dodji Seketeli + + PR c++/39637 + * g++.dg/cpp0x/variadic-crash2.C: New test. + 2009-04-06 Jason Merrill PR c++/35146 diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-crash2.C b/gcc/testsuite/g++.dg/cpp0x/variadic-crash2.C new file mode 100644 index 000000000000..7250effeeb66 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic-crash2.C @@ -0,0 +1,18 @@ +// Contributed by Dodji Seketeli +// Origin: PR c++/39637 +// { dg-options "-std=gnu++0x" } +// { dg-do "compile" } + +template +void +f(Types...) +{ + enum {e = sizeof(Types)}; // { dg-error "parameter packs not expanded with|note" } + enum {e1 = sizeof...(Types)}; +} + +int +main() +{ + f(0); +} -- 2.47.2