From dae00516cc18e8a718392a314e278714b36f45f3 Mon Sep 17 00:00:00 2001 From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Tue, 21 Nov 2006 09:43:16 +0000 Subject: [PATCH] PR c++/29570 * decl.c (cp_finish_decl): Check for value dependent brace enclosed scalar initializer. * g++.dg/template/static29.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@119045 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/decl.c | 9 ++++++++- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/template/static29.C | 5 +++++ 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/template/static29.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 295ed765dc46..0cd3ccc8fb61 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2006-11-21 Jakub Jelinek <jakub@redhat.com> + PR c++/29570 + * decl.c (cp_finish_decl): Check for value dependent brace enclosed + scalar initializer. + PR c++/29734 * cp-tree.h (WANT_VECTOR): Define. (WANT_ARITH): Add WANT_VECTOR. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index e8af0e45679e..d10c3a2f0482 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -5058,7 +5058,14 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, || !DECL_CLASS_SCOPE_P (decl) || !DECL_INTEGRAL_CONSTANT_VAR_P (decl) || type_dependent_p - || value_dependent_expression_p (init)) + || value_dependent_expression_p (init) + /* Check also if initializer is a value dependent + { integral_constant_expression }. */ + || (TREE_CODE (init) == CONSTRUCTOR + && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)) == 1 + && value_dependent_expression_p + (VEC_index (constructor_elt, + CONSTRUCTOR_ELTS (init), 0)->value))) { if (init) DECL_INITIAL (decl) = init; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 99e57c7ac704..d0f9bc073fe6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2006-11-21 Jakub Jelinek <jakub@redhat.com> + PR c++/29570 + * g++.dg/template/static29.C: New test. + PR c++/29734 * g++.dg/conversion/simd4.C: New test. diff --git a/gcc/testsuite/g++.dg/template/static29.C b/gcc/testsuite/g++.dg/template/static29.C new file mode 100644 index 000000000000..a949c0cd85ea --- /dev/null +++ b/gcc/testsuite/g++.dg/template/static29.C @@ -0,0 +1,5 @@ +// PR c++/29570 + +template<int> struct A { static const int i; }; + +template<int N> const int A<N>::i = { A<N>::i }; -- GitLab