1  /* { dg-do run } */
       2  
       3  /* Test that, when a macro expansion spills into the source file, we
       4     expand macros we suck in from there, as the standard clearly states
       5     they are not nested.
       6  
       7     Submitter: Neil Booth, with minor modifications to the originals. 3
       8     Dec 2000.
       9     Source: PR 962 and Thomas Pornin.  */
      10  
      11  extern void abort (void);
      12  int e = 10, f = 100;
      13  
      14  #define e(n) 4 + n
      15  #define X e
      16  #define f(x) x
      17  #define h(x) x + f
      18  
      19  int
      20  main ()
      21  {
      22    if (X(X) != 14)		/* Should expand to "4 + e".  */
      23      abort ();
      24  
      25    if (X(X(f)) != 108)		/* Should expand to "4 + 4 + f".  */
      26      abort ();
      27  
      28    if (h(e)(h(e)) != 120)	/* Should expand to "e + e + f".  */
      29      abort ();
      30  
      31    return 0;
      32  }