1  /* Test for uses of incomplete enum variables: should be allowed just
       2     when incomplete structs are allowed.  PR 32295.  */
       3  /* Origin: Joseph Myers <joseph@codesourcery.com> */
       4  /* { dg-do compile } */
       5  /* { dg-options "" } */
       6  
       7  extern enum e ve;
       8  extern struct s vs;
       9  void *p;
      10  
      11  int
      12  f0 (int i)
      13  {
      14    ve; /* { dg-error "incomplete" } */
      15    vs; /* { dg-error "incomplete" } */
      16    (void) ve; /* { dg-error "incomplete" } */
      17    (void) vs; /* { dg-error "incomplete" } */
      18    (void) (i ? ve : ve); /* { dg-error "incomplete" } */
      19    (void) (i ? vs : vs); /* { dg-error "incomplete" } */
      20    (void) (ve = ve); /* { dg-error "incomplete" } */
      21    (void) (vs = vs); /* { dg-error "incomplete" } */
      22    (void) ve, /* { dg-error "incomplete" } */
      23      (void) ve; /* { dg-error "incomplete" } */
      24    (void) vs, /* { dg-error "incomplete" } */
      25      (void) vs; /* { dg-error "incomplete" } */
      26    p = &ve;
      27    p = &vs;
      28    (void) sizeof (ve); /* { dg-error "incomplete" } */
      29    (void) sizeof (vs); /* { dg-error "incomplete" } */
      30    typeof (ve) *pe;
      31    typeof (vs) *ps;
      32    /* ??? alignof should probably not be accepted here.  */
      33    (void) __alignof (ve);
      34    (void) __alignof (vs);
      35    (void) (ve + i); /* { dg-error "incomplete" } */
      36    (void) (i * ve); /* { dg-error "incomplete" } */
      37    (void) (i / ve); /* { dg-error "incomplete" } */
      38    (void) (ve - i); /* { dg-error "incomplete" } */
      39    (void) (ve << i); /* { dg-error "incomplete" } */
      40    (void) (i >> ve); /* { dg-error "incomplete" } */
      41    (void) (ve < i); /* { dg-error "incomplete" } */
      42    (void) (ve <= i); /* { dg-error "incomplete" } */
      43    (void) (i > ve); /* { dg-error "incomplete" } */
      44    (void) (i >= ve); /* { dg-error "incomplete" } */
      45    (void) (ve == i); /* { dg-error "incomplete" } */
      46    (void) (i != ve); /* { dg-error "incomplete" } */
      47    (void) (ve & i); /* { dg-error "incomplete" } */
      48    (void) (ve ^ i); /* { dg-error "incomplete" } */
      49    (void) (i | ve); /* { dg-error "incomplete" } */
      50    (void) (i && ve); /* { dg-error "incomplete" } */
      51    (void) (ve || i); /* { dg-error "incomplete" } */
      52    (void) -ve; /* { dg-error "incomplete" } */
      53    (void) +ve; /* { dg-error "incomplete" } */
      54    (void) ~ve; /* { dg-error "incomplete" } */
      55    (void) !ve; /* { dg-error "incomplete" } */
      56    (void) --ve; /* { dg-error "incomplete" } */
      57    (void) ++ve; /* { dg-error "incomplete" } */
      58    (void) ve--; /* { dg-error "incomplete" } */
      59    (void) ve++; /* { dg-error "incomplete" } */
      60    i = ve; /* { dg-error "incomplete" } */
      61    i *= ve; /* { dg-error "incomplete" } */
      62    i /= ve; /* { dg-error "incomplete" } */
      63    i %= ve; /* { dg-error "incomplete" } */
      64    i += ve; /* { dg-error "incomplete" } */
      65    i -= ve; /* { dg-error "incomplete" } */
      66    i <<= ve; /* { dg-error "incomplete" } */
      67    i >>= ve; /* { dg-error "incomplete" } */
      68    i &= ve; /* { dg-error "incomplete" } */
      69    i ^= ve; /* { dg-error "incomplete" } */
      70    i |= ve; /* { dg-error "incomplete" } */
      71    (void) (ve ? 1 : 1); /* { dg-error "incomplete" } */
      72    (void) (int) ve; /* { dg-error "incomplete" } */
      73    f0 (ve); /* { dg-error "incomplete" } */
      74    if (ve) /* { dg-error "incomplete" } */
      75      ;
      76    do
      77      ;
      78    while (ve); /* { dg-error "incomplete" } */
      79    while (ve) /* { dg-error "incomplete" } */
      80      ;
      81    _Bool b = ve; /* { dg-error "incomplete" } */
      82    float f = ve; /* { dg-error "incomplete" } */
      83    switch (ve) /* { dg-error "incomplete" } */
      84      ;
      85    for (; ve;) /* { dg-error "incomplete" } */
      86      ;
      87    return ve; /* { dg-error "incomplete" } */
      88  }