Message ID | orr2a82e3r.fsf@lxoliva.fsfla.org |
---|---|
State | New |
Headers | show |
Series | [PR86438] avoid too-long shift in test | expand |
On 12/04/2019 02:42, Alexandre Oliva wrote: > 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. > > Tested on x86_64-linux-gnu, -m64 and -m32. Hopefully Andrew and/or John > David will let me know if it fails to fix the problem on the platforms > in which they've observed it. Thanks for the report, sorry it took me > so long to get to it. I'm going to install this as obvious, unless > there are objections in the next few days. Confirmed; the test now passes for amdgcn. Andrew
diff --git a/gcc/testsuite/gcc.dg/torture/pr86438.c b/gcc/testsuite/gcc.dg/torture/pr86438.c index 3e95515ae6a6..5f8b463f7572 100644 --- a/gcc/testsuite/gcc.dg/torture/pr86438.c +++ b/gcc/testsuite/gcc.dg/torture/pr86438.c @@ -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; }