From cbc43ae091a468f438f851e454ac4454bb89f476 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 4 Oct 2005 18:06:19 +0000 Subject: re PR preprocessor/13726 (cpp -C -dI loses comments on same line as #include directives) libcpp/ PR preprocessor/13726 * directives.c (check_eol_return_comments): New static function. (parse_include): Add buf parameter. Change all callers. (do_include_common): If not discard comments, turn on save_comments. Pass collected comments to include callback. * include/cpplib.h (struct cpp_callbacks): Add new parameter to include callback: cpp_token list. gcc/ PR preprocessor/13726 * c-ppoutput.c (cb_include): Add comments parameter, and print out any comments passed in. gcc/testsuite/ PR preprocessor/13726 * gcc.dg/cpp/cmdlne-dI-C.c: New test. * gcc.dg/cpp/cmdlne-dI-C.h: New file. From-SVN: r104951 --- gcc/c-ppoutput.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'gcc/c-ppoutput.c') diff --git a/gcc/c-ppoutput.c b/gcc/c-ppoutput.c index 1cdbb67a12c..692ea7a4d75 100644 --- a/gcc/c-ppoutput.c +++ b/gcc/c-ppoutput.c @@ -54,7 +54,7 @@ static void cb_line_change (cpp_reader *, const cpp_token *, int); static void cb_define (cpp_reader *, source_location, cpp_hashnode *); static void cb_undef (cpp_reader *, source_location, cpp_hashnode *); static void cb_include (cpp_reader *, source_location, const unsigned char *, - const char *, int); + const char *, int, const cpp_token **); static void cb_ident (cpp_reader *, source_location, const cpp_string *); static void cb_def_pragma (cpp_reader *, source_location); static void cb_read_pch (cpp_reader *pfile, const char *name, @@ -336,13 +336,27 @@ cb_undef (cpp_reader *pfile ATTRIBUTE_UNUSED, source_location line, static void cb_include (cpp_reader *pfile ATTRIBUTE_UNUSED, source_location line, - const unsigned char *dir, const char *header, int angle_brackets) + const unsigned char *dir, const char *header, int angle_brackets, + const cpp_token **comments) { maybe_print_line (line); if (angle_brackets) - fprintf (print.outf, "#%s <%s>\n", dir, header); + fprintf (print.outf, "#%s <%s>", dir, header); else - fprintf (print.outf, "#%s \"%s\"\n", dir, header); + fprintf (print.outf, "#%s \"%s\"", dir, header); + + if (comments != NULL) + { + while (*comments != NULL) + { + if ((*comments)->flags & PREV_WHITE) + putc (' ', print.outf); + cpp_output_token (*comments, print.outf); + ++comments; + } + } + + putc ('\n', print.outf); print.src_line++; } -- cgit v1.2.1