Mercurial > hg > CbC > CbC_gcc
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 } |