mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-08 05:56:42 +08:00
divconst-2.c: Rewrite to check for standards-compliant result rather than specific constants.
* execute/divconst-2.c: Rewrite to check for standards-compliant result rather than specific constants. Put test-values in array. From-SVN: r32615
This commit is contained in:
parent
787ccee012
commit
82ec9e7829
@ -1,3 +1,8 @@
|
||||
Fri Mar 10 01:15:19 2000 Hans-Peter Nilsson <hp@bitrange.com>
|
||||
|
||||
* execute/divconst-2.c: Rewrite to check for standards-compliant
|
||||
result rather than specific constants. Put test-values in array.
|
||||
|
||||
Sun Mar 5 23:25:12 2000 Hans-Peter Nilsson <hp@bitrange.com>
|
||||
|
||||
* execute/20000224-1.c (main): Expected return-value is 1, not
|
||||
|
@ -4,9 +4,36 @@ f (long x)
|
||||
return x / (-0x7fffffffL - 1L);
|
||||
}
|
||||
|
||||
long
|
||||
r (long x)
|
||||
{
|
||||
return x % (-0x7fffffffL - 1L);
|
||||
}
|
||||
|
||||
/* Since we have a negative divisor, this equation must hold for the
|
||||
results of / and %; no specific results are guaranteed. */
|
||||
long
|
||||
std_eqn (long num, long denom, long quot, long rem)
|
||||
{
|
||||
/* For completeness, a check for "ABS (rem) < ABS (denom)" belongs here,
|
||||
but causes trouble on 32-bit machines and isn't worthwhile. */
|
||||
return quot * (-0x7fffffffL - 1L) + rem == num;
|
||||
}
|
||||
|
||||
long nums[] =
|
||||
{
|
||||
-1L, 0x7fffffffL, -0x7fffffffL - 1L
|
||||
};
|
||||
|
||||
main ()
|
||||
{
|
||||
if (f (-1L) != 0L || f (0x7fffffffL) != 0L || f (-0x7fffffffL - 1L) != 1l)
|
||||
abort ();
|
||||
int i;
|
||||
|
||||
for (i = 0;
|
||||
i < sizeof (nums) / sizeof (nums[0]);
|
||||
i++)
|
||||
if (std_eqn (nums[i], -0x7fffffffL - 1L, f (nums[i]), r (nums[i])) == 0)
|
||||
abort ();
|
||||
|
||||
exit (0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user