cppmacro.c (funlike_invocation_p): Don't step back over CPP_EOF.

* cppmacro.c (funlike_invocation_p): Don't step back over CPP_EOF.
testsuite:
	* gcc.dg/cpp/endif.h, gcc.dg/cpp/endif.c: New tests.

From-SVN: r52586
This commit is contained in:
Neil Booth 2002-04-21 16:17:55 +00:00 committed by Neil Booth
parent d8b85ae597
commit 9ac3b1bec7
5 changed files with 35 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2002-04-21 Neil Booth <neil@daikokuya.demon.co.uk>
* cppmacro.c (funlike_invocation_p): Don't step back
over CPP_EOF.
2002-04-21 David Edelsohn <edelsohn@gnu.org>
* config/rs6000/rs6000.c (output_profile_hook): Do not increment

View File

@ -632,12 +632,17 @@ funlike_invocation_p (pfile, node)
return collect_args (pfile, node);
}
/* Back up. We may have skipped padding, in which case backing up
more than one token when expanding macros is in general too
difficult. We re-insert it in its own context. */
_cpp_backup_tokens (pfile, 1);
if (padding)
push_token_context (pfile, NULL, padding, 1);
/* CPP_EOF can be the end of macro arguments, or the end of the
file. We mustn't back up over the latter. Ugh. */
if (token->type != CPP_EOF || token == &pfile->eof)
{
/* Back up. We may have skipped padding, in which case backing
up more than one token when expanding macros is in general
too difficult. We re-insert it in its own context. */
_cpp_backup_tokens (pfile, 1);
if (padding)
push_token_context (pfile, NULL, padding, 1);
}
return NULL;
}

View File

@ -1,3 +1,7 @@
2002-04-21 Neil Booth <neil@daikokuya.demon.co.uk>
* gcc.dg/cpp/endif.h, gcc.dg/cpp/endif.c: New tests.
2002-04-21 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
* gcc.c-torture/execute/20000906-1.x: Delete.

View File

@ -0,0 +1,14 @@
/* Copyright (C) 2002 Free Software Foundation, Inc. */
/* { dg-do preprocess } */
/* Test case for PR preprocessor/6386 by Andreas Schwab. We'd back up
over the CPP_EOF token (indicating not a funlike macro invocation)
in the header file, which would then be passed through as a real
EOF, leading to an early exit (and therefore bogus complaint about
unterminated #if). */
#define S(x)
#if 1
#include "endif.h"
#endif

View File

@ -0,0 +1 @@
S