comparison gcc/testsuite/gcc.dg/Wabsolute-value.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
comparison
equal deleted inserted replaced
131:84e7813d76e9 145:1830386684a0
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 }