[PR86438] avoid too-long shift in test
authorAlexandre Oliva <aoliva@redhat.com>
Tue, 16 Apr 2019 12:44:46 +0000 (12:44 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Tue, 16 Apr 2019 12:44:46 +0000 (12:44 +0000)
The test fell back to long long and long when __int128 is not
available, but it assumed sizeof(long) < sizeof(long long) because of
a shift count that would be out of range for a long long if their
widths are the same.  Fixed by splitting it up into two shifts.

for  gcc/testsuite/ChangeLog

PR rtl-optimization/86438
* gcc.dg/torture/pr86438.c: Split up too-wide shift.

From-SVN: r270388

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr86438.c

index decbf085c4c173fc9d426fe548ed8f43c16d99f9..7dc4f7411b6b84fe0cc8ebf757db8464224c1e16 100644 (file)
@@ -1,3 +1,8 @@
+2019-04-16  Alexandre Oliva <aoliva@redhat.com>
+
+       PR rtl-optimization/86438
+       * gcc.dg/torture/pr86438.c: Split up too-wide shift.
+
 2019-04-16  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/90096
index 3e95515ae6a6b4df66cfb0b4ce9ddfb96a130d1f..5f8b463f75725703ca96ade55a48693be046c672 100644 (file)
@@ -24,6 +24,6 @@ main (void)
   u64 d = (g ? 5 : 4);
   u32 f = __builtin_sub_overflow_p (d, (u128) d, (u64) 0);
   u128 x = g + f + d;
-  check (x >> (sizeof (u64) * __CHAR_BIT__), x);
+  check ((x >> 1) >> (sizeof (u64) * __CHAR_BIT__ - 1), x);
   return 0;
 }