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
66