Hi, The below patch fixes gcc.dg/torture/pr69941.c to pass for int size != 32 targets like avr.
For the avr target, ints are 16 bits wide. VRP concludes that a right shift by 9 followed by an equality comparison to 0x74 can never be true, and ends up eliminating the conditional. The code ends up unconditionally calling __builtin_abort and obviously fails when run. The patch fixes the testcase to use __INT32_TYPE__ (via a typedef) if __SIZEOF_INT__ is less than 4. Regtested with both avr and x86_64, the test passes with both targets. Regards Senthil gcc/testsuite/ChangeLog 2016-10-05 Senthil Kumar Selvaraj <senthil_kumar.selva...@atmel.com> * gcc.dg/torture/pr69941.c: Use __INT32_TYPE__ instead of int if __SIZEOF_INT__ is less than 4 bytes. Index: gcc/testsuite/gcc.dg/torture/pr69941.c =================================================================== --- gcc/testsuite/gcc.dg/torture/pr69941.c (revision 240781) +++ gcc/testsuite/gcc.dg/torture/pr69941.c (working copy) @@ -1,11 +1,17 @@ /* { dg-do run } */ + +#if __SIZEOF_INT__ < 4 +__extension__ typedef __INT32_TYPE__ int32_t; +#else +typedef int int32_t; +#endif int a = 0; int b = 0; int c = 0; -int e = 0; +int32_t e = 0; int f = 0; -int *g = &e; +int32_t *g = &e; int fn1() { return b ? a : b; }