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