diff options
author | Richard Henderson <rth@redhat.com> | 2003-04-11 15:44:23 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2003-04-11 15:44:23 -0700 |
commit | ca06cfe69f7f89314603d636b36adeadbb70b56a (patch) | |
tree | a01ada3c6afd82cc7fff3981f62928ada47eadea /gcc | |
parent | d2d42a917c2a65769e78d4d430e47962b2d24ba5 (diff) | |
download | gcc-ca06cfe69f7f89314603d636b36adeadbb70b56a.zip gcc-ca06cfe69f7f89314603d636b36adeadbb70b56a.tar.gz gcc-ca06cfe69f7f89314603d636b36adeadbb70b56a.tar.bz2 |
re PR c++/10202 ([IA64] ICE in int_mode_for_mode, at stor-layout.c)
PR c++/10202
* expr.c (expand_expr): Use COMPLETE_OR_UNBOUND_ARRAY_TYPE_P
not COMPLETE_TYPE_P for re-invoking layout_decl.
* g++.dg/expr/incomplete1.C: New.
From-SVN: r65484
Diffstat (limited to 'gcc')
-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(); +} |