diff options
author | Volker Reichelt <v.reichelt@netcologne.de> | 2008-03-30 21:58:43 +0000 |
---|---|---|
committer | Volker Reichelt <reichelt@gcc.gnu.org> | 2008-03-30 21:58:43 +0000 |
commit | 39ffbac9119e258b475386c959ff50af31a270b4 (patch) | |
tree | 724285c052db9e33f0f2eea4f82cf39b07d6021b | |
parent | 23594c97b3ec375024937db9491f82c0f07e1b4b (diff) | |
download | gcc-39ffbac9119e258b475386c959ff50af31a270b4.zip gcc-39ffbac9119e258b475386c959ff50af31a270b4.tar.gz gcc-39ffbac9119e258b475386c959ff50af31a270b4.tar.bz2 |
re PR c/35748 (ICE with cast to invalid union)
PR c/35748
* c-typeck.c (build_c_cast): Skip invalid fields in unions.
* gcc.dg/union-cast-4.c: New test.
From-SVN: r133737
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c-typeck.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/union-cast-4.c | 8 |
4 files changed, 21 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a0e29cc..d278b6c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-03-30 Volker Reichelt <v.reichelt@netcologne.de> + + PR c/35748 + * c-typeck.c (build_c_cast): Skip invalid fields in unions. + 2008-03-30 H.J. Lu <hongjiu.lu@intel.com> PR target/35757 diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 4d476c5..a457f6a 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -3628,8 +3628,9 @@ build_c_cast (tree type, tree expr) tree field; for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) - if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)), - TYPE_MAIN_VARIANT (TREE_TYPE (value)))) + if (TREE_TYPE (field) != error_mark_node + && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)), + TYPE_MAIN_VARIANT (TREE_TYPE (value)))) break; if (field) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3f8205a..e7e4b30 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-03-30 Volker Reichelt <v.reichelt@netcologne.de> + + PR c/35748 + * gcc.dg/union-cast-4.c: New test. + 2008-03-30 H.J. Lu <hongjiu.lu@intel.com> PR target/35757 diff --git a/gcc/testsuite/gcc.dg/union-cast-4.c b/gcc/testsuite/gcc.dg/union-cast-4.c new file mode 100644 index 0000000..a1c98ba --- /dev/null +++ b/gcc/testsuite/gcc.dg/union-cast-4.c @@ -0,0 +1,8 @@ +/* PR c/35748 */ + +union U { void x[1]; }; /* { dg-error "array of voids" } */ + +void foo() +{ + (union U)0; /* { dg-error "type not present" } */ +} |