8sa1-gcc/gcc/testsuite/gcc.dg/cpp/paste5.c
Zack Weinberg 96be699833 cpplib.h (TTYPE_TABLE): Rearrange to use only two per-entry macros, not five.
* cpplib.h (TTYPE_TABLE): Rearrange to use only two per-entry
          macros, not five.

	* cpphash.h (TOKEN_NAME): New macro.
	(_cpp_spell_operator): Deleted.
	(token_spellings): Now _cpp_token_spellings.

	* cppexp.c: Use TOKEN_NAME or TYPE_NAME, not _cpp_spell_operator.
	* cpplex.c: Use OP and TK macros when expanding the
	TTYPE_TABLE.  Eliminate token_names.  For non-OPERATOR tokens,
	store the stringification of the enumeration name (CPP_CHAR,
	etc.) in the name slot of token_spellings.
	Use TOKEN_NAME and/or TOKEN_SPELL, do not reference
	token_spellings directly.
	* cpplib.c: Use TOKEN_SPELL.

	* cpplex.c (_cpp_push_token): If the token being pushed back
	is the previous token in this context, just subtract one from
	context->posn.
	* cppmacro.c (save_expansion): Clear aux field when storing a
	placemarker.

	* gcc.dg/cpp/paste5.c: New test.
	* gcc.dg/cpp/vararg1.c: New test.

From-SVN: r35124
2000-07-18 23:25:06 +00:00

25 lines
692 B
C

/* Regression test for bug in convoluted situation involving token paste
plus function-like macros used outside function context. It may be
easier to understand if you mentally replace 'struct' with 'A'
throughout this file; 'struct' is used only to get the code to compile
when preprocessed correctly.
The original problem was seen in the Linux kernel and reported by
Jakub Jelinek <jakub@redhat.com>; this test is synthetic. */
/* { dg-do compile } */
#define glue(a,b) a##b
#define struct(x) B(x)
#define E(x) struct x
#define FG (22)
extern void B(int);
void foo(void)
{
E(glue(F,*)) dummy; /* { dg-warning "valid preprocessing token" } */
E(glue(F,G)) ;
}