Patch for bug 17424

Joseph S. Myers jsm@polyomino.org.uk
Sat Sep 18 19:19:00 GMT 2004


This patch fixes bug 17424, a tree-checking ICE regression for sizeof
applied to an undeclared variable.

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

-- 
Joseph S. Myers               http://www.srcf.ucam.org/~jsm28/gcc/
  http://www.srcf.ucam.org/~jsm28/gcc/#c90status - status of C90 for GCC 4.0
    jsm@polyomino.org.uk (personal mail)
    jsm28@gcc.gnu.org (Bugzilla assignments and CCs)

2004-09-18  Joseph S. Myers  <jsm@polyomino.org.uk>

	PR c/17424
	* c-typeck.c (c_expr_sizeof_expr): Check for error_mark_node.

testsuite:
2004-09-18  Joseph S. Myers  <jsm@polyomino.org.uk>

	PR c/17424
	* gcc.dg/pr17424-1.c: New test.

diff -rupN GCC.orig/gcc/c-typeck.c GCC/gcc/c-typeck.c
--- GCC.orig/gcc/c-typeck.c	2004-09-12 23:48:33.000000000 +0000
+++ GCC/gcc/c-typeck.c	2004-09-17 18:34:26.000000000 +0000
@@ -1849,9 +1849,18 @@ struct c_expr
 c_expr_sizeof_expr (struct c_expr expr)
 {
   struct c_expr ret;
-  ret.value = c_sizeof (TREE_TYPE (expr.value));
-  ret.original_code = ERROR_MARK;
-  pop_maybe_used (C_TYPE_VARIABLE_SIZE (TREE_TYPE (expr.value)));
+  if (expr.value == error_mark_node)
+    {
+      ret.value = error_mark_node;
+      ret.original_code = ERROR_MARK;
+      pop_maybe_used (false);
+    }
+  else
+    {
+      ret.value = c_sizeof (TREE_TYPE (expr.value));
+      ret.original_code = ERROR_MARK;
+      pop_maybe_used (C_TYPE_VARIABLE_SIZE (TREE_TYPE (expr.value)));
+    }
   return ret;
 }
 
diff -rupN GCC.orig/gcc/testsuite/gcc.dg/pr17424-1.c GCC/gcc/testsuite/gcc.dg/pr17424-1.c
--- GCC.orig/gcc/testsuite/gcc.dg/pr17424-1.c	1970-01-01 00:00:00.000000000 +0000
+++ GCC/gcc/testsuite/gcc.dg/pr17424-1.c	2004-09-17 18:36:14.000000000 +0000
@@ -0,0 +1,5 @@
+/* Test for bug 17424: ICE for sizeof an undeclared variable.  */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+;int foezis = sizeof tni; /* { dg-error "'tni' undeclared" } */



More information about the Gcc-patches mailing list