aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-ppoutput.c
diff options
context:
space:
mode:
authorPer Bothner <per@bothner.com>2004-02-18 14:02:39 -0800
committerPer Bothner <bothner@gcc.gnu.org>2004-02-18 14:02:39 -0800
commit22234f56d2395ae470961d3eb5fdc65a7597af9a (patch)
treee807c23671fa4dd53228ec168fcfa7e99628f896 /gcc/c-ppoutput.c
parent5a6d9a81c7415f0efb61a18f5bd4890286a1c003 (diff)
downloadgcc-22234f56d2395ae470961d3eb5fdc65a7597af9a.zip
gcc-22234f56d2395ae470961d3eb5fdc65a7597af9a.tar.gz
gcc-22234f56d2395ae470961d3eb5fdc65a7597af9a.tar.bz2
re PR preprocessor/14103 (ICEs on "gcc -E -imacros foo.h baz.c")
* cpphash.h (struct cpp_buffer): Restore return_at_eof field. This partly reverts my 2003-10-01 change, because we're back to logically including <command line> inside the main line. * cpplex.c (_cpp_get_fresh_line): Check return_at_eof field. * cppmacro.c (cpp_scan_nooutput): Set return_at_eof of current buffer. Fixes PR preprocessor/14103. * cppfiles.c (_cpp_stack_include): When appropriate decrement line_table's highest_location, fixing LAST_SOURCE_LINE_LOCATION. (cpp_push_include): Don't need to increment pfile's line field. * line-map.h (LAST_SOURCE_LINE_LOCATION): Only decrement by 1. * c-ppoutput.c (print struct): New first_time field. (init_pp_output): Set print.first_time. (pp_file_change): Use print.first_time, rather than MAIN_FILE_P, which is set also for (say) <command line>. Clear print.first_time. * cppfiles.c (struct _cpp_file): Comment and type for pch field does not match the code, so fix both. (should_stack_file): Inline include_pch_p function. (include_pch_p): Remove pointless function. * cpphash.h (struct cpp_buffer): Remove unused search_cached field. From-SVN: r78049
Diffstat (limited to 'gcc/c-ppoutput.c')
-rw-r--r--gcc/c-ppoutput.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/c-ppoutput.c b/gcc/c-ppoutput.c
index 1dba766..24be879 100644
--- a/gcc/c-ppoutput.c
+++ b/gcc/c-ppoutput.c
@@ -36,6 +36,7 @@ static struct
const cpp_token *source; /* Source token for spacing. */
int src_line; /* Line number currently being written. */
unsigned char printed; /* Nonzero if something output at line. */
+ bool first_time; /* pp_file_change hasn't been called yet. */
} print;
/* General output routines. */
@@ -118,6 +119,7 @@ init_pp_output (FILE *out_stream)
print.printed = 0;
print.prev = 0;
print.outf = out_stream;
+ print.first_time = 1;
}
/* Writes out the preprocessed file, handling spacing and paste
@@ -365,12 +367,12 @@ pp_file_change (const struct line_map *map)
if (map != NULL)
{
- /* First time? */
- if (MAIN_FILE_P (map))
+ if (print.first_time)
{
/* Avoid printing foo.i when the main file is foo.c. */
if (!cpp_get_options (parse_in)->preprocessed)
print_line (map->start_location, flags);
+ print.first_time = 0;
}
else
{