| /* 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 |
| |