1 /* PR c/60439 */
2 /* { dg-do compile } */
3 /* { dg-prune-output "case label value exceeds" } */
4
5 #ifndef __cplusplus
6 # define bool _Bool
7 #endif
8
9 extern bool foo (void);
10
11 void
f1(bool b)12 f1 (bool b)
13 {
14 switch (b) /* { dg-warning "switch condition has" } */
15 {
16 case 3:
17 break;
18 }
19 }
20
21 void
f2(int a,int b)22 f2 (int a, int b)
23 {
24 switch (a && b) /* { dg-warning "switch condition has" } */
25 {
26 case 3:
27 break;
28 }
29 switch ((bool) (a && b)) /* { dg-warning "switch condition has" } */
30 {
31 case 3:
32 break;
33 }
34 switch ((a && b) || a) /* { dg-warning "switch condition has" } */
35 {
36 case 3:
37 break;
38 }
39 /* No warnings on following. */
40 switch ((int) (a && b))
41 break;
42 switch ((unsigned int) (a && b))
43 break;
44 switch ((unsigned short int) (a && b))
45 break;
46 switch ((char) (a && b))
47 break;
48 }
49
50 void
f3(int a)51 f3 (int a)
52 {
53 switch (!!a) /* { dg-warning "switch condition has" } */
54 {
55 case 3:
56 break;
57 }
58 switch (!a) /* { dg-warning "switch condition has" } */
59 {
60 case 3:
61 break;
62 }
63 }
64
65 void
f4(void)66 f4 (void)
67 {
68 switch (foo ()) /* { dg-warning "switch condition has" } */
69 {
70 case 3:
71 break;
72 }
73 }
74
75 void
f5(int a)76 f5 (int a)
77 {
78 switch (a == 3) /* { dg-warning "switch condition has" } */
79 {
80 case 3:
81 break;
82 }
83 switch (a != 3) /* { dg-warning "switch condition has" } */
84 {
85 case 3:
86 break;
87 }
88 switch (a > 3) /* { dg-warning "switch condition has" } */
89 {
90 case 3:
91 break;
92 }
93 switch (a < 3) /* { dg-warning "switch condition has" } */
94 {
95 case 3:
96 break;
97 }
98 switch (a <= 3) /* { dg-warning "switch condition has" } */
99 {
100 case 3:
101 break;
102 }
103 switch (a >= 3) /* { dg-warning "switch condition has" } */
104 {
105 case 3:
106 break;
107 }
108 switch (foo (), foo (), a >= 42) /* { dg-warning "switch condition has" } */
109 {
110 case 3:
111 break;
112 }
113 switch (a == 3, a & 4, a ^ 5, a)
114 break;
115 switch ((int) (a == 3))
116 break;
117 switch ((int) (a != 3))
118 break;
119 }
120
121 void
f6(bool b)122 f6 (bool b)
123 {
124 switch (b) /* { dg-warning "switch condition has" } */
125 {
126 case 3:
127 break;
128 }
129 switch (!b) /* { dg-warning "switch condition has" } */
130 {
131 case 3:
132 break;
133 }
134 }
135
136 void
f7(void)137 f7 (void)
138 {
139 bool b;
140 switch (b = 1) /* { dg-warning "switch condition has" } */
141 {
142 case 3:
143 break;
144 }
145 }
146
147 void
f8(int i)148 f8 (int i)
149 {
150 switch (i)
151 break;
152 switch ((int) i)
153 break;
154 switch ((unsigned int) i)
155 break;
156 switch ((bool) i) /* { dg-warning "switch condition has" } */
157 {
158 case 11:
159 break;
160 }
161 }
162