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