div1(signed char x)1 div1 (signed char x)
2 {
3   return x / -1;
4 }
5 
div2(signed short x)6 div2 (signed short x)
7 {
8   return x / -1;
9 }
10 
div3(signed char x,signed char y)11 div3 (signed char x, signed char y)
12 {
13   return x / y;
14 }
15 
div4(signed short x,signed short y)16 div4 (signed short x, signed short y)
17 {
18   return x / y;
19 }
20 
mod1(signed char x)21 mod1 (signed char x)
22 {
23   return x % -1;
24 }
25 
mod2(signed short x)26 mod2 (signed short x)
27 {
28   return x % -1;
29 }
30 
mod3(signed char x,signed char y)31 mod3 (signed char x, signed char y)
32 {
33   return x % y;
34 }
35 
mod4(signed short x,signed short y)36 mod4 (signed short x, signed short y)
37 {
38   return x % y;
39 }
40 
41 signed long
mod5(signed long x,signed long y)42 mod5 (signed long x, signed long y)
43 {
44   return x % y;
45 }
46 
47 unsigned long
mod6(unsigned long x,unsigned long y)48 mod6 (unsigned long x, unsigned long y)
49 {
50   return x % y;
51 }
52 
main()53 main ()
54 {
55   if (div1 (-(1 << 7)) != 1 << 7)
56     abort ();
57   if (div2 (-(1 << 15)) != 1 << 15)
58     abort ();
59   if (div3 (-(1 << 7), -1) != 1 << 7)
60     abort ();
61   if (div4 (-(1 << 15), -1) != 1 << 15)
62     abort ();
63   if (mod1 (-(1 << 7)) != 0)
64     abort ();
65   if (mod2 (-(1 << 15)) != 0)
66     abort ();
67   if (mod3 (-(1 << 7), -1) != 0)
68     abort ();
69   if (mod4 (-(1 << 15), -1) != 0)
70     abort ();
71   if (mod5 (0x50000000, 2) != 0)
72     abort ();
73   if (mod6 (0x50000000, 2) != 0)
74     abort ();
75 
76   exit (0);
77 }
78