Patch to avoid excess errors for invalid initializers

Joseph S. Myers joseph@codesourcery.com
Fri Nov 5 22:45:00 GMT 2004


It doesn't make sense to give extra errors about an initializer being
non-constant when an error has already been given for that
initializer; the intended correct initializer might or might not have
been constant.  Previously, we gave such excess errors in the second
case in the included testcase, but not in the first.  This patch stops
such errors being given.  It prevents some such excess errors in the
testsuite with the new parser's slightly different error recovery from
syntactically invalid initializers and is separated out from the last
parser patch version.

Bootstrapped with no regressions on i686-pc-linux-gnu.  Applied to
mainline.

-- 
Joseph S. Myers               http://www.srcf.ucam.org/~jsm28/gcc/
    jsm@polyomino.org.uk (personal mail)
    joseph@codesourcery.com (CodeSourcery mail)
    jsm28@gcc.gnu.org (Bugzilla assignments and CCs)

2004-11-05  Joseph S. Myers  <joseph@codesourcery.com>

	* c-typeck.c (output_init_element): Return early if value is
	error_mark_node.

testsuite:
2004-11-05  Joseph S. Myers  <joseph@codesourcery.com>

	* gcc.dg/init-undef-1.c: New test.

diff -rupN GCC.orig/gcc/c-typeck.c GCC/gcc/c-typeck.c
--- GCC.orig/gcc/c-typeck.c	2004-10-31 10:17:52.000000000 +0000
+++ GCC/gcc/c-typeck.c	2004-11-04 20:39:35.000000000 +0000
@@ -5663,7 +5663,7 @@ static void
 output_init_element (tree value, bool strict_string, tree type, tree field,
 		     int pending)
 {
-  if (type == error_mark_node)
+  if (type == error_mark_node || value == error_mark_node)
     {
       constructor_erroneous = 1;
       return;
diff -rupN GCC.orig/gcc/testsuite/gcc.dg/init-undef-1.c GCC/gcc/testsuite/gcc.dg/init-undef-1.c
--- GCC.orig/gcc/testsuite/gcc.dg/init-undef-1.c	1970-01-01 00:00:00.000000000 +0000
+++ GCC/gcc/testsuite/gcc.dg/init-undef-1.c	2004-11-05 15:40:37.000000000 +0000
@@ -0,0 +1,8 @@
+/* Invalid initializers should not receive an "is not constant"
+   error.  */
+/* Origin: Joseph Myers <joseph@codesourcery.com> */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+int p = c; /* { dg-error "undeclared" } */
+struct s { int a; } x = { b }; /* { dg-error "undeclared" } */



More information about the Gcc-patches mailing list