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

Packit b40e2e
/* u_1_24.c:    Undefined behaviors on empty argument of macro call.    */
Packit b40e2e
Packit b40e2e
/* { dg-do preprocess } */
Packit b40e2e
/* { dg-options "-ansi -pedantic -Wall" }   */
Packit b40e2e
Packit b40e2e
/* u.1.24:  Empty argument of macro call.   */
Packit b40e2e
/*
Packit b40e2e
 *   Note: Since no argument and one empty argument cannot be distinguished
Packit b40e2e
 * syntactically, additional dummy argument may be necessary for an
Packit b40e2e
 * intermediate macro to process one empty argument (if possible).
Packit b40e2e
 */
Packit b40e2e
Packit b40e2e
#define ARG( a, dummy)      # a
Packit b40e2e
#define EMPTY
Packit b40e2e
#define SHOWN( n)       printf( "%s : %d\n", # n, n)
Packit b40e2e
#define SHOWS( s)       printf( "%s : %s\n", # s, ARG( s, dummy))
Packit b40e2e
#define add( a, b)      (a + b)
Packit b40e2e
#define sub( a, b)      (a - b)
Packit b40e2e
#define math( op, a, b)     op( a, b)
Packit b40e2e
#define APPEND( a, b)       a ## b
Packit b40e2e
Packit b40e2e
/*  printf( "%s : %d\n", "math( sub, , y)", ( - y));
Packit b40e2e
        or other undefined behavior.    */
Packit b40e2e
    SHOWN( math( sub, , y));    /* { dg-warning "(e|E)mpty argument" } */
Packit b40e2e
Packit b40e2e
/*  printf( "%s : %s\n", "EMPTY", "");
Packit b40e2e
        or other undefined behavior.    */
Packit b40e2e
    SHOWS( EMPTY);              /* { dg-warning "(e|E)mpty argument" } */
Packit b40e2e
Packit b40e2e
/*  printf( "%s : %s\n", "APPEND( CON, 1)", "CON1");    */
Packit b40e2e
    SHOWS( APPEND( CON, 1));
Packit b40e2e
Packit b40e2e
/*  printf( "%s : %s\n", "APPEND( , )", "");
Packit b40e2e
        or other undefined behavior.    */
Packit b40e2e
    SHOWS( APPEND( , ));        /* { dg-warning "(e|E)mpty argument" } */
Packit b40e2e