This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: preprocessor/6386: Spurious "unterminated #if"
- From: Neil Booth <neil at daikokuya dot demon dot co dot uk>
- To: Andreas Schwab <schwab at suse dot de>
- Cc: gcc-gnats at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Sun, 21 Apr 2002 11:50:59 +0100
- Subject: Re: preprocessor/6386: Spurious "unterminated #if"
- References: <200204202120.g3KLKblv000694@sykes.suse.de> <20020420220834.GA8153@daikokuya.demon.co.uk>
Neil Booth wrote:-
> * 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.
>
> Index: cppmacro.c
> ===================================================================
> RCS file: /cvs/gcc/gcc/gcc/cppmacro.c,v
> retrieving revision 1.98
> diff -u -p -r1.98 cppmacro.c
> --- cppmacro.c 14 Apr 2002 18:42:46 -0000 1.98
> +++ cppmacro.c 20 Apr 2002 22:04:19 -0000
> @@ -632,12 +632,15 @@ 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);
> + if (token->type != CPP_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);
> + }
Sadly, that wasn't quite enough. This is the patch I've committed.
Neil.
Index: cppmacro.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cppmacro.c,v
retrieving revision 1.91.6.3
diff -u -p -r1.91.6.3 cppmacro.c
--- cppmacro.c 1 Apr 2002 21:16:43 -0000 1.91.6.3
+++ cppmacro.c 21 Apr 2002 10:47:48 -0000
@@ -646,12 +646,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;
}