/* Copyright (C) 2000 Free Software Foundation, Inc. */ /* { dg-do preprocess } */ /* Tests tradcpp0 with defined. The defined operator in traditional C works just the same as the defined operator in Standard C. */ /* Source: Zack Weinberg, glibc, Neil Booth 11 Dec 2000. */ #if defined REGPARMS #error REGPARMS should not be defined #endif #define REGPARMS 1 #if !defined REGPARMS #error REGPARMS should be defined #endif #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