div1 (x) signed char x; { return x / -1; } div2 (x) signed short x; { return x / -1; } div3 (x, y) signed char x; signed char y; { return x / y; } div4 (x, y) signed short x; signed short y; { return x / y; } mod1 (x) signed char x; { return x % -1; } mod2 (x) signed short x; { return x % -1; } mod3 (x, y) signed char x; signed char y; { return x % y; } mod4 (x, y) signed short x; signed short y; { return x % y; } main () { if (div1 (-(1 << 7)) != 1 << 7) abort (); if (div2 (-(1 << 15)) != 1 << 15) abort (); if (div3 (-(1 << 7), -1) != 1 << 7) abort (); if (div4 (-(1 << 15), -1) != 1 << 15) abort (); if (mod1 (-(1 << 7)) != 0) abort (); if (mod2 (-(1 << 15)) != 0) abort (); if (mod3 (-(1 << 7), -1) != 0) abort (); if (mod4 (-(1 << 15), -1) != 0) abort (); exit (0); }