Blame cpp-test/test-t/n_27.c

Packit b40e2e
/* n_27.t:  Rescanning of a macro replace any macro call in the replacement
Packit b40e2e
        text after substitution of parameters by pre-expanded-arguments.  This
Packit b40e2e
        re-examination may involve the succeding sequences from the source
Packit b40e2e
        file (what a queer thing!). */
Packit b40e2e
Packit b40e2e
/* 27.1:    Cascaded use of object-like macros. */
Packit b40e2e
/*  1 + 2 + 3 + 4 + 5 + 6 + 7 + 8;  */
Packit b40e2e
#define NEST8   NEST7 + 8
Packit b40e2e
#define NEST7   NEST6 + 7
Packit b40e2e
#define NEST6   NEST5 + 6
Packit b40e2e
#define NEST5   NEST4 + 5
Packit b40e2e
#define NEST4   NEST3 + 4
Packit b40e2e
#define NEST3   NEST2 + 3
Packit b40e2e
#define NEST2   NEST1 + 2
Packit b40e2e
#define NEST1   1
Packit b40e2e
    NEST8;
Packit b40e2e
Packit b40e2e
/* 27.2:    Cascaded use of function-like macros.   */
Packit b40e2e
/*  (1) + (1 + 2) + 1 + 2 + 1 + 2 + 3 + 1 + 2 + 3 + 4;  */
Packit b40e2e
#define FUNC4( a, b)    FUNC3( a, b) + NEST4
Packit b40e2e
#define FUNC3( a, b)    FUNC2( a, b) + NEST3
Packit b40e2e
#define FUNC2( a, b)    FUNC1( a, b) + NEST2
Packit b40e2e
#define FUNC1( a, b)    (a) + (b)
Packit b40e2e
    FUNC4( NEST1, NEST2);
Packit b40e2e
Packit b40e2e
/* 27.3:    An identifier generated by ## operator is subject to expansion. */
Packit b40e2e
/*  1;  */
Packit b40e2e
#define glue( a, b)     a ## b
Packit b40e2e
#define MACRO_1         1
Packit b40e2e
    glue( MACRO_, 1);
Packit b40e2e
Packit b40e2e
#define sub( x, y)      (x - y)
Packit b40e2e
#define head            sub(
Packit b40e2e
#define math( op, a, b) op( (a), (b))
Packit b40e2e
Packit b40e2e
/* 27.4:    'sub' as an argument of math() is not pre-expanded, since '(' is
Packit b40e2e
        missing.    */
Packit b40e2e
/*  ((a) - (b));    */
Packit b40e2e
    math( sub, a, b);
Packit b40e2e
Packit b40e2e
/* 27.5:    Queer thing.    */
Packit b40e2e
/*  (a - b);    */
Packit b40e2e
    head a,b );
Packit b40e2e
Packit b40e2e
/* 27.6:    Recursive macro (the 2nd 'm' is expanded to 'n' since it is in
Packit b40e2e
        source file).   */
Packit b40e2e
/*  n;  */
Packit b40e2e
#define m       n
Packit b40e2e
#define n( a)   a 
Packit b40e2e
    m( m);
Packit b40e2e
Packit b40e2e
/* { dg-do preprocess }
Packit b40e2e
   { dg-options "-ansi -w" }
Packit b40e2e
   { dg-final { if ![file exist n_27.i] { return }                      } }
Packit b40e2e
   { dg-final { if \{ [grep n_27.i "1 *\\+ *2 *\\+ *3 *\\+ *4 *\\+ *5 *\\+ *6 *\\+ *7 *\\+ *8"] != "" \} \{   } }
Packit b40e2e
   { dg-final { if \{ [grep n_27.i "\\( *1 *\\) *\\+ *\\( *1 *\\+ *2 *\\) *\\+ *1 *\\+ *2 *\\+ *1 *\\+ *2 *\\+ *3 *\\+ *1 *\\+ *2 *\\+ *3 *\\+ *4"] != ""   \} \{   } }
Packit b40e2e
   { dg-final { if \{ [grep n_27.i "^ *1 *;"] != ""         \} \{   } }
Packit b40e2e
   { dg-final { if \{ [grep n_27.i "\\( *\\( *a *\\) *- *\\( *b *\\) *\\)"] != ""   \} \{   } }
Packit b40e2e
   { dg-final { if \{ [grep n_27.i "\\( *a *- *b *\\)"] != ""   \} \{   } }
Packit b40e2e
   { dg-final { if \{ [grep n_27.i " *n *;"] != ""              \} \{   } }
Packit b40e2e
   { dg-final { return \} \} \} \} \} \}                                } }
Packit b40e2e
   { dg-final { fail "n_27.c: macro rescanning"                         } }
Packit b40e2e
 */
Packit b40e2e