cpplib startup patch
Dave Brolley
brolley@cygnus.com
Mon Jul 12 08:12:00 GMT 1999
The patch will only be effective if the # is the very first character in the
source file. I guess this is adequate if the intention is to recognize
preprocessed input. Is there a requirement to handle any valid initial #line
directive?
Dave
Jason Merrill wrote:
> This patch fixes a problem with cpplib reading preprocessed input; it makes
> up its mind too soon as to what the main filename is. If the input has a
> #line directive at the beginning, we should respect it.
>
> Thu Jul 8 18:06:30 1999 Jason Merrill <jason@yorick.cygnus.com>
>
> * cpplib.c (cpp_unget): New fn.
> (output_initial_line_command): New fn.
> * cppinit.c (cpp_start_read): Use it.
>
> Index: cppinit.c
> ===================================================================
> RCS file: /egcs/carton/cvsfiles/egcs/gcc/cppinit.c,v
> retrieving revision 1.14
> diff -c -p -r1.14 cppinit.c
> *** cppinit.c 1999/05/10 15:24:34 1.14
> --- cppinit.c 1999/07/09 01:09:06
> *************** cpp_start_read (pfile, fname)
> *** 988,994 ****
> ih_fake->limit = 0;
> if (!finclude (pfile, f, ih_fake))
> return 0;
> ! output_line_command (pfile, same_file);
> pfile->only_seen_white = 2;
>
> /* The -imacros files can be scanned now, but the -include files
> --- 988,994 ----
> ih_fake->limit = 0;
> if (!finclude (pfile, f, ih_fake))
> return 0;
> ! output_initial_line_command (pfile, same_file);
> pfile->only_seen_white = 2;
>
> /* The -imacros files can be scanned now, but the -include files
> Index: cpplib.c
> ===================================================================
> RCS file: /egcs/carton/cvsfiles/egcs/gcc/cpplib.c,v
> retrieving revision 1.82
> diff -c -p -r1.82 cpplib.c
> *** cpplib.c 1999/06/07 10:35:26 1.82
> --- cpplib.c 1999/07/09 01:09:06
> *************** cpp_file_buffer (pfile)
> *** 827,832 ****
> --- 827,862 ----
> return NULL;
> }
>
> + /* At the beginning of compilation, we want to feed the frontend a # line
> + directive so it knows what file we're compiling. But if the input begins
> + with a line directive, use that one instead. */
> +
> + void
> + output_initial_line_command (pfile)
> + cpp_reader *pfile;
> + {
> + if (PEEKC() == '#')
> + {
> + int c;
> + unsigned char *save_cur = CPP_BUFFER (pfile)->cur;
> +
> + FORWARD (1);
> + cpp_skip_hspace (pfile);
> + c = PEEKC ();
> + if (c >= '0' && c <= '9')
> + {
> + /* Handle # followed by a line number. */
> + if (CPP_PEDANTIC (pfile))
> + cpp_pedwarn (pfile, "`#' followed by integer");
> + do_line (pfile, NULL);
> + return;
> + }
> + else
> + CPP_BUFFER (pfile)->cur = save_cur;
> + }
> +
> + output_line_command (pfile, same_file);
> + }
> /*
> * write out a #line command, for instance, after an #include file.
> * FILE_CHANGE says whether we are entering a file, leaving, or neither.
More information about the Gcc-patches
mailing list