aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Booth <neil@daikokuya.demon.co.uk>2001-10-26 20:49:48 +0000
committerNeil Booth <neil@gcc.gnu.org>2001-10-26 20:49:48 +0000
commita38b987a8968704c43fa8ca205e6d3d6831ab464 (patch)
treeddb791f710ded9ec9c92ee16b36e20059a119b14
parent30151c7b3b2512424287adf5b20dba1cde81c2e5 (diff)
downloadgcc-a38b987a8968704c43fa8ca205e6d3d6831ab464.zip
gcc-a38b987a8968704c43fa8ca205e6d3d6831ab464.tar.gz
gcc-a38b987a8968704c43fa8ca205e6d3d6831ab464.tar.bz2
c-typeck.c (convert_arguments): When comparing for enumeral type equality, use TYPE_MAIN_VARIANT.
* c-typeck.c (convert_arguments): When comparing for enumeral type equality, use TYPE_MAIN_VARIANT. * gcc.dg/Wconversion.c: New tests. From-SVN: r46559
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-typeck.c3
-rw-r--r--gcc/testsuite/gcc.dg/Wconversion.c20
3 files changed, 28 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3fa7077..6e4d58d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2001-10-26 Neil Booth <neil@daikokuya.demon.co.uk>
+
+ * c-typeck.c (convert_arguments): When comparing for enumeral
+ type equality, use TYPE_MAIN_VARIANT.
+ * gcc.dg/Wconversion.c: New tests.
+
2001-10-26 Kazu Hirata <kazu@hxi.com>
* s390/s390.c: Fix comment typos.
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index aa7e89f..62e7898 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -1651,7 +1651,8 @@ convert_arguments (typelist, values, name, fundecl)
tree type1 = TREE_TYPE (would_have_been);
if (TREE_CODE (type) == ENUMERAL_TYPE
- && type == TREE_TYPE (val))
+ && (TYPE_MAIN_VARIANT (type)
+ == TYPE_MAIN_VARIANT (TREE_TYPE (val))))
/* No warning if function asks for enum
and the actual arg is that enum type. */
;
diff --git a/gcc/testsuite/gcc.dg/Wconversion.c b/gcc/testsuite/gcc.dg/Wconversion.c
new file mode 100644
index 0000000..7cbcb6a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wconversion.c
@@ -0,0 +1,20 @@
+/* Source: PR 137.
+
+ We would not warn about passing an enum, but would warn about
+ passing a enum that was part of an array. TYPE_MAIN_VARIANT was
+ not used in the appropriate place in the warning code. */
+
+/* { dg-do compile } */
+/* { dg-options -Wconversion } */
+
+typedef enum { a } __attribute__((packed)) t;
+void f(t x) {}
+
+int main(void)
+{
+ t x[2], y;
+ f(x[0]); /* { dg-bogus "different width" } */
+ f(y); /* { dg-bogus "different width" } */
+ return 0;
+}
+