From: Mark Mitchell Date: Mon, 10 Oct 2005 22:30:17 +0000 (+0000) Subject: Mark Mitchell PR c++/23437 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5e9edb0f6f337facf312ae8cc0515a7ef057eead;p=gcc.git Mark Mitchell PR c++/23437 Mark Mitchell PR c++/23437 * parser.c (cp_parser_template_argument_list): Do not treat contents of argument list as part of a constant expression. PR c++/23437 * g++.dg/template/arg4.C: New test. From-SVN: r105199 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 87d52996bf9..390384bc014 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2005-10-10 Giovanni Bajo + Mark Mitchell + + PR c++/23437 + * parser.c (cp_parser_template_argument_list): Do not treat + contents of argument list as part of a constant expression. + 2005-10-10 Mark Mitchell PR c++/24139 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index a4eedc17816..e5a03fcfe43 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -8904,9 +8904,18 @@ cp_parser_template_argument_list (cp_parser* parser) tree *arg_ary = fixed_args; tree vec; bool saved_in_template_argument_list_p; + bool saved_ice_p; + bool saved_non_ice_p; saved_in_template_argument_list_p = parser->in_template_argument_list_p; parser->in_template_argument_list_p = true; + /* Even if the template-id appears in an integral + constant-expression, the contents of the argument list do + not. */ + saved_ice_p = parser->integral_constant_expression_p; + parser->integral_constant_expression_p = false; + saved_non_ice_p = parser->non_integral_constant_expression_p; + parser->non_integral_constant_expression_p = false; do { tree argument; @@ -8940,6 +8949,8 @@ cp_parser_template_argument_list (cp_parser* parser) if (arg_ary != fixed_args) free (arg_ary); + parser->non_integral_constant_expression_p = saved_non_ice_p; + parser->integral_constant_expression_p = saved_ice_p; parser->in_template_argument_list_p = saved_in_template_argument_list_p; return vec; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c8514a8d1f6..9e9dc6e8224 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-10-10 Mark Mitchell + + PR c++/23437 + * g++.dg/template/arg4.C: New test. + 2005-10-10 Eric Botcazou * gcc.dg/ucnid-2.c: XFAIL on Solaris. diff --git a/gcc/testsuite/g++.dg/template/arg4.C b/gcc/testsuite/g++.dg/template/arg4.C new file mode 100644 index 00000000000..9c9d9ea96c3 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/arg4.C @@ -0,0 +1,9 @@ +// PR c++/23437 + +template struct S { + static const int i = 10; +}; + +void g(); + +int a[S::i];