aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJoseph Myers <jsm28@cam.ac.uk>2001-06-05 11:16:57 +0100
committerJoseph Myers <jsm28@gcc.gnu.org>2001-06-05 11:16:57 +0100
commitf375b7a70574ae0e5900a3bfab24f4e8e2edc920 (patch)
tree1fd1975b4d0c77798a8a119b0e636835eb760457 /gcc
parentc90efa7a1c9023899bc6b832a3122c0a9c932e39 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/c-typeck.c2
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20010605-2.c17
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;
+}