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