diff options
author | Neil Booth <neil@daikokuya.demon.co.uk> | 2001-10-26 20:49:48 +0000 |
---|---|---|
committer | Neil Booth <neil@gcc.gnu.org> | 2001-10-26 20:49:48 +0000 |
commit | a38b987a8968704c43fa8ca205e6d3d6831ab464 (patch) | |
tree | ddb791f710ded9ec9c92ee16b36e20059a119b14 | |
parent | 30151c7b3b2512424287adf5b20dba1cde81c2e5 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-typeck.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Wconversion.c | 20 |
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; +} + |