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