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
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
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
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
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-warning "may not be portable" } */
74#error Z is defined
75#endif
76
77#if !bad1 (Z)			/* { dg-warning "may not be portable" } */
78#error Z is defined
79#endif
80
81#define bad2 defined (Z
82#if !bad2)			/* { dg-warning "may not be portable" } */
83#error Z is defined
84#endif
85
86