1  /* { dg-do compile } */
       2  /* { dg-options "-O2" } */
       3  
       4  #include <stdbool.h>
       5  
       6  bool my_uadd_overflow (unsigned char a, unsigned char b, unsigned char *res)
       7  {
       8    return __builtin_add_overflow (a, b, res);
       9  }
      10  
      11  bool my_usub_overflow (unsigned char a, unsigned char b, unsigned char *res)
      12  {
      13    return __builtin_sub_overflow (a, b, res);
      14  }
      15  
      16  bool my_uneg_overflow (unsigned char a, unsigned char *res)
      17  {
      18    return __builtin_sub_overflow (0, a, res);
      19  }
      20  
      21  bool my_add_overflow (signed char a, signed char b, signed char *res)
      22  {
      23    return __builtin_add_overflow (a, b, res);
      24  }
      25  
      26  bool my_sub_overflow (signed char a, signed char b, signed char *res)
      27  {
      28    return __builtin_sub_overflow (a, b, res);
      29  }
      30  
      31  bool my_neg_overflow (signed char a, signed char *res)
      32  {
      33    return __builtin_sub_overflow (0, a, res);
      34  }
      35  
      36  /* { dg-final { scan-assembler-times "add.b" 2 } } */
      37  /* { dg-final { scan-assembler-times "sub.b" 4 } } */
      38  /* { dg-final { scan-assembler-not "cmp.b" } } */