From: jason Date: Thu, 14 Apr 2016 20:14:44 +0000 (+0000) Subject: PR c++/70543 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=601b594bbb472ac1b61a761aedffb9b892d81257;p=thirdparty%2Fgcc.git PR c++/70543 * pt.c (value_dependent_expression_p) [VAR_DECL]: A type-dependent initializer also makes the variable value-dependent. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234990 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index cba07aa166ae..01f13b73cd25 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2016-04-14 Jason Merrill + PR c++/70543 + * pt.c (value_dependent_expression_p) [VAR_DECL]: A type-dependent + initializer also makes the variable value-dependent. + PR c++/70648 * constexpr.c (cxx_eval_store_expression): Also copy CONSTRUCTOR_NO_IMPLICIT_ZERO. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index d066e559d0c7..4a00530b3121 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -22670,6 +22670,7 @@ value_dependent_expression_p (tree expression) && (TREE_CODE (DECL_INITIAL (expression)) == TREE_LIST /* cp_finish_decl doesn't fold reference initializers. */ || TREE_CODE (TREE_TYPE (expression)) == REFERENCE_TYPE + || type_dependent_expression_p (DECL_INITIAL (expression)) || value_dependent_expression_p (DECL_INITIAL (expression)))) return true; return false; diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-template9.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-template9.C new file mode 100644 index 000000000000..2ca641d77e34 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-template9.C @@ -0,0 +1,17 @@ +// PR c++/70543 +// { dg-do compile { target c++11 } } + +template +struct X +{ + template + static constexpr int + calc (void) + { + return 0; + } + + static constexpr unsigned int value = calc (); + + char foo[value]; +};