(digest_init): Don't recursively call digest_init when in traditional
authorRichard Kenner <kenner@gcc.gnu.org>
Mon, 11 Sep 1995 23:05:26 +0000 (19:05 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Mon, 11 Sep 1995 23:05:26 +0000 (19:05 -0400)
mode if the type is invalid.

From-SVN: r10315

gcc/c-typeck.c

index 11b93d7797280c61d160e6c24ec3459f50dad3d4..75df0837a4151e7c18bc3dae3d36a494f77b5c46 100644 (file)
@@ -4894,7 +4894,7 @@ digest_init (type, init, require_constant, constructor_constant)
      and it initializes the first element of x to 0.  */
   if (flag_traditional)
     {
-      tree top = 0, prev = 0;
+      tree top = 0, prev = 0, otype = type;
       while (TREE_CODE (type) == RECORD_TYPE
             || TREE_CODE (type) == ARRAY_TYPE
             || TREE_CODE (type) == QUAL_UNION_TYPE
@@ -4916,11 +4916,17 @@ digest_init (type, init, require_constant, constructor_constant)
              return error_mark_node;
            }
        }
-      TREE_OPERAND (prev, 1)
-       = build_tree_list (NULL_TREE,
-                          digest_init (type, init, require_constant,
-                                       constructor_constant));
-      return top;
+
+      if (otype != type)
+       {
+         TREE_OPERAND (prev, 1)
+           = build_tree_list (NULL_TREE,
+                              digest_init (type, init, require_constant,
+                                           constructor_constant));
+         return top;
+       }
+      else
+       return error_mark_node;
     }
   error_init ("invalid initializer%s", " for `%s'", NULL);
   return error_mark_node;