1*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 -fsyntax-only -verify -Wswitch-enum -Wcovered-switch-default -triple x86_64-linux-gnu %s
f(int z)2f4a2713aSLionel Sambuc void f (int z) {
3f4a2713aSLionel Sambuc while (z) {
4f4a2713aSLionel Sambuc default: z--; // expected-error {{statement not in switch}}
5f4a2713aSLionel Sambuc }
6f4a2713aSLionel Sambuc }
7f4a2713aSLionel Sambuc
foo(int X)8f4a2713aSLionel Sambuc void foo(int X) {
9f4a2713aSLionel Sambuc switch (X) {
10f4a2713aSLionel Sambuc case 42: ; // expected-note {{previous case}}
11f4a2713aSLionel Sambuc case 5000000000LL: // expected-warning {{overflow}}
12f4a2713aSLionel Sambuc case 42: // expected-error {{duplicate case value '42'}}
13f4a2713aSLionel Sambuc ;
14f4a2713aSLionel Sambuc
15f4a2713aSLionel Sambuc case 100 ... 99: ; // expected-warning {{empty case range}}
16f4a2713aSLionel Sambuc
17f4a2713aSLionel Sambuc case 43: ; // expected-note {{previous case}}
18f4a2713aSLionel Sambuc case 43 ... 45: ; // expected-error {{duplicate case value}}
19f4a2713aSLionel Sambuc
20f4a2713aSLionel Sambuc case 100 ... 20000:; // expected-note {{previous case}}
21f4a2713aSLionel Sambuc case 15000 ... 40000000:; // expected-error {{duplicate case value}}
22f4a2713aSLionel Sambuc }
23f4a2713aSLionel Sambuc }
24f4a2713aSLionel Sambuc
test3(void)25f4a2713aSLionel Sambuc void test3(void) {
26f4a2713aSLionel Sambuc // empty switch;
27f4a2713aSLionel Sambuc switch (0); // expected-warning {{no case matching constant switch condition '0'}} \
28f4a2713aSLionel Sambuc // expected-warning {{switch statement has empty body}} \
29f4a2713aSLionel Sambuc // expected-note{{put the semicolon on a separate line to silence this warning}}
30f4a2713aSLionel Sambuc }
31f4a2713aSLionel Sambuc
32f4a2713aSLionel Sambuc extern int g();
33f4a2713aSLionel Sambuc
test4()34f4a2713aSLionel Sambuc void test4()
35f4a2713aSLionel Sambuc {
36f4a2713aSLionel Sambuc int cond;
37f4a2713aSLionel Sambuc switch (cond) {
38f4a2713aSLionel Sambuc case 0 && g():
39f4a2713aSLionel Sambuc case 1 || g():
40f4a2713aSLionel Sambuc break;
41f4a2713aSLionel Sambuc }
42f4a2713aSLionel Sambuc
43f4a2713aSLionel Sambuc switch(cond) {
44f4a2713aSLionel Sambuc case g(): // expected-error {{expression is not an integer constant expression}}
45f4a2713aSLionel Sambuc case 0 ... g(): // expected-error {{expression is not an integer constant expression}}
46f4a2713aSLionel Sambuc break;
47f4a2713aSLionel Sambuc }
48f4a2713aSLionel Sambuc
49f4a2713aSLionel Sambuc switch (cond) {
50f4a2713aSLionel Sambuc case 0 && g() ... 1 || g():
51f4a2713aSLionel Sambuc break;
52f4a2713aSLionel Sambuc }
53f4a2713aSLionel Sambuc
54f4a2713aSLionel Sambuc switch (cond) {
55f4a2713aSLionel Sambuc case g() // expected-error {{expression is not an integer constant expression}}
56f4a2713aSLionel Sambuc && 0:
57f4a2713aSLionel Sambuc break;
58f4a2713aSLionel Sambuc }
59f4a2713aSLionel Sambuc
60f4a2713aSLionel Sambuc switch (cond) {
61f4a2713aSLionel Sambuc case 0 ...
62f4a2713aSLionel Sambuc g() // expected-error {{expression is not an integer constant expression}}
63f4a2713aSLionel Sambuc || 1:
64f4a2713aSLionel Sambuc break;
65f4a2713aSLionel Sambuc }
66f4a2713aSLionel Sambuc }
67f4a2713aSLionel Sambuc
test5(int z)68f4a2713aSLionel Sambuc void test5(int z) {
69f4a2713aSLionel Sambuc switch(z) {
70f4a2713aSLionel Sambuc default: // expected-note {{previous case defined here}}
71f4a2713aSLionel Sambuc default: // expected-error {{multiple default labels in one switch}}
72f4a2713aSLionel Sambuc break;
73f4a2713aSLionel Sambuc }
74f4a2713aSLionel Sambuc }
75f4a2713aSLionel Sambuc
test6()76f4a2713aSLionel Sambuc void test6() {
77f4a2713aSLionel Sambuc char ch = 'a';
78f4a2713aSLionel Sambuc switch(ch) {
79f4a2713aSLionel Sambuc case 1234: // expected-warning {{overflow converting case value}}
80f4a2713aSLionel Sambuc break;
81f4a2713aSLionel Sambuc }
82f4a2713aSLionel Sambuc }
83f4a2713aSLionel Sambuc
84f4a2713aSLionel Sambuc // PR5606
f0(int var)85f4a2713aSLionel Sambuc int f0(int var) {
86f4a2713aSLionel Sambuc switch (va) { // expected-error{{use of undeclared identifier 'va'}}
87f4a2713aSLionel Sambuc case 1:
88f4a2713aSLionel Sambuc break;
89f4a2713aSLionel Sambuc case 2:
90f4a2713aSLionel Sambuc return 1;
91f4a2713aSLionel Sambuc }
92f4a2713aSLionel Sambuc return 2;
93f4a2713aSLionel Sambuc }
94f4a2713aSLionel Sambuc
test7()95f4a2713aSLionel Sambuc void test7() {
96f4a2713aSLionel Sambuc enum {
97f4a2713aSLionel Sambuc A = 1,
98f4a2713aSLionel Sambuc B
99f4a2713aSLionel Sambuc } a;
100f4a2713aSLionel Sambuc switch(a) { //expected-warning{{enumeration value 'B' not handled in switch}}
101f4a2713aSLionel Sambuc case A:
102f4a2713aSLionel Sambuc break;
103f4a2713aSLionel Sambuc }
104f4a2713aSLionel Sambuc switch(a) {
105f4a2713aSLionel Sambuc case B:
106f4a2713aSLionel Sambuc case A:
107f4a2713aSLionel Sambuc break;
108f4a2713aSLionel Sambuc }
109f4a2713aSLionel Sambuc switch(a) {
110f4a2713aSLionel Sambuc case A:
111f4a2713aSLionel Sambuc case B:
112*0a6a1f1dSLionel Sambuc case 3: // expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
113f4a2713aSLionel Sambuc break;
114f4a2713aSLionel Sambuc }
115f4a2713aSLionel Sambuc switch(a) {
116f4a2713aSLionel Sambuc case A:
117f4a2713aSLionel Sambuc case B:
118*0a6a1f1dSLionel Sambuc case 3 ... //expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
119*0a6a1f1dSLionel Sambuc 4: //expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
120f4a2713aSLionel Sambuc break;
121f4a2713aSLionel Sambuc }
122f4a2713aSLionel Sambuc switch(a) {
123f4a2713aSLionel Sambuc case 1 ... 2:
124f4a2713aSLionel Sambuc break;
125f4a2713aSLionel Sambuc }
126f4a2713aSLionel Sambuc switch(a) {
127*0a6a1f1dSLionel Sambuc case 0 ... 2: //expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
128f4a2713aSLionel Sambuc break;
129f4a2713aSLionel Sambuc }
130f4a2713aSLionel Sambuc switch(a) {
131*0a6a1f1dSLionel Sambuc case 1 ... 3: //expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
132f4a2713aSLionel Sambuc break;
133f4a2713aSLionel Sambuc }
134f4a2713aSLionel Sambuc switch(a) {
135*0a6a1f1dSLionel Sambuc case 0 ... //expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
136*0a6a1f1dSLionel Sambuc 3: //expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
137f4a2713aSLionel Sambuc break;
138f4a2713aSLionel Sambuc }
139f4a2713aSLionel Sambuc
140f4a2713aSLionel Sambuc }
141f4a2713aSLionel Sambuc
test8()142f4a2713aSLionel Sambuc void test8() {
143f4a2713aSLionel Sambuc enum {
144f4a2713aSLionel Sambuc A,
145f4a2713aSLionel Sambuc B,
146f4a2713aSLionel Sambuc C = 1
147f4a2713aSLionel Sambuc } a;
148f4a2713aSLionel Sambuc switch(a) {
149f4a2713aSLionel Sambuc case A:
150f4a2713aSLionel Sambuc case B:
151f4a2713aSLionel Sambuc break;
152f4a2713aSLionel Sambuc }
153f4a2713aSLionel Sambuc switch(a) {
154f4a2713aSLionel Sambuc case A:
155f4a2713aSLionel Sambuc case C:
156f4a2713aSLionel Sambuc break;
157f4a2713aSLionel Sambuc }
158f4a2713aSLionel Sambuc switch(a) { //expected-warning{{enumeration value 'B' not handled in switch}}
159f4a2713aSLionel Sambuc case A:
160f4a2713aSLionel Sambuc break;
161f4a2713aSLionel Sambuc }
162f4a2713aSLionel Sambuc }
163f4a2713aSLionel Sambuc
test9()164f4a2713aSLionel Sambuc void test9() {
165f4a2713aSLionel Sambuc enum {
166f4a2713aSLionel Sambuc A = 3,
167f4a2713aSLionel Sambuc C = 1
168f4a2713aSLionel Sambuc } a;
169f4a2713aSLionel Sambuc switch(a) {
170*0a6a1f1dSLionel Sambuc case 0: //expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
171f4a2713aSLionel Sambuc case 1:
172*0a6a1f1dSLionel Sambuc case 2: //expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
173f4a2713aSLionel Sambuc case 3:
174*0a6a1f1dSLionel Sambuc case 4: //expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
175f4a2713aSLionel Sambuc break;
176f4a2713aSLionel Sambuc }
177f4a2713aSLionel Sambuc }
178f4a2713aSLionel Sambuc
test10()179f4a2713aSLionel Sambuc void test10() {
180f4a2713aSLionel Sambuc enum {
181f4a2713aSLionel Sambuc A = 10,
182f4a2713aSLionel Sambuc C = 2,
183f4a2713aSLionel Sambuc B = 4,
184f4a2713aSLionel Sambuc D = 12
185f4a2713aSLionel Sambuc } a;
186f4a2713aSLionel Sambuc switch(a) {
187*0a6a1f1dSLionel Sambuc case 0 ... //expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
188*0a6a1f1dSLionel Sambuc 1: //expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
189f4a2713aSLionel Sambuc case 2 ... 4:
190*0a6a1f1dSLionel Sambuc case 5 ... //expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
191*0a6a1f1dSLionel Sambuc 9: //expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
192f4a2713aSLionel Sambuc case 10 ... 12:
193*0a6a1f1dSLionel Sambuc case 13 ... //expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
194*0a6a1f1dSLionel Sambuc 16: //expected-warning{{case value not in enumerated type 'enum (anonymous enum}}
195f4a2713aSLionel Sambuc break;
196f4a2713aSLionel Sambuc }
197f4a2713aSLionel Sambuc }
198f4a2713aSLionel Sambuc
test11()199f4a2713aSLionel Sambuc void test11() {
200f4a2713aSLionel Sambuc enum {
201f4a2713aSLionel Sambuc A = -1,
202f4a2713aSLionel Sambuc B,
203f4a2713aSLionel Sambuc C
204f4a2713aSLionel Sambuc } a;
205f4a2713aSLionel Sambuc switch(a) { //expected-warning{{enumeration value 'A' not handled in switch}}
206f4a2713aSLionel Sambuc case B:
207f4a2713aSLionel Sambuc case C:
208f4a2713aSLionel Sambuc break;
209f4a2713aSLionel Sambuc }
210f4a2713aSLionel Sambuc
211f4a2713aSLionel Sambuc switch(a) { //expected-warning{{enumeration value 'A' not explicitly handled in switch}}
212f4a2713aSLionel Sambuc case B:
213f4a2713aSLionel Sambuc case C:
214f4a2713aSLionel Sambuc break;
215f4a2713aSLionel Sambuc
216f4a2713aSLionel Sambuc default:
217f4a2713aSLionel Sambuc break;
218f4a2713aSLionel Sambuc }
219f4a2713aSLionel Sambuc }
220f4a2713aSLionel Sambuc
test12()221f4a2713aSLionel Sambuc void test12() {
222f4a2713aSLionel Sambuc enum {
223f4a2713aSLionel Sambuc A = -1,
224f4a2713aSLionel Sambuc B = 4294967286
225f4a2713aSLionel Sambuc } a;
226f4a2713aSLionel Sambuc switch(a) {
227f4a2713aSLionel Sambuc case A:
228f4a2713aSLionel Sambuc case B:
229f4a2713aSLionel Sambuc break;
230f4a2713aSLionel Sambuc }
231f4a2713aSLionel Sambuc }
232f4a2713aSLionel Sambuc
233f4a2713aSLionel Sambuc // <rdar://problem/7643909>
234f4a2713aSLionel Sambuc typedef enum {
235f4a2713aSLionel Sambuc val1,
236f4a2713aSLionel Sambuc val2,
237f4a2713aSLionel Sambuc val3
238f4a2713aSLionel Sambuc } my_type_t;
239f4a2713aSLionel Sambuc
test13(my_type_t t)240f4a2713aSLionel Sambuc int test13(my_type_t t) {
241f4a2713aSLionel Sambuc switch(t) { // expected-warning{{enumeration value 'val3' not handled in switch}}
242f4a2713aSLionel Sambuc case val1:
243f4a2713aSLionel Sambuc return 1;
244f4a2713aSLionel Sambuc case val2:
245f4a2713aSLionel Sambuc return 2;
246f4a2713aSLionel Sambuc }
247f4a2713aSLionel Sambuc return -1;
248f4a2713aSLionel Sambuc }
249f4a2713aSLionel Sambuc
250f4a2713aSLionel Sambuc // <rdar://problem/7658121>
251f4a2713aSLionel Sambuc enum {
252f4a2713aSLionel Sambuc EC0 = 0xFFFF0000,
253f4a2713aSLionel Sambuc EC1 = 0xFFFF0001,
254f4a2713aSLionel Sambuc };
255f4a2713aSLionel Sambuc
test14(int a)256f4a2713aSLionel Sambuc int test14(int a) {
257f4a2713aSLionel Sambuc switch(a) {
258f4a2713aSLionel Sambuc case EC0: return 0;
259f4a2713aSLionel Sambuc case EC1: return 1;
260f4a2713aSLionel Sambuc }
261f4a2713aSLionel Sambuc return 0;
262f4a2713aSLionel Sambuc }
263f4a2713aSLionel Sambuc
f1(unsigned x)264f4a2713aSLionel Sambuc void f1(unsigned x) {
265f4a2713aSLionel Sambuc switch (x) {
266f4a2713aSLionel Sambuc case -1: break;
267f4a2713aSLionel Sambuc default: break;
268f4a2713aSLionel Sambuc }
269f4a2713aSLionel Sambuc }
270f4a2713aSLionel Sambuc
test15()271f4a2713aSLionel Sambuc void test15() {
272f4a2713aSLionel Sambuc int i = 0;
273f4a2713aSLionel Sambuc switch (1) { // expected-warning {{no case matching constant switch condition '1'}}
274f4a2713aSLionel Sambuc case 0: i = 0; break;
275f4a2713aSLionel Sambuc case 2: i++; break;
276f4a2713aSLionel Sambuc }
277f4a2713aSLionel Sambuc }
278f4a2713aSLionel Sambuc
test16()279f4a2713aSLionel Sambuc void test16() {
280f4a2713aSLionel Sambuc const char c = '5';
281f4a2713aSLionel Sambuc switch (c) { // expected-warning {{no case matching constant switch condition '53'}}
282f4a2713aSLionel Sambuc case '6': return;
283f4a2713aSLionel Sambuc }
284f4a2713aSLionel Sambuc }
285f4a2713aSLionel Sambuc
286f4a2713aSLionel Sambuc // PR7359
test17(int x)287f4a2713aSLionel Sambuc void test17(int x) {
288f4a2713aSLionel Sambuc switch (x >= 17) { // expected-warning {{switch condition has boolean value}}
289f4a2713aSLionel Sambuc case 0: return;
290f4a2713aSLionel Sambuc }
291f4a2713aSLionel Sambuc
292f4a2713aSLionel Sambuc switch ((int) (x <= 17)) {
293f4a2713aSLionel Sambuc case 0: return;
294f4a2713aSLionel Sambuc }
295f4a2713aSLionel Sambuc }
296f4a2713aSLionel Sambuc
test18()297f4a2713aSLionel Sambuc int test18() {
298f4a2713aSLionel Sambuc enum { A, B } a;
299f4a2713aSLionel Sambuc switch (a) {
300f4a2713aSLionel Sambuc case A: return 0;
301f4a2713aSLionel Sambuc case B: return 1;
302f4a2713aSLionel Sambuc case 7: return 1; // expected-warning {{case value not in enumerated type}}
303f4a2713aSLionel Sambuc default: return 2; // expected-warning {{default label in switch which covers all enumeration values}}
304f4a2713aSLionel Sambuc }
305f4a2713aSLionel Sambuc }
306f4a2713aSLionel Sambuc
307f4a2713aSLionel Sambuc // rdar://110822110
308f4a2713aSLionel Sambuc typedef enum {
309f4a2713aSLionel Sambuc kOne = 1,
310f4a2713aSLionel Sambuc } Ints;
311f4a2713aSLionel Sambuc
rdar110822110(Ints i)312f4a2713aSLionel Sambuc void rdar110822110(Ints i)
313f4a2713aSLionel Sambuc {
314f4a2713aSLionel Sambuc switch (i) {
315f4a2713aSLionel Sambuc case kOne:
316f4a2713aSLionel Sambuc break;
317f4a2713aSLionel Sambuc case 2: // expected-warning {{case value not in enumerated type 'Ints'}}
318f4a2713aSLionel Sambuc break;
319f4a2713aSLionel Sambuc default: // expected-warning {{default label in switch which covers all enumeration values}}
320f4a2713aSLionel Sambuc break;
321f4a2713aSLionel Sambuc }
322f4a2713aSLionel Sambuc }
323f4a2713aSLionel Sambuc
324f4a2713aSLionel Sambuc // PR9243
325f4a2713aSLionel Sambuc #define TEST19MACRO 5
test19(int i)326f4a2713aSLionel Sambuc void test19(int i) {
327f4a2713aSLionel Sambuc enum {
328f4a2713aSLionel Sambuc kTest19Enum1 = 7,
329f4a2713aSLionel Sambuc kTest19Enum2 = kTest19Enum1
330f4a2713aSLionel Sambuc };
331f4a2713aSLionel Sambuc const int a = 3;
332f4a2713aSLionel Sambuc switch (i) {
333f4a2713aSLionel Sambuc case 5: // expected-note {{previous case}}
334f4a2713aSLionel Sambuc case TEST19MACRO: // expected-error {{duplicate case value '5'}}
335f4a2713aSLionel Sambuc
336f4a2713aSLionel Sambuc case 7: // expected-note {{previous case}}
337f4a2713aSLionel Sambuc case kTest19Enum1: // expected-error {{duplicate case value: '7' and 'kTest19Enum1' both equal '7'}} \
338f4a2713aSLionel Sambuc // expected-note {{previous case}}
339f4a2713aSLionel Sambuc case kTest19Enum1: // expected-error {{duplicate case value 'kTest19Enum1'}} \
340f4a2713aSLionel Sambuc // expected-note {{previous case}}
341f4a2713aSLionel Sambuc case kTest19Enum2: // expected-error {{duplicate case value: 'kTest19Enum1' and 'kTest19Enum2' both equal '7'}} \
342f4a2713aSLionel Sambuc // expected-note {{previous case}}
343f4a2713aSLionel Sambuc case (int)kTest19Enum2: //expected-error {{duplicate case value 'kTest19Enum2'}}
344f4a2713aSLionel Sambuc
345f4a2713aSLionel Sambuc case 3: // expected-note {{previous case}}
346f4a2713aSLionel Sambuc case a: // expected-error {{duplicate case value: '3' and 'a' both equal '3'}} \
347f4a2713aSLionel Sambuc // expected-note {{previous case}}
348f4a2713aSLionel Sambuc case a: // expected-error {{duplicate case value 'a'}}
349f4a2713aSLionel Sambuc break;
350f4a2713aSLionel Sambuc }
351f4a2713aSLionel Sambuc }
352*0a6a1f1dSLionel Sambuc
353*0a6a1f1dSLionel Sambuc // Allow the warning 'case value not in enumerated type' to be silenced with
354*0a6a1f1dSLionel Sambuc // the following pattern.
355*0a6a1f1dSLionel Sambuc //
356*0a6a1f1dSLionel Sambuc // If 'case' expression refers to a static const variable of the correct enum
357*0a6a1f1dSLionel Sambuc // type, then we count this as a sufficient declaration of intent by the user,
358*0a6a1f1dSLionel Sambuc // so we silence the warning.
359*0a6a1f1dSLionel Sambuc enum ExtendedEnum1 {
360*0a6a1f1dSLionel Sambuc EE1_a,
361*0a6a1f1dSLionel Sambuc EE1_b
362*0a6a1f1dSLionel Sambuc };
363*0a6a1f1dSLionel Sambuc
364*0a6a1f1dSLionel Sambuc enum ExtendedEnum1_unrelated { EE1_misc };
365*0a6a1f1dSLionel Sambuc
366*0a6a1f1dSLionel Sambuc static const enum ExtendedEnum1 EE1_c = 100;
367*0a6a1f1dSLionel Sambuc static const enum ExtendedEnum1_unrelated EE1_d = 101;
368*0a6a1f1dSLionel Sambuc
switch_on_ExtendedEnum1(enum ExtendedEnum1 e)369*0a6a1f1dSLionel Sambuc void switch_on_ExtendedEnum1(enum ExtendedEnum1 e) {
370*0a6a1f1dSLionel Sambuc switch(e) {
371*0a6a1f1dSLionel Sambuc case EE1_a: break;
372*0a6a1f1dSLionel Sambuc case EE1_b: break;
373*0a6a1f1dSLionel Sambuc case EE1_c: break; // no-warning
374*0a6a1f1dSLionel Sambuc case EE1_d: break; // expected-warning {{case value not in enumerated type 'enum ExtendedEnum1'}}
375*0a6a1f1dSLionel Sambuc }
376*0a6a1f1dSLionel Sambuc }
377*0a6a1f1dSLionel Sambuc
PR11778(char c,int n,long long ll)378*0a6a1f1dSLionel Sambuc void PR11778(char c, int n, long long ll) {
379*0a6a1f1dSLionel Sambuc // Do not reject this; we don't have duplicate case values because we
380*0a6a1f1dSLionel Sambuc // check for duplicates in the promoted type.
381*0a6a1f1dSLionel Sambuc switch (c) case 1: case 257: ; // expected-warning {{overflow}}
382*0a6a1f1dSLionel Sambuc
383*0a6a1f1dSLionel Sambuc switch (n) case 0x100000001LL: case 1: ; // expected-warning {{overflow}} expected-error {{duplicate}} expected-note {{previous}}
384*0a6a1f1dSLionel Sambuc switch ((int)ll) case 0x100000001LL: case 1: ; // expected-warning {{overflow}} expected-error {{duplicate}} expected-note {{previous}}
385*0a6a1f1dSLionel Sambuc switch ((long long)n) case 0x100000001LL: case 1: ;
386*0a6a1f1dSLionel Sambuc switch (ll) case 0x100000001LL: case 1: ;
387*0a6a1f1dSLionel Sambuc }
388