From fd5b5108b009008cb39d0e1cccefe08b46f57c70 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 21 Nov 2006 10:43:16 +0100 Subject: [PATCH] re PR c++/29570 (ICE with brace-enclosed initializer) PR c++/29570 * decl.c (cp_finish_decl): Check for value dependent brace enclosed scalar initializer. * g++.dg/template/static29.C: New test. From-SVN: r119045 --- 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 295ed765dc4..0cd3ccc8fb6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2006-11-21 Jakub Jelinek + 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 e8af0e45679..d10c3a2f048 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 99e57c7ac70..d0f9bc073fe 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2006-11-21 Jakub Jelinek + 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 00000000000..a949c0cd85e --- /dev/null +++ b/gcc/testsuite/g++.dg/template/static29.C @@ -0,0 +1,5 @@ +// PR c++/29570 + +template struct A { static const int i; }; + +template const int A::i = { A::i }; -- 2.30.2