int errflag; long long f (long long x, long long y) { long long r; errflag = 0; r = x + y; if (x >= 0) { if ((y < 0) || (r >= 0)) return r; } else { if ((y > 0) || (r < 0)) return r; } errflag = 1; return 0; } main () { f (0, 0); if (errflag) abort (); f (1, -1); if (errflag) abort (); f (-1, 1); if (errflag) abort (); f (0x8000000000000000LL, 0x8000000000000000LL); if (!errflag) abort (); f (0x8000000000000000LL, -1LL); if (!errflag) abort (); f (0x7fffffffffffffffLL, 0x7fffffffffffffffLL); if (!errflag) abort (); f (0x7fffffffffffffffLL, 1LL); if (!errflag) abort (); f (0x7fffffffffffffffLL, 0x8000000000000000LL); if (errflag) abort (); exit (0); }