blob: 3a2c62b15e33569ff991dfa67cfd5f99400ff003 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
/* bug-2822.c
A division optimization evaluated operands to double precision only, thus losing information on long long variables.
*/
#include <testfwk.h>
#include <limits.h>
unsigned long long f(void)
{
unsigned long long left = (ULLONG_MAX - 2);
return(left / (ULLONG_MAX - 3));
}
unsigned long long g(void)
{
unsigned long long left = (ULLONG_MAX - 2);
return(left % (ULLONG_MAX - 3));
}
unsigned long long fs(void)
{
unsigned long long left = (LLONG_MAX - 2);
return(left / (LLONG_MAX - 3));
}
unsigned long long gs(void)
{
unsigned long long left = (LLONG_MAX - 2);
return(left % (LLONG_MAX - 3));
}
void testBug(void)
{
ASSERT (f() == (ULLONG_MAX - 2) / (ULLONG_MAX - 3));
ASSERT (g() == (ULLONG_MAX - 2) % (ULLONG_MAX - 3));
ASSERT (fs() == (LLONG_MAX - 2) / (LLONG_MAX - 3));
ASSERT (gs() == (LLONG_MAX - 2) % (LLONG_MAX - 3));
}
|