diff options
author | Joseph Myers <jsm28@cam.ac.uk> | 2001-06-05 11:16:57 +0100 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2001-06-05 11:16:57 +0100 |
commit | f375b7a70574ae0e5900a3bfab24f4e8e2edc920 (patch) | |
tree | 1fd1975b4d0c77798a8a119b0e636835eb760457 /gcc | |
parent | c90efa7a1c9023899bc6b832a3122c0a9c932e39 (diff) | |
download | gcc-f375b7a70574ae0e5900a3bfab24f4e8e2edc920.zip gcc-f375b7a70574ae0e5900a3bfab24f4e8e2edc920.tar.gz gcc-f375b7a70574ae0e5900a3bfab24f4e8e2edc920.tar.bz2 |
re PR c/2735 (can't cast a union type defined by a typedef to itself)
* c-typeck.c (build_c_cast): Use TYPE_MAIN_VARIANT when checking
for casting an aggregate to its own type. Fixes PR c/2735.
testsuite:
* gcc.c-torture/compile/20010605-2.c: New test.
From-SVN: r42900
Diffstat (limited to 'gcc')
-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; +} |