| /* { dg-do compile } */ |
| /* { dg-options "-Wc++-compat" } */ |
| enum E1 { A, B, C }; |
| enum E2 { D, E, F }; |
| |
| int f1() { return A; } |
| |
| struct s { enum E1 e1 : 3; enum E2 e2 : 4; }; |
| |
| enum E1 |
| f2 (int i, struct s sv, struct s *pv) |
| { |
| int a; |
| enum E1 e1 = B; |
| enum E2 e2 = E; |
| switch (i) |
| { |
| case 0: |
| return A; |
| case 1: |
| return D; /* { dg-warning "invalid in C\[+\]\[+\]" } */ |
| case 2: |
| return 0; /* { dg-warning "invalid in C\[+\]\[+\]" } */ |
| case 3: |
| return (enum E1) 1; |
| case 4: |
| return (enum E2) 2; /* { dg-warning "invalid in C\[+\]\[+\]" } */ |
| case 5: |
| return e1; |
| case 6: |
| return e2; /* { dg-warning "invalid in C\[+\]\[+\]" } */ |
| case 7: |
| return pv->e1; |
| case 8: |
| return sv.e1; |
| case 9: |
| return pv->e2; /* { dg-warning "invalid in C\[+\]\[+\]" } */ |
| case 10: |
| return sv.e2; /* { dg-warning "invalid in C\[+\]\[+\]" } */ |
| case 11: |
| return 1, A; |
| default: |
| return C; |
| } |
| } |