1  /* { dg-do compile } */
       2  /* { dg-options "-Wc++-compat" } */
       3  enum E1 { A, B, C };
       4  enum E2 { D, E, F };
       5  
       6  int f1() { return A; }
       7  
       8  struct s { enum E1 e1 : 3; enum E2 e2 : 4; };
       9  
      10  enum E1
      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  }