diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 295ed765dc462aae0ede992b8238dbaf8ecf46d4..0cd3ccc8fb6156265eb943aa494df0819127dd2c 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 e8af0e45679ede67028f65beffbf7626f1ef0d66..d10c3a2f0482801db80a40ef5c41992a1d8f2423 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 99e57c7ac70402188ea8ef529aaab1ae722b6c54..d0f9bc073fe676b7b3b68e8fd11f4f3c5cc92aa9 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 0000000000000000000000000000000000000000..a949c0cd85eadc1e7744862bb417f58bc38c2a2c --- /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 };