[testsuite] Fix pr69941.c test failure for avr

Submitted by Senthil Kumar Selvaraj on Oct. 5, 2016, 5:16 p.m.

Details

Message ID 87y4224sy3.fsf@atmel.com
State New
Headers show

Commit Message

Senthil Kumar Selvaraj Oct. 5, 2016, 5:16 p.m.
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.selvaraj@atmel.com>

        * gcc.dg/torture/pr69941.c: Use __INT32_TYPE__ instead
        of int if __SIZEOF_INT__ is less than 4 bytes.

Patch hide | download patch | download mbox

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; }