From: Senthil Kumar Selvaraj Date: Wed, 16 Nov 2016 09:28:40 +0000 (+0000) Subject: Fix bogus failure of Wlogical-op-1.c for avr X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4786fabecc8559f04eed93d3d49738680b52536b;p=gcc.git Fix bogus failure of Wlogical-op-1.c for avr The test assumes short is always smaller than int, and therefore does not expect a warning when the logical operands are of type short and int. This isn't true for the avr - shorts and ints are of the same size, and therefore the warning triggers for the above case also. Fix by explicitly typedef'ing __INT32_TYPE for int and __INT16_TYPE__ for short if the target's int size is less than 4 bytes. gcc/testsuite/ 2016-11-16 Senthil Kumar Selvaraj * c-c++-common/Wlogical-op-1.c: Use __INT{16,32}_TYPE__ instead of {short,int} if __SIZEOF_INT__ is less than 4 bytes. From-SVN: r242472 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3da84c6a804..00f1166b50e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-11-16 Senthil Kumar Selvaraj + + * c-c++-common/Wlogical-op-1.c: Use __INT{16,32}_TYPE__ instead + of {short,int} if __SIZEOF_INT__ is less than 4 bytes. + 2016-11-16 Richard Biener PR tree-optimization/78348 diff --git a/gcc/testsuite/c-c++-common/Wlogical-op-1.c b/gcc/testsuite/c-c++-common/Wlogical-op-1.c index 33d4f3893df..c5f992a4007 100644 --- a/gcc/testsuite/c-c++-common/Wlogical-op-1.c +++ b/gcc/testsuite/c-c++-common/Wlogical-op-1.c @@ -8,12 +8,22 @@ # define false 0 #endif -extern int bar (void); -extern int *p; -struct R { int a, b; } S; +#if __SIZEOF_INT__ < 4 + __extension__ typedef __INT32_TYPE__ int32_t; + __extension__ typedef __UINT32_TYPE__ uint32_t; + __extension__ typedef __INT16_TYPE__ int16_t; +#else + typedef int int32_t; + typedef unsigned int uint32_t; + typedef short int16_t; +#endif + +extern int32_t bar (void); +extern int32_t *p; +struct R { int32_t a, b; } S; void -andfn (int a, int b) +andfn (int32_t a, int32_t b) { if (a && a) {} /* { dg-warning "logical .and. of equal expressions" } */ if (!a && !a) {} /* { dg-warning "logical .and. of equal expressions" } */ @@ -34,7 +44,7 @@ andfn (int a, int b) if (p[0] && p[0]) {} /* { dg-warning "logical .and. of equal expressions" } */ if (S.a && S.a) {} /* { dg-warning "logical .and. of equal expressions" } */ if ((bool) a && (bool) a) {} /* { dg-warning "logical .and. of equal expressions" } */ - if ((unsigned) a && a) {} /* { dg-warning "logical .and. of equal expressions" } */ + if ((uint32_t) a && a) {} /* { dg-warning "logical .and. of equal expressions" } */ /* Stay quiet here. */ if (a && b) {} @@ -48,7 +58,7 @@ andfn (int a, int b) if (a > 0 && a > 1) {} if (a > -2 && a > 1) {} - if (a && (short) a) {} + if (a && (int16_t) a) {} if ((char) a && a) {} if (++a && a) {} if (++a && ++a) {} @@ -61,7 +71,7 @@ andfn (int a, int b) } void -orfn (int a, int b) +orfn (int32_t a, int32_t b) { if (a || a) {} /* { dg-warning "logical .or. of equal expressions" } */ if (!a || !a) {} /* { dg-warning "logical .or. of equal expressions" } */ @@ -82,7 +92,7 @@ orfn (int a, int b) if (p[0] || p[0]) {} /* { dg-warning "logical .or. of equal expressions" } */ if (S.a || S.a) {} /* { dg-warning "logical .or. of equal expressions" } */ if ((bool) a || (bool) a) {} /* { dg-warning "logical .or. of equal expressions" } */ - if ((unsigned) a || a) {} /* { dg-warning "logical .or. of equal expressions" } */ + if ((uint32_t) a || a) {} /* { dg-warning "logical .or. of equal expressions" } */ /* Stay quiet here. */ if (a || b) {} @@ -96,7 +106,7 @@ orfn (int a, int b) if (a > 0 || a > 1) {} if (a > -2 || a > 1) {} - if (a || (short) a) {} + if (a || (int16_t) a) {} if ((char) a || a) {} if (++a || a) {} if (++a || ++a) {}