mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 22:41:28 +08:00
c-decl.c (pushdecl): Only increase n_incomplete if pushed decl's type is RECORD_TYPE...
* c-decl.c (pushdecl): Only increase n_incomplete if pushed decl's type is RECORD_TYPE, UNION_TYPE or ARRAY_TYPE thereof. (finish_struct): Break the loop if n_incomplete went to 0. For ARRAY_TYPE, if it is not TYPE_DECL, layout the decl too. * gcc.c-torture/compile/20011130-1.c: New test. From-SVN: r47671
This commit is contained in:
parent
f71307783a
commit
f79349c75c
@ -1,3 +1,10 @@
|
||||
2001-12-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* c-decl.c (pushdecl): Only increase n_incomplete if pushed decl's
|
||||
type is RECORD_TYPE, UNION_TYPE or ARRAY_TYPE thereof.
|
||||
(finish_struct): Break the loop if n_incomplete went to 0.
|
||||
For ARRAY_TYPE, if it is not TYPE_DECL, layout the decl too.
|
||||
|
||||
Wed Dec 5 07:41:13 2001 Douglas B. Rupp <rupp@gnat.com>
|
||||
|
||||
* config/alpha/alpha.c (alpha_va_start): Update VMS case.
|
||||
|
27
gcc/c-decl.c
27
gcc/c-decl.c
@ -2491,7 +2491,15 @@ pushdecl (x)
|
||||
incomplete type. */
|
||||
if (TREE_TYPE (x) != error_mark_node
|
||||
&& !COMPLETE_TYPE_P (TREE_TYPE (x)))
|
||||
++b->n_incomplete;
|
||||
{
|
||||
tree element = TREE_TYPE (x);
|
||||
|
||||
while (TREE_CODE (element) == ARRAY_TYPE)
|
||||
element = TREE_TYPE (element);
|
||||
if (TREE_CODE (element) == RECORD_TYPE
|
||||
|| TREE_CODE (element) == UNION_TYPE)
|
||||
++b->n_incomplete;
|
||||
}
|
||||
}
|
||||
|
||||
/* Put decls on list in reverse order.
|
||||
@ -5777,7 +5785,8 @@ finish_struct (t, fieldlist, attributes)
|
||||
rest_of_decl_compilation (decl, NULL, toplevel, 0);
|
||||
if (! toplevel)
|
||||
expand_decl (decl);
|
||||
--current_binding_level->n_incomplete;
|
||||
if (--current_binding_level->n_incomplete == 0)
|
||||
break;
|
||||
}
|
||||
else if (!COMPLETE_TYPE_P (TREE_TYPE (decl))
|
||||
&& TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
|
||||
@ -5786,7 +5795,19 @@ finish_struct (t, fieldlist, attributes)
|
||||
while (TREE_CODE (element) == ARRAY_TYPE)
|
||||
element = TREE_TYPE (element);
|
||||
if (element == t)
|
||||
layout_array_type (TREE_TYPE (decl));
|
||||
{
|
||||
layout_array_type (TREE_TYPE (decl));
|
||||
if (TREE_CODE (decl) != TYPE_DECL)
|
||||
{
|
||||
layout_decl (decl, 0);
|
||||
maybe_objc_check_decl (decl);
|
||||
rest_of_decl_compilation (decl, NULL, toplevel, 0);
|
||||
if (! toplevel)
|
||||
expand_decl (decl);
|
||||
}
|
||||
if (--current_binding_level->n_incomplete == 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,7 @@
|
||||
2001-12-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* gcc.c-torture/compile/20011130-1.c: New test.
|
||||
|
||||
2001-12-04 Joseph S. Myers <jsm28@cam.ac.uk>
|
||||
|
||||
* gcc.c-torture/execute/20000722-1.x,
|
||||
|
Loading…
x
Reference in New Issue
Block a user