From: Jason Merrill Date: Thu, 13 Sep 2012 15:13:24 +0000 (-0400) Subject: re PR c++/53836 (ICE: unexpected expression of kind template_parm_index) X-Git-Tag: misc/gccgo-go1_1_2~898 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7c8233ce846dd7f68992b0bbfafae87fb46b83ab;p=thirdparty%2Fgcc.git re PR c++/53836 (ICE: unexpected expression of kind template_parm_index) PR c++/53836 * pt.c (value_dependent_expression_p): A TREE_LIST initializer must be dependent. From-SVN: r191261 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index bd620469df17..b7d8a1d43d5e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-09-13 Jason Merrill + + PR c++/53836 + * pt.c (value_dependent_expression_p): A TREE_LIST initializer must + be dependent. + 2012-09-10 Paolo Carlini PR c++/54541 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 768f141accf0..4cf2ed8917bd 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -19199,10 +19199,15 @@ value_dependent_expression_p (tree expression) case VAR_DECL: /* A constant with literal type and is initialized - with an expression that is value-dependent. */ + with an expression that is value-dependent. + + Note that a non-dependent parenthesized initializer will have + already been replaced with its constant value, so if we see + a TREE_LIST it must be dependent. */ if (DECL_INITIAL (expression) && decl_constant_var_p (expression) - && value_dependent_expression_p (DECL_INITIAL (expression))) + && (TREE_CODE (DECL_INITIAL (expression)) == TREE_LIST + || value_dependent_expression_p (DECL_INITIAL (expression)))) return true; return false; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d6c6e239f2e4..debdd885c303 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-09-13 Jason Merrill + + PR c++/53836 + * g++.dg/template/init10.C: New. + 2012-09-13 Tobias Burnus PR fortran/54556 diff --git a/gcc/testsuite/g++.dg/template/init10.C b/gcc/testsuite/g++.dg/template/init10.C new file mode 100644 index 000000000000..1480622d3651 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/init10.C @@ -0,0 +1,15 @@ +template +struct A { }; + +template +void g() +{ + const int M ( Q ); + + A a; +} + +void h() +{ + g<3>(); +}