From ec63b02e28b96463d1361aa8d0d9b21899ccbf50 Mon Sep 17 00:00:00 2001
From: reichelt <reichelt@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 5 Jun 2006 00:24:41 +0000
Subject: [PATCH] 	PR c++/27804 	* init.c (constant_value_1): Return
 decl instead of error_mark_node 	for invalid initializers.

	PR c++/27804
	* g++.dg/init/const4.C: New test.
	* g++.dg/init/member1.C: Add error-marker.
	* g++.dg/other/fold1.C: Adjust error-marker.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114377 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/cp/ChangeLog                    | 6 ++++++
 gcc/cp/init.c                       | 2 +-
 gcc/testsuite/ChangeLog             | 7 +++++++
 gcc/testsuite/g++.dg/init/const4.C  | 8 ++++++++
 gcc/testsuite/g++.dg/init/member1.C | 2 +-
 gcc/testsuite/g++.dg/other/fold1.C  | 2 +-
 6 files changed, 24 insertions(+), 3 deletions(-)
 create mode 100644 gcc/testsuite/g++.dg/init/const4.C

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 0d0c6a59b89e..7f118ab241ff 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2006-06-05  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+
+	PR c++/27804
+	* init.c (constant_value_1): Return decl instead of error_mark_node
+	for invalid initializers.
+
 2006-06-01  Andrew Pinski  <pinskia@physics.uc.edu>
 
 	PR c++/27592
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index 99d5d9908050..8a338faa5496 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -1483,7 +1483,7 @@ constant_value_1 (tree decl, bool integral_p)
 	  init = DECL_INITIAL (decl);
 	}
       if (init == error_mark_node)
-	return error_mark_node;
+	return decl;
       if (!init
 	  || !TREE_TYPE (init)
 	  || (integral_p
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9b484a9a363f..46095299fff2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2006-06-05  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+
+	PR c++/27804
+	* g++.dg/init/const4.C: New test.
+	* g++.dg/init/member1.C: Add error-marker.
+	* g++.dg/other/fold1.C: Adjust error-marker.
+
 2006-06-04  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
 	PR c++/27601
diff --git a/gcc/testsuite/g++.dg/init/const4.C b/gcc/testsuite/g++.dg/init/const4.C
new file mode 100644
index 000000000000..b99726b86166
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/const4.C
@@ -0,0 +1,8 @@
+// PR c++/27804
+// { dg-do compile }
+
+bool foo()
+{
+  const int i = X;  // { dg-error "not declared" }
+  return i > 0;
+}
diff --git a/gcc/testsuite/g++.dg/init/member1.C b/gcc/testsuite/g++.dg/init/member1.C
index aededf23e7b7..e2af0809c713 100644
--- a/gcc/testsuite/g++.dg/init/member1.C
+++ b/gcc/testsuite/g++.dg/init/member1.C
@@ -11,7 +11,7 @@ template<int> struct B {};
 template<typename T> struct C
 {
   static const int i = A<T>::i;  // { dg-error "incomplete" }
-  static const int j = i;
+  static const int j = i;  // { dg-error "non-constant expression" }
   B<j> b;  // { dg-error "not a valid template arg" }
 };
 
diff --git a/gcc/testsuite/g++.dg/other/fold1.C b/gcc/testsuite/g++.dg/other/fold1.C
index f1f0dd9b99b5..b085a84f0dda 100644
--- a/gcc/testsuite/g++.dg/other/fold1.C
+++ b/gcc/testsuite/g++.dg/other/fold1.C
@@ -4,5 +4,5 @@
 struct A
 {
     static const int i = i;  // { dg-error "not declared" }
-    int x[i];                // { dg-error "variable-size array" }
+    int x[i];                // { dg-error "integral constant-expression" }
 };
-- 
GitLab