From: Volker Reichelt Date: Mon, 12 Jun 2006 21:39:10 +0000 (+0000) Subject: re PR target/27421 (ICE with invalid array in struct) X-Git-Tag: releases/gcc-4.0.4~619 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e29d2b51b31902c528803d38119cd87f4bfcd500;p=thirdparty%2Fgcc.git re PR target/27421 (ICE with invalid array in struct) PR target/27421 * config/i386/i386.c (classify_argument): Skip fields with invalid types in unions. * gcc.dg/union-3.c: New test. From-SVN: r114584 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d1fdb162280d..c7e0d4651f0c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-06-12 Volker Reichelt + + PR target/27421 + * config/i386/i386.c (classify_argument): Skip fields with invalid + types in unions. + 2006-06-06 Roger Sayle PR target/26223 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 209e8363b9b5..395d0be96333 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -2345,6 +2345,10 @@ classify_argument (enum machine_mode mode, tree type, if (TREE_CODE (field) == FIELD_DECL) { int num; + + if (TREE_TYPE (field) == error_mark_node) + continue; + num = classify_argument (TYPE_MODE (TREE_TYPE (field)), TREE_TYPE (field), subclasses, bit_offset); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6ae8ee10960b..e97f71dd586a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2006-06-12 Volker Reichelt + PR target/27421 + * gcc.dg/union-3.c: New test. + PR c++/27933 * g++.dg/lookup/using15.C: New test. diff --git a/gcc/testsuite/gcc.dg/union-3.c b/gcc/testsuite/gcc.dg/union-3.c new file mode 100644 index 000000000000..3e89b755afad --- /dev/null +++ b/gcc/testsuite/gcc.dg/union-3.c @@ -0,0 +1,10 @@ +/* PR target/27421 */ +/* { dg-do compile } */ + +union A +{ + int i; + void x[1]; /* { dg-error "array of voids" } */ +}; + +void foo(union A a) {}