diff options
author | Jakub Jelinek <jakub@redhat.com> | 2006-11-21 10:43:16 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2006-11-21 10:43:16 +0100 |
commit | fd5b5108b009008cb39d0e1cccefe08b46f57c70 (patch) | |
tree | f4ca07233bb06e4e51b75b59fd0969dbf091802a | |
parent | 4576ceaf227bb48e2771f388405e3043b5e4ffeb (diff) | |
download | gcc-fd5b5108b009008cb39d0e1cccefe08b46f57c70.zip gcc-fd5b5108b009008cb39d0e1cccefe08b46f57c70.tar.gz gcc-fd5b5108b009008cb39d0e1cccefe08b46f57c70.tar.bz2 |
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
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/decl.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/static29.C | 5 |
4 files changed, 20 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 295ed76..0cd3ccc 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 e8af0e4..d10c3a2 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 99e57c7..d0f9bc0 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 0000000..a949c0c --- /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 }; |