]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/10202 ([IA64] ICE in int_mode_for_mode, at stor-layout.c)
authorRichard Henderson <rth@redhat.com>
Fri, 11 Apr 2003 22:44:23 +0000 (15:44 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Fri, 11 Apr 2003 22:44:23 +0000 (15:44 -0700)
        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

gcc/ChangeLog
gcc/expr.c
gcc/testsuite/g++.dg/expr/incomplete1.C [new file with mode: 0644]

index ae76043bd310f06e813b6b4941e48dcc2054779f..f24de1b789f6193bafb32c942691d9698fb07f12 100644 (file)
@@ -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
index caf35cdaf49acbac549824676e476cebfe8f7492..ad8993d3a0ec41582f55d7d02c72aca1933e3341 100644 (file)
@@ -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 (file)
index 0000000..03e363a
--- /dev/null
@@ -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();
+}