1  /* { dg-additional-options "-fwrapv" } */
       2  int errflag;
       3  
       4  long long
       5  f (long long x, long long y)
       6  {
       7    long long r;
       8  
       9    errflag = 0;
      10    r = x + y;
      11    if (x >= 0)
      12      {
      13        if ((y < 0) || (r >= 0))
      14  	return r;
      15      }
      16    else
      17      {
      18        if ((y > 0) || (r < 0))
      19  	return r;
      20      }
      21    errflag = 1;
      22    return 0;
      23  }
      24  
      25  main ()
      26  {
      27    f (0, 0);
      28    if (errflag)
      29      abort ();
      30  
      31    f (1, -1);
      32    if (errflag)
      33      abort ();
      34  
      35    f (-1, 1);
      36    if (errflag)
      37      abort ();
      38  
      39    f (0x8000000000000000LL, 0x8000000000000000LL);
      40    if (!errflag)
      41      abort ();
      42  
      43    f (0x8000000000000000LL, -1LL);
      44    if (!errflag)
      45      abort ();
      46  
      47    f (0x7fffffffffffffffLL, 0x7fffffffffffffffLL);
      48    if (!errflag)
      49      abort ();
      50  
      51    f (0x7fffffffffffffffLL, 1LL);
      52    if (!errflag)
      53      abort ();
      54  
      55    f (0x7fffffffffffffffLL, 0x8000000000000000LL);
      56    if (errflag)
      57      abort ();
      58  
      59    exit (0);
      60  }