Fix tree-checking abort on testcase with undefined macro as array size.
authorJim Wilson <wilson@cygnus.com>
Fri, 20 Oct 2000 00:58:35 +0000 (00:58 +0000)
committerJim Wilson <wilson@gcc.gnu.org>
Fri, 20 Oct 2000 00:58:35 +0000 (17:58 -0700)
* c-decl.c (start_decl): Check for error_mark_node type before using
COMPLETE_TYPE_P.
(finish_decl): Likewise.  Don't give an error if decl type is
already error_mark_node.

From-SVN: r36955

gcc/ChangeLog
gcc/c-decl.c

index 5fa663e..51ac067 100644 (file)
@@ -1,5 +1,10 @@
 2000-10-19  Jim Wilson  <wilson@cygnus.com>
 
+       * c-decl.c (start_decl): Check for error_mark_node type before using
+       COMPLETE_TYPE_P.
+       (finish_decl): Likewise.  Don't give an error if decl type is
+       already error_mark_node.
+
        * haifa-sched.c (compute_trg_info): Add explanatory comments.
        New local update_blocks.  Use update_blocks to remove duplicates
        when computing update blocks.  Check for bblst_table overflow.
index 8621e8a..00e7b91 100644 (file)
@@ -3506,7 +3506,12 @@ start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
       default:
        /* Don't allow initializations for incomplete types
           except for arrays which might be completed by the initialization.  */
-       if (COMPLETE_TYPE_P (TREE_TYPE (decl)))
+
+       /* This can happen if the array size is an undefined macro.  We already
+          gave a warning, so we don't need another one.  */
+       if (TREE_TYPE (decl) == error_mark_node)
+         initialized = 0;
+       else if (COMPLETE_TYPE_P (TREE_TYPE (decl)))
          {
            /* A complete type is ok if size is fixed.  */
 
@@ -3584,7 +3589,8 @@ start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
       && DECL_RTL (tem) == 0
       && !DECL_CONTEXT (tem))
     {
-      if (COMPLETE_TYPE_P (TREE_TYPE (tem)))
+      if (TREE_TYPE (tem) != error_mark_node
+         && COMPLETE_TYPE_P (TREE_TYPE (tem)))
        expand_decl (tem);
       else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
               && DECL_INITIAL (tem) != 0)
@@ -3679,10 +3685,13 @@ finish_decl (decl, init, asmspec_tree)
 
   if (TREE_CODE (decl) == VAR_DECL)
     {
-      if (DECL_SIZE (decl) == 0 && COMPLETE_TYPE_P (TREE_TYPE (decl)))
+      if (DECL_SIZE (decl) == 0 && TREE_TYPE (decl) != error_mark_node
+         && COMPLETE_TYPE_P (TREE_TYPE (decl)))
        layout_decl (decl, 0);
 
       if (DECL_SIZE (decl) == 0
+         /* Don't give an error if we already gave one earlier.  */
+         && TREE_TYPE (decl) != error_mark_node
          && (TREE_STATIC (decl)
              ?
                /* A static variable with an incomplete type