1 /* Copyright (C) 2000 Free Software Foundation, Inc.  */
2 
3 /* { dg-do preprocess } */
4 
5 /* Tests behavior of the defined operator.  */
6 
7 /*  Source: Neil Booth, 29 Oct 2000, Zack Weinberg 11 Dec 2000.  */
8 
9 #define defined			/* { dg-error "defined" } */
10 
11 /* No diagnostics, though you could argue there should be.  */
12 #if defined defined
13 #error defined is defined!
14 #endif
15 
16 #define is_Z_defined defined Z
17 
18 #if defined Z
19 #error Z is not defined
20 #endif
21 
22 /* The behavior of "defined" when it comes from a macro expansion is
23    now documented.  */
24 #if is_Z_defined                /* { dg-error "may not be portable" } */
25 #error Macro expanding into defined operator test 1
26 #endif
27 
28 #define Z
29 
30 #if !defined Z
31 #error Z is defined
32 #endif
33 
34 #if !is_Z_defined               /* { dg-error "may not be portable" } */
35 #error Macro expanding into defined operator test 2
36 #endif
37 
38 #undef is_Z_defined
39 #undef Z
40 
41 /* Do all the tests over again with the () form of defined.  */
42 
43 /* No diagnostics, though you could argue there should be.  */
44 #if defined(defined)
45 #error defined is defined!
46 #endif
47 
48 #define is_Z_defined defined ( Z )
49 
50 #if defined(Z)
51 #error Z is not defined
52 #endif
53 
54 /* The behavior of "defined" when it comes from a macro expansion is
55    now documented.  */
56 #if is_Z_defined                /* { dg-error "may not be portable" } */
57 #error Macro expanding into defined operator test 1
58 #endif
59 
60 #define Z
61 
62 #if !defined(Z)
63 #error Z is defined
64 #endif
65 
66 #if !is_Z_defined               /* { dg-error "may not be portable" } */
67 #error Macro expanding into defined operator test 2
68 #endif
69 
70 /* Use of defined in different contexts.  */
71 
72 #define bad1 defined
73 #if !bad1 Z			/* { dg-error "may not be portable" } */
74 #error Z is defined
75 #endif
76 
77 #if !bad1 (Z)			/* { dg-error "may not be portable" } */
78 #error Z is defined
79 #endif
80 
81 #define bad2 defined (Z
82 #if !bad2)			/* { dg-error "may not be portable" } */
83 #error Z is defined
84 #endif
85 
86