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