1  /* Test #elifdef and #elifndef in GNU11.  */
       2  /* { dg-do preprocess } */
       3  /* { dg-options "-std=gnu11 -pedantic" } */
       4  
       5  #define A
       6  #undef B
       7  
       8  #if 0
       9  #elifdef A	/* { dg-warning "#elifdef before C2X is a GCC extension" } */
      10  #define M1 1
      11  #endif
      12  
      13  #if M1 != 1
      14  #error "#elifdef A did not apply"
      15  #endif
      16  
      17  #if 0
      18  #elifdef B
      19  #error "#elifdef B applied"
      20  #endif
      21  
      22  #if 0
      23  #elifndef A
      24  #error "#elifndef A applied"
      25  #endif
      26  
      27  #if 0
      28  #elifndef B	/* { dg-warning "#elifndef before C2X is a GCC extension" } */
      29  #define M2 2
      30  #endif
      31  
      32  #if M2 != 2
      33  #error "#elifndef B did not apply"
      34  #endif
      35  
      36  #if 0
      37  #elifdef A	/* { dg-warning "#elifdef before C2X is a GCC extension" } */
      38  #else
      39  #error "#elifdef A did not apply"
      40  #endif
      41  
      42  #if 0
      43  #elifndef B	/* { dg-warning "#elifndef before C2X is a GCC extension" } */
      44  #else
      45  #error "#elifndef B did not apply"
      46  #endif
      47  
      48  #if 1
      49  #elifdef A	/* { dg-warning "#elifdef before C2X is a GCC extension" } */
      50  #endif
      51  
      52  #if 1
      53  #elifndef B	/* { dg-warning "#elifndef before C2X is a GCC extension" } */
      54  #endif
      55  
      56  /* As with #elif, the syntax of the new directives is relaxed after a
      57     non-skipped group.  */
      58  
      59  #if 1
      60  #elifdef x * y	/* { dg-warning "#elifdef before C2X is a GCC extension" } */
      61  #endif
      62  
      63  #if 1
      64  #elifndef !	/* { dg-warning "#elifndef before C2X is a GCC extension" } */
      65  #endif