1
2/* { dg-do compile } */
3/* { dg-options "-Werror=switch -Wswitch-enum" } */
4
5enum e { e1, e2 };
6
7int
8foo (int i, int j, enum e ei, enum e ej, enum e ek, enum e el,
9     enum e em, enum e en, enum e eo, enum e ep)
10{
11  switch (i)
12    {
13    case 1: return 1;
14    case 2: return 2;
15    }
16  switch (j)
17    {
18    case 3: return 4;
19    case 4: return 3;
20    default: break;
21    }
22  switch (ei) /* { dg-error "enumeration value 'e1' not handled in switch" "enum e1" } */
23    { /* { dg-error "enumeration value 'e2' not handled in switch" "enum e2" { target *-*-* } 22 } */
24    }
25  switch (ej) /* { dg-warning "enumeration value 'e1' not handled in switch" "enum e1" } */
26    { /* { dg-warning "enumeration value 'e2' not handled in switch" "enum e2" { target *-*-* } 25 } */
27    default: break;
28    }
29  switch (ek) /* { dg-error "enumeration value 'e2' not handled in switch" "enum e2" } */
30    {
31    case e1: return 1;
32    }
33  switch (el) /* { dg-warning "enumeration value 'e2' not handled in switch" "enum e2" } */
34    {
35    case e1: return 1;
36    default: break;
37    }
38  switch (em)
39    {
40    case e1: return 1;
41    case e2: return 2;
42    }
43  switch (en)
44    {
45    case e1: return 1;
46    case e2: return 2;
47    default: break;
48    }
49  switch (eo)
50    {
51    case e1: return 1;
52    case e2: return 2;
53    case 3: return 3; /* { dg-error "case value '3' not in enumerated type 'enum e'" "excess 3" } */
54    }
55  switch (ep)
56    {
57    case e1: return 1;
58    case e2: return 2;
59    case 3: return 3; /* { dg-error "case value '3' not in enumerated type 'enum e'" "excess 3" } */
60    default: break;
61    }
62  return 0;
63}
64