diff options
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/c-typeck.c | 2 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
| -rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/20010605-2.c | 17 |
4 files changed, 27 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a354fe8..86b516d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2001-06-05 Joseph S. Myers <jsm28@cam.ac.uk> + * c-typeck.c (build_c_cast): Use TYPE_MAIN_VARIANT when checking + for casting an aggregate to its own type. Fixes PR c/2735. + +2001-06-05 Joseph S. Myers <jsm28@cam.ac.uk> + * doc/texinfo.tex: Update to version 2001-05-24.08. 2001-06-05 Nathan Sidwell <nathan@codesourcery.com> diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 5705faa..478ec43 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -3719,7 +3719,7 @@ build_c_cast (type, expr) return error_mark_node; } - if (type == TREE_TYPE (value)) + if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value))) { if (pedantic) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 03a8b52..14ca76f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-06-05 Joseph S. Myers <jsm28@cam.ac.uk> + + * gcc.c-torture/compile/20010605-2.c: New test. + 2001-06-04 John David Anglin <dave@hiauly1.hia.nrc.ca> * gcc.c-torture/execute/20010604-1.c: New test. diff --git a/gcc/testsuite/gcc.c-torture/compile/20010605-2.c b/gcc/testsuite/gcc.c-torture/compile/20010605-2.c new file mode 100644 index 0000000..b8d9d58 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20010605-2.c @@ -0,0 +1,17 @@ +/* Origin: Joseph Myers <jsm28@cam.ac.uk>. */ +/* As an extension, GCC allows a struct or union to be cast to its own + type, but failed to allow this when a typedef was involved. + Reported as PR c/2735 by <cowan@ccil.org>. */ +union u { int i; }; +typedef union u uu; +union u a; +uu b; + +void +foo (void) +{ + a = (union u) b; + a = (uu) b; + b = (union u) a; + b = (uu) a; +} |
