diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/expr.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/expr/incomplete1.C | 14 |
3 files changed, 22 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ae76043..f24de1b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-04-11 Richard Henderson <rth@redhat.com> + + PR c++/10202 + * expr.c (expand_expr): Use COMPLETE_OR_UNBOUND_ARRAY_TYPE_P + not COMPLETE_TYPE_P for re-invoking layout_decl. + 2003-04-11 Simon Law <sfllaw@engmail.uwaterloo.ca> * doc/bugreport.texi: Fix paragraph breaking between sections @@ -6712,7 +6712,8 @@ expand_expr (exp, target, tmode, modifier) case VAR_DECL: /* If a static var's type was incomplete when the decl was written, but the type is complete now, lay out the decl now. */ - if (DECL_SIZE (exp) == 0 && COMPLETE_TYPE_P (TREE_TYPE (exp)) + if (DECL_SIZE (exp) == 0 + && COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (TREE_TYPE (exp)) && (TREE_STATIC (exp) || DECL_EXTERNAL (exp))) layout_decl (exp, 0); diff --git a/gcc/testsuite/g++.dg/expr/incomplete1.C b/gcc/testsuite/g++.dg/expr/incomplete1.C new file mode 100644 index 0000000..03e363a --- /dev/null +++ b/gcc/testsuite/g++.dg/expr/incomplete1.C @@ -0,0 +1,14 @@ +// PR 10202 +// { dg-do compile } +// { dg-options -O0 } + +extern struct _smtp_account smtp_accounts[]; +typedef struct _smtp_account { + int flags; +} Smtp_Account; + +void get_smtp_host_info () +{ + if (smtp_accounts[0].flags & 0x01) + get_smtp_host_info(); +} |