From c26fa0e6810494e49242e660191498ec169c8bc1 Mon Sep 17 00:00:00 2001 From: jason Date: Thu, 13 Sep 2012 15:13:24 +0000 Subject: [PATCH] PR c++/53836 * pt.c (value_dependent_expression_p): A TREE_LIST initializer must be dependent. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191261 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/pt.c | 9 +++++++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/init10.C | 15 +++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/template/init10.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index bd620469df1..b7d8a1d43d5 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 768f141accf..4cf2ed8917b 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 d6c6e239f2e..debdd885c30 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 00000000000..1480622d365 --- /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>(); +} -- 2.11.4.GIT