86 lines
1.7 KiB
C
86 lines
1.7 KiB
C
/* Copyright (C) 2000 Free Software Foundation, Inc. */
|
|
|
|
/* { dg-do preprocess } */
|
|
|
|
/* Tests behavior of the defined operator. */
|
|
|
|
/* Source: Neil Booth, 29 Oct 2000, Zack Weinberg 11 Dec 2000. */
|
|
|
|
#define defined /* { dg-error "defined" } */
|
|
|
|
/* No diagnostics, though you could argue there should be. */
|
|
#if defined defined
|
|
#error defined is defined!
|
|
#endif
|
|
|
|
#define is_Z_defined defined Z
|
|
|
|
#if defined Z
|
|
#error Z is not defined
|
|
#endif
|
|
|
|
/* The behavior of "defined" when it comes from a macro expansion is
|
|
now documented. */
|
|
#if is_Z_defined
|
|
#error Macro expanding into defined operator test 1
|
|
#endif
|
|
|
|
#define Z
|
|
|
|
#if !defined Z
|
|
#error Z is defined
|
|
#endif
|
|
|
|
#if !is_Z_defined
|
|
#error Macro expanding into defined operator test 2
|
|
#endif
|
|
|
|
#undef is_Z_defined
|
|
#undef Z
|
|
|
|
/* Do all the tests over again with the () form of defined. */
|
|
|
|
/* No diagnostics, though you could argue there should be. */
|
|
#if defined(defined)
|
|
#error defined is defined!
|
|
#endif
|
|
|
|
#define is_Z_defined defined ( Z )
|
|
|
|
#if defined(Z)
|
|
#error Z is not defined
|
|
#endif
|
|
|
|
/* The behavior of "defined" when it comes from a macro expansion is
|
|
now documented. */
|
|
#if is_Z_defined
|
|
#error Macro expanding into defined operator test 1
|
|
#endif
|
|
|
|
#define Z
|
|
|
|
#if !defined(Z)
|
|
#error Z is defined
|
|
#endif
|
|
|
|
#if !is_Z_defined
|
|
#error Macro expanding into defined operator test 2
|
|
#endif
|
|
|
|
/* Use of defined in different contexts. */
|
|
|
|
#define bad1 defined
|
|
#if !bad1 Z /* { dg-warning "may not be portable" } */
|
|
#error Z is defined
|
|
#endif
|
|
|
|
#if !bad1 (Z) /* { dg-warning "may not be portable" } */
|
|
#error Z is defined
|
|
#endif
|
|
|
|
#define bad2 defined (Z
|
|
#if !bad2) /* { dg-warning "may not be portable" } */
|
|
#error Z is defined
|
|
#endif
|
|
|