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 tst_warn(struct Vals * p)32void 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 tst_no_warn(struct Vals * p)46void 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 } 58