OSDN Git Service

PR c++/29570
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 21 Nov 2006 09:43:16 +0000 (09:43 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 21 Nov 2006 09:43:16 +0000 (09:43 +0000)
* 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
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/static29.C [new file with mode: 0644]

index 295ed76..0cd3ccc 100644 (file)
@@ -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.
index e8af0e4..d10c3a2 100644 (file)
@@ -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;
index 99e57c7..d0f9bc0 100644 (file)
@@ -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 (file)
index 0000000..a949c0c
--- /dev/null
@@ -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 };