1 
2 /* { dg-do compile } */
3 /* { dg-options "-Werror=switch-enum -Wswitch" } */
4 /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
5 enum e { e1, e2 };
6 
7 int
foo(int i,int j,enum e ei,enum e ej,enum e ek,enum e el,enum e em,enum e en,enum e eo,enum e ep)8 foo (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) /* { dg-error "enumeration value 'e1' not handled in switch" "enum e1" } */
26     { /* { dg-error "enumeration value 'e2' not handled in switch" "enum e2" { target *-*-* } 25 } */
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) /* { dg-error "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-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; /* { dg-warning "case value '3' not in enumerated type 'enum e'" "excess 3" } */
60     default: break;
61     }
62   return 0;
63 }
64