PR c/63357
[official-gcc.git] / gcc / testsuite / c-c++-common / Wlogical-op-1.c
blob33d4f3893df239ce81d1228fc1b54642efc3d670
1 /* PR c/63357 */
2 /* { dg-do compile } */
3 /* { dg-options "-Wlogical-op" } */
5 #ifndef __cplusplus
6 # define bool _Bool
7 # define true 1
8 # define false 0
9 #endif
11 extern int bar (void);
12 extern int *p;
13 struct R { int a, b; } S;
15 void
16 andfn (int a, int b)
18 if (a && a) {} /* { dg-warning "logical .and. of equal expressions" } */
19 if (!a && !a) {} /* { dg-warning "logical .and. of equal expressions" } */
20 if (!!a && !!a) {} /* { dg-warning "logical .and. of equal expressions" } */
21 if (a > 0 && a > 0) {} /* { dg-warning "logical .and. of equal expressions" } */
22 if (a < 0 && a < 0) {} /* { dg-warning "logical .and. of equal expressions" } */
23 if (a == 0 && a == 0) {} /* { dg-warning "logical .and. of equal expressions" } */
24 if (a <= 0 && a <= 0) {} /* { dg-warning "logical .and. of equal expressions" } */
25 if (a >= 0 && a >= 0) {} /* { dg-warning "logical .and. of equal expressions" } */
26 if (a == 0 && !(a != 0)) {} /* { dg-warning "logical .and. of equal expressions" } */
28 if (a && a && a) {} /* { dg-warning "logical .and. of equal expressions" } */
29 if ((a + 1) && (a + 1)) {} /* { dg-warning "logical .and. of equal expressions" } */
30 if ((10 * a) && (a * 10)) {} /* { dg-warning "logical .and. of equal expressions" } */
31 if (!!a && a) {} /* { dg-warning "logical .and. of equal expressions" } */
33 if (*p && *p) {} /* { dg-warning "logical .and. of equal expressions" } */
34 if (p[0] && p[0]) {} /* { dg-warning "logical .and. of equal expressions" } */
35 if (S.a && S.a) {} /* { dg-warning "logical .and. of equal expressions" } */
36 if ((bool) a && (bool) a) {} /* { dg-warning "logical .and. of equal expressions" } */
37 if ((unsigned) a && a) {} /* { dg-warning "logical .and. of equal expressions" } */
39 /* Stay quiet here. */
40 if (a && b) {}
41 if (!a && !b) {}
42 if (!!a && !!b) {}
43 if (a > 0 && b > 0) {}
44 if (a < 0 && b < 0) {}
45 if (a == 0 && b == 0) {}
46 if (a <= 0 && b <= 0) {}
47 if (a >= 0 && b >= 0) {}
49 if (a > 0 && a > 1) {}
50 if (a > -2 && a > 1) {}
51 if (a && (short) a) {}
52 if ((char) a && a) {}
53 if (++a && a) {}
54 if (++a && ++a) {}
55 if (a && --a) {}
56 if (a && a / 2) {}
57 if (bar () && bar ()) {}
58 if (p && *p) {}
59 if (p[0] && p[1]) {}
60 if (S.a && S.b) {}
63 void
64 orfn (int a, int b)
66 if (a || a) {} /* { dg-warning "logical .or. of equal expressions" } */
67 if (!a || !a) {} /* { dg-warning "logical .or. of equal expressions" } */
68 if (!!a || !!a) {} /* { dg-warning "logical .or. of equal expressions" } */
69 if (a > 0 || a > 0) {} /* { dg-warning "logical .or. of equal expressions" } */
70 if (a < 0 || a < 0) {} /* { dg-warning "logical .or. of equal expressions" } */
71 if (a == 0 || a == 0) {} /* { dg-warning "logical .or. of equal expressions" } */
72 if (a <= 0 || a <= 0) {} /* { dg-warning "logical .or. of equal expressions" } */
73 if (a >= 0 || a >= 0) {} /* { dg-warning "logical .or. of equal expressions" } */
74 if (a == 0 || !(a != 0)) {} /* { dg-warning "logical .or. of equal expressions" } */
76 if (a || a || a) {} /* { dg-warning "logical .or. of equal expressions" } */
77 if ((a + 1) || (a + 1)) {} /* { dg-warning "logical .or. of equal expressions" } */
78 if ((10 * a) || (a * 10)) {} /* { dg-warning "logical .or. of equal expressions" } */
79 if (!!a || a) {} /* { dg-warning "logical .or. of equal expressions" } */
81 if (*p || *p) {} /* { dg-warning "logical .or. of equal expressions" } */
82 if (p[0] || p[0]) {} /* { dg-warning "logical .or. of equal expressions" } */
83 if (S.a || S.a) {} /* { dg-warning "logical .or. of equal expressions" } */
84 if ((bool) a || (bool) a) {} /* { dg-warning "logical .or. of equal expressions" } */
85 if ((unsigned) a || a) {} /* { dg-warning "logical .or. of equal expressions" } */
87 /* Stay quiet here. */
88 if (a || b) {}
89 if (!a || !b) {}
90 if (!!a || !!b) {}
91 if (a > 0 || b > 0) {}
92 if (a < 0 || b < 0) {}
93 if (a == 0 || b == 0) {}
94 if (a <= 0 || b <= 0) {}
95 if (a >= 0 || b >= 0) {}
97 if (a > 0 || a > 1) {}
98 if (a > -2 || a > 1) {}
99 if (a || (short) a) {}
100 if ((char) a || a) {}
101 if (++a || a) {}
102 if (++a || ++a) {}
103 if (a || --a) {}
104 if (a || a / 2) {}
105 if (bar () || bar ()) {}
106 if (p || *p) {}
107 if (p[0] || p[1]) {}
108 if (S.a || S.b) {}