1 /* { dg-do compile } */
2 /* { dg-options "-Wc++-compat" } */
3 enum E1 { A, B, C };
4 enum E2 { D, E, F };
5 
f1()6 int f1() { return A; }
7 
8 struct s { enum E1 e1 : 3; enum E2 e2 : 4; };
9 
10 enum E1
f2(int i,struct s sv,struct s * pv)11 f2 (int i, struct s sv, struct s *pv)
12 {
13   int a;
14   enum E1 e1 = B;
15   enum E2 e2 = E;
16   switch (i)
17     {
18     case 0:
19       return A;
20     case 1:
21       return D;			/* { dg-warning "invalid in C\[+\]\[+\]" } */
22     case 2:
23       return 0;			/* { dg-warning "invalid in C\[+\]\[+\]" } */
24     case 3:
25       return (enum E1) 1;
26     case 4:
27       return (enum E2) 2;	/* { dg-warning "invalid in C\[+\]\[+\]" } */
28     case 5:
29       return e1;
30     case 6:
31       return e2;		/* { dg-warning "invalid in C\[+\]\[+\]" } */
32     case 7:
33       return pv->e1;
34     case 8:
35       return sv.e1;
36     case 9:
37       return pv->e2;		/* { dg-warning "invalid in C\[+\]\[+\]" } */
38     case 10:
39       return sv.e2;		/* { dg-warning "invalid in C\[+\]\[+\]" } */
40     case 11:
41       return 1, A;
42     default:
43       return C;
44     }
45 }
46