1/* PR c/4475, PR c++/3780 */
2/* { dg-do compile } */
3/* { dg-options "-Wswitch" } */
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-warning "enumeration value 'e1' not handled in switch" "enum e1" } */
23    { /*{ dg-warning "enumeration value 'e2' not handled in switch" "enum e2" { target *-*-* } 22 } */
24    }
25  switch (ej)
26    {
27    default: break;
28    }
29  switch (ek) /* { dg-warning "enumeration value 'e2' not handled in switch" "enum e2" } */
30    {
31    case e1: return 1;
32    }
33  switch (el)
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-warning "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;
60    default: break;
61    } /* Since there is a default, no warning about ``case 3'' */
62  return 0;
63}
64