From: Neil Booth Date: Fri, 26 Oct 2001 20:49:48 +0000 (+0000) Subject: c-typeck.c (convert_arguments): When comparing for enumeral type equality, use TYPE_M... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a38b987a8968704c43fa8ca205e6d3d6831ab464;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3fa70771711..6e4d58dfe4b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2001-10-26 Neil Booth + + * 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 * s390/s390.c: Fix comment typos. diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index aa7e89f7f2a..62e7898d9a1 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 00000000000..7cbcb6a4461 --- /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; +} +