annotate gcc/testsuite/c-c++-common/Wbool-compare-1.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* PR c++/62153 */
kono
parents:
diff changeset
2 /* { dg-do compile } */
kono
parents:
diff changeset
3 /* { dg-options "-Wall" } */
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 #ifndef __cplusplus
kono
parents:
diff changeset
6 # define bool _Bool
kono
parents:
diff changeset
7 # define true 1
kono
parents:
diff changeset
8 # define false 0
kono
parents:
diff changeset
9 #endif
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 extern bool foo (void);
kono
parents:
diff changeset
12 bool r;
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 enum { E = 4 };
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 void
kono
parents:
diff changeset
17 fn1 (bool b)
kono
parents:
diff changeset
18 {
kono
parents:
diff changeset
19 r = b == 2; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
20 r = b != 2; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
21 r = b < 2; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
22 r = b > 2; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
23 r = b <= 2; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
24 r = b >= 2; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 r = b == -1; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
27 r = b != -1; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
28 r = b < -1; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
29 r = b > -1; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
30 r = b <= -1; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
31 r = b >= -1; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 r = foo () == 2; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
34 r = foo () != 2; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
35 r = foo () < 2; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
36 r = foo () > 2; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
37 r = foo () <= 2; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
38 r = foo () >= 2; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 r = b == E; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
41 r = b != E; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
42 r = b < E; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
43 r = b > E; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
44 r = b <= E; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
45 r = b >= E; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 /* Swap LHS and RHS. */
kono
parents:
diff changeset
48 r = 2 == b; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
49 r = 2 != b; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
50 r = 2 < b; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
51 r = 2 > b; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
52 r = 2 <= b; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
53 r = 2 >= b; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 r = -1 == b; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
56 r = -1 != b; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
57 r = -1 < b; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
58 r = -1 > b; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
59 r = -1 <= b; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
60 r = -1 >= b; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 r = E == b; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
63 r = E != b; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
64 r = E < b; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
65 r = E > b; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
66 r = E <= b; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
67 r = E >= b; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
68
kono
parents:
diff changeset
69 /* These are of course fine. */
kono
parents:
diff changeset
70 r = b == false;
kono
parents:
diff changeset
71 r = b != false;
kono
parents:
diff changeset
72 r = b == true;
kono
parents:
diff changeset
73 r = b != true;
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 r = b <= false;
kono
parents:
diff changeset
76 r = b > false;
kono
parents:
diff changeset
77 r = b < true;
kono
parents:
diff changeset
78 r = b >= true;
kono
parents:
diff changeset
79 }
kono
parents:
diff changeset
80
kono
parents:
diff changeset
81 void
kono
parents:
diff changeset
82 fn2 (int i1, int i2)
kono
parents:
diff changeset
83 {
kono
parents:
diff changeset
84 r = (i1 == i2) == 2; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
85 r = (i1 == i2) != 2; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
86 r = (i1 == i2) < 2; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
87 r = (i1 == i2) > 2; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
88 r = (i1 == i2) <= 2; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
89 r = (i1 == i2) >= 2; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 r = (i1 == i2) == -1; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
92 r = (i1 == i2) != -1; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
93 r = (i1 == i2) < -1; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
94 r = (i1 == i2) > -1; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
95 r = (i1 == i2) <= -1; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
96 r = (i1 == i2) >= -1; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
97
kono
parents:
diff changeset
98 r = (i1 == i2) == E; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
99 r = (i1 == i2) != E; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
100 r = (i1 == i2) < E; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
101 r = (i1 == i2) > E; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
102 r = (i1 == i2) <= E; /* { dg-warning "with boolean expression is always true" } */
kono
parents:
diff changeset
103 r = (i1 == i2) >= E; /* { dg-warning "with boolean expression is always false" } */
kono
parents:
diff changeset
104 }
kono
parents:
diff changeset
105
kono
parents:
diff changeset
106 void
kono
parents:
diff changeset
107 fn3 (int n, bool b)
kono
parents:
diff changeset
108 {
kono
parents:
diff changeset
109 /* Don't warn here. */
kono
parents:
diff changeset
110 r = b == n;
kono
parents:
diff changeset
111 r = b != n;
kono
parents:
diff changeset
112 r = b < n;
kono
parents:
diff changeset
113 r = b > n;
kono
parents:
diff changeset
114 r = b <= n;
kono
parents:
diff changeset
115 r = b >= n;
kono
parents:
diff changeset
116
kono
parents:
diff changeset
117 r = n == E;
kono
parents:
diff changeset
118 r = n != E;
kono
parents:
diff changeset
119 r = n < E;
kono
parents:
diff changeset
120 r = n > E;
kono
parents:
diff changeset
121 r = n <= E;
kono
parents:
diff changeset
122 r = n >= E;
kono
parents:
diff changeset
123 }