(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
ftrapv-2.c
       1  /* Copyright (C) 2004 Free Software Foundation.
       2  
       3     PR other/18665
       4     Verify that -ftrapv doesn't produce bogus results
       5     on 64-bit platforms.
       6  
       7     Written by Eric Botcazou  */
       8  
       9  /* { dg-do run } */
      10  /* { dg-options "-ftrapv" } */
      11  /* { dg-require-effective-target trapping } */
      12  
      13  extern void abort(void);
      14  extern int abs(int);
      15  extern long labs(long);
      16  
      17  int __attribute__((noinline))
      18  iabsv(int a)
      19  {
      20    return abs(a);
      21  }
      22  
      23  int __attribute__((noinline))
      24  iaddv(int a, int b)
      25  {
      26    return a + b;
      27  }
      28  
      29  int __attribute__((noinline))
      30  isubv(int a, int b)
      31  {
      32    return a - b;
      33  }
      34  
      35  int __attribute__((noinline))
      36  imulv(int a, int b)
      37  {
      38    return a * b;
      39  }
      40  
      41  int __attribute__((noinline))
      42  inegv(int a)
      43  {
      44    return -a;
      45  }
      46  
      47  long __attribute__((noinline))
      48  labsv(long a)
      49  {
      50    return labs(a);
      51  }
      52  
      53  long __attribute__((noinline))
      54  laddv(long a, long b)
      55  {
      56    return a + b;
      57  }
      58  
      59  long __attribute__((noinline))
      60  lsubv(long a, long b)
      61  {
      62    return a - b;
      63  }
      64  
      65  long __attribute__((noinline))
      66  lmulv(long a, long b)
      67  {
      68    return a * b;
      69  }
      70  
      71  long __attribute__((noinline))
      72  lnegv(long a)
      73  {
      74    return -a;
      75  }
      76  
      77  int main(void)
      78  {
      79    if (iabsv (-1) != 1)
      80      abort ();
      81  
      82    if (iaddv (2,-3) != -1)
      83      abort ();
      84  
      85    if (isubv (2,3) != -1)
      86      abort ();
      87  
      88    if (imulv (-2,3) != -6)
      89      abort ();
      90  
      91    if (inegv (-1) != 1)
      92      abort ();
      93  
      94    if (labsv (-1L) != 1L)
      95      abort ();
      96  
      97    if (laddv (2L,-3L) != -1L)
      98      abort ();
      99  
     100    if (lsubv (2L,3L) != -1L)
     101      abort ();
     102  
     103    if (lmulv (-2L,3L) != -6L)
     104      abort ();
     105  
     106    if (lnegv (-1L) != 1L)
     107      abort ();
     108  
     109    return 0;
     110  }