58 lines
1.7 KiB
C
58 lines
1.7 KiB
C
/* PR c/89425 - -Wabsolute-value warns in dead subexpressions
|
|
{ dg-do compile }
|
|
{ dg-options "-Wabsolute-value -ftrack-macro-expansion=0" } */
|
|
|
|
struct Vals
|
|
{
|
|
signed char sc;
|
|
signed short ss;
|
|
signed int si;
|
|
signed long sl;
|
|
signed long long sll;
|
|
|
|
unsigned char uc;
|
|
unsigned short us;
|
|
unsigned int ui;
|
|
unsigned long ul;
|
|
unsigned long long ull;
|
|
|
|
float f;
|
|
double d;
|
|
long double ld;
|
|
};
|
|
|
|
#define abs(x) __builtin_abs (x)
|
|
#define labs(x) __builtin_labs (x)
|
|
#define llabs(x) __builtin_llabs (x)
|
|
|
|
#define fabsf(x) __builtin_fabsf (x)
|
|
#define fabs(x) __builtin_fabs (x)
|
|
|
|
|
|
void tst_warn (struct Vals *p)
|
|
{
|
|
/* Verify that "-Wabsolute-value is issued for subexpressions
|
|
that are evaluated. */
|
|
|
|
p->uc = 0 ? abs (p->sc) : abs (p->uc); /* { dg-warning "\\\[-Wabsolute-value]" } */
|
|
p->us = 0 ? abs (p->ss) : abs (p->us); /* { dg-warning "\\\[-Wabsolute-value]" } */
|
|
p->ui = 0 ? abs (p->si) : abs (p->ui); /* { dg-warning "\\\[-Wabsolute-value]" } */
|
|
p->ul = 0 ? labs (p->sl) : labs (p->ul); /* { dg-warning "\\\[-Wabsolute-value]" } */
|
|
p->ull = 0 ? llabs (p->sll) : llabs (p->ull); /* { dg-warning "\\\[-Wabsolute-value]" } */
|
|
|
|
p->d = 0 ? fabs (p->d) : fabsf (p->d); /* { dg-warning "\\\[-Wabsolute-value]" } */
|
|
}
|
|
|
|
void tst_no_warn (struct Vals *p)
|
|
{
|
|
/* Verify that "-Wabsolute-value is not issued for subexpressions
|
|
that are not evaluated. */
|
|
|
|
p->uc = 0 ? abs (p->uc) : abs (p->sc);
|
|
p->us = 0 ? abs (p->us) : abs (p->ss);
|
|
p->ui = 0 ? abs (p->ui) : abs (p->si);
|
|
p->ul = 0 ? labs (p->ul) : labs (p->sl);
|
|
p->ull = 0 ? llabs (p->ull) : llabs (p->sll);
|
|
p->d = 0 ? fabsf (p->d) : fabs (p->d);
|
|
}
|