(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
Wcxx-compat-6.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-Wc++-compat" } */
       3  enum E1 { A, B, C };
       4  enum E2 { D, E, F };
       5  
       6  enum E1 v1a = A;
       7  enum E1 v1b = D;		/* { dg-warning "invalid in C\[+\]\[+\]" } */
       8  enum E1 v1c = 0;		/* { dg-warning "invalid in C\[+\]\[+\]" } */
       9  enum E1 v1d = (enum E1) 0;
      10  enum E1 v1e = (enum E2) 0;	/* { dg-warning "invalid in C\[+\]\[+\]" } */
      11  
      12  enum E2 v2a;
      13  
      14  enum E1 a1[] =
      15  {
      16    A,
      17    D,				/* { dg-warning "invalid in C\[+\]\[+\]" } */
      18    0,				/* { dg-warning "invalid in C\[+\]\[+\]" } */
      19    (enum E1) 0,
      20    (enum E2) 0,			/* { dg-warning "invalid in C\[+\]\[+\]" } */
      21    A
      22  };
      23  
      24  struct s1
      25  {
      26    enum E1 e1;
      27  };
      28  
      29  struct s1 a2[] =
      30  {
      31    { A },
      32    { D },			/* { dg-warning "invalid in C\[+\]\[+\]" } */
      33    { 0 },			/* { dg-warning "invalid in C\[+\]\[+\]" } */
      34    { (enum E1) 0 },
      35    { (enum E2) 0 },		/* { dg-warning "invalid in C\[+\]\[+\]" } */
      36    { A }
      37  };
      38  
      39  struct s1 a3[] =
      40  {
      41    [ 5 ] = { .e1 = A },
      42    [ 4 ] = { .e1 = D },		/* { dg-warning "invalid in C\[+\]\[+\]" } */
      43    [ 3 ] = { .e1 = 0 },		/* { dg-warning "invalid in C\[+\]\[+\]" } */
      44    [ 2 ] = { .e1 = (enum E1) 0 },
      45    [ 1 ] = { .e1 = (enum E2) 0 }, /* { dg-warning "invalid in C\[+\]\[+\]" } */
      46    [ 0 ] = { .e1 = A }
      47  };
      48  
      49  struct s2
      50  {
      51    enum E1 e1 : 3;
      52  };
      53  
      54  struct s2 a4[] =
      55  {
      56    { A },
      57    { D },			/* { dg-warning "invalid in C\[+\]\[+\]" } */
      58    { 0 },			/* { dg-warning "invalid in C\[+\]\[+\]" } */
      59    { (enum E1) 0 },
      60    { (enum E2) 0 },		/* { dg-warning "invalid in C\[+\]\[+\]" } */
      61    { A }
      62  };
      63  
      64  struct s2 a5[] =
      65  {
      66    [ 5 ] = { .e1 = A },
      67    [ 4 ] = { .e1 = D },		/* { dg-warning "invalid in C\[+\]\[+\]" } */
      68    [ 3 ] = { .e1 = 0 },		/* { dg-warning "invalid in C\[+\]\[+\]" } */
      69    [ 2 ] = { .e1 = (enum E1) 0 },
      70    [ 1 ] = { .e1 = (enum E2) 0 }, /* { dg-warning "invalid in C\[+\]\[+\]" } */
      71    [ 0 ] = { .e1 = A }
      72  };
      73  
      74  void
      75  f(enum E1 e1, enum E2 e2, struct s1 vs1, struct s1 *vp1)
      76  {
      77    enum E1 va1[] = {
      78      e1,
      79      e2,				/* { dg-warning "invalid in C\[+\]\[+\]" } */
      80      v1a,
      81      v2a,			/* { dg-warning "invalid in C\[+\]\[+\]" } */
      82      vs1.e1,
      83      vp1->e1,
      84      e1 ? e1 : e1,
      85      (0, e1)
      86    };
      87  
      88    struct s1 va2[] = {
      89      { e1 },
      90      { e2 },			/* { dg-warning "invalid in C\[+\]\[+\]" } */
      91      { v1a },
      92      { v2a },			/* { dg-warning "invalid in C\[+\]\[+\]" } */
      93      { vs1.e1 },
      94      { vp1->e1 },
      95      { e1 ? e1 : e1 },
      96      { (0, e1) }
      97    };
      98  
      99    struct s2 va3[] = {
     100      { e1 },
     101      { e2 },			/* { dg-warning "invalid in C\[+\]\[+\]" } */
     102      { v1a },
     103      { v2a },			/* { dg-warning "invalid in C\[+\]\[+\]" } */
     104      { vs1.e1 },
     105      { vp1->e1 },
     106      { e1 ? e1 : e1 },
     107      { (0, e1) }
     108    };
     109  }
     110  
     111  /* Match all extra informative notes.  */
     112  /* { dg-message "near initialization for" "expected" { target *-*-* } 0 } */