(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
Wabsolute-value.c
       1  /* PR c/89425 - -Wabsolute-value warns in dead subexpressions
       2     { dg-do compile }
       3     { dg-options "-Wabsolute-value -ftrack-macro-expansion=0" } */
       4  
       5  struct Vals
       6  {
       7    signed char sc;
       8    signed short ss;
       9    signed int si;
      10    signed long sl;
      11    signed long long sll;
      12  
      13    unsigned char uc;
      14    unsigned short us;
      15    unsigned int ui;
      16    unsigned long ul;
      17    unsigned long long ull;
      18  
      19    float f;
      20    double d;
      21    long double ld;
      22  };
      23  
      24  #define abs(x)     __builtin_abs (x)
      25  #define labs(x)    __builtin_labs (x)
      26  #define llabs(x)   __builtin_llabs (x)
      27  
      28  #define fabsf(x)   __builtin_fabsf (x)
      29  #define fabs(x)    __builtin_fabs (x)
      30  
      31  
      32  void tst_warn (struct Vals *p)
      33  {
      34    /* Verify that "-Wabsolute-value is issued for subexpressions
      35       that are evaluated.  */
      36  
      37    p->uc =  0 ? abs (p->sc) : abs (p->uc);         /* { dg-warning "\\\[-Wabsolute-value]" } */
      38    p->us =  0 ? abs (p->ss) : abs (p->us);         /* { dg-warning "\\\[-Wabsolute-value]" } */
      39    p->ui =  0 ? abs (p->si) : abs (p->ui);         /* { dg-warning "\\\[-Wabsolute-value]" } */
      40    p->ul =  0 ? labs (p->sl) : labs (p->ul);       /* { dg-warning "\\\[-Wabsolute-value]" } */
      41    p->ull = 0 ? llabs (p->sll) : llabs (p->ull);   /* { dg-warning "\\\[-Wabsolute-value]" } */
      42  
      43    p->d   = 0 ? fabs (p->d) : fabsf (p->d);        /* { dg-warning "\\\[-Wabsolute-value]" } */
      44  }
      45  
      46  void tst_no_warn (struct Vals *p)
      47  {
      48    /* Verify that "-Wabsolute-value is not issued for subexpressions
      49       that are not evaluated.  */
      50  
      51    p->uc =  0 ? abs (p->uc) : abs (p->sc);
      52    p->us =  0 ? abs (p->us) : abs (p->ss);
      53    p->ui =  0 ? abs (p->ui) : abs (p->si);
      54    p->ul =  0 ? labs (p->ul) : labs (p->sl);
      55    p->ull = 0 ? llabs (p->ull) : llabs (p->sll);
      56    p->d   = 0 ? fabsf (p->d) : fabs (p->d);
      57  }