(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr30315.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O2" } */
       3  /* { dg-final { scan-assembler-not "cmp" } } */
       4  
       5  extern void abort (void);
       6  int c;
       7  
       8  #define PLUSCC1(T, t, C)	\
       9  T pluscc##t##C (T a, T b)	\
      10  {	\
      11    T sum = a + b;	\
      12    if (sum < C)		\
      13      abort ();		\
      14    return sum;		\
      15  }
      16  #define PLUSCC(T, t) PLUSCC1(T, t, a) PLUSCC1(T, t, b)
      17  
      18  #define INCCC1(T, t, C)	\
      19  T inccc##t##C (T a, T b)	\
      20  {	\
      21    T sum = a + b;	\
      22    if (sum < C)		\
      23      c ++;		\
      24    return sum;		\
      25  }
      26  #define INCCC(T, t) INCCC1(T, t, a) INCCC1(T, t, b)
      27  
      28  #define PLUSCCONLY1(T, t, C)	\
      29  void pluscconly##t##C (T a, T b)	\
      30  {	\
      31    T sum = a + b;	\
      32    if (sum < C)		\
      33      abort ();		\
      34  }
      35  #define PLUSCCONLY(T, t) PLUSCCONLY1(T, t, a) PLUSCCONLY1(T, t, b)
      36  
      37  #define TEST(T, t)	\
      38    PLUSCC(T, t)		\
      39    PLUSCCONLY(T, t)	\
      40    INCCC(T, t)
      41  
      42  TEST (unsigned long,  l)
      43  TEST (unsigned int,   i)
      44  TEST (unsigned short, s) 
      45  TEST (unsigned char,  c)
      46  
      47  #define PLUSCCZEXT(C)	\
      48  unsigned long pluscczext##C (unsigned int a, unsigned int b)	\
      49  {	\
      50    unsigned int sum = a + b;	\
      51    if (sum < C)		\
      52      abort ();		\
      53    return sum;		\
      54  }
      55  
      56  PLUSCCZEXT(a)
      57  PLUSCCZEXT(b)