From dd2cc6dc8f4d3cad4affbbe5a52f8fc27ba09a61 Mon Sep 17 00:00:00 2001 From: Nathanael Nerode <neroden@gcc.gnu.org> Date: Wed, 19 Nov 2003 18:48:53 +0000 Subject: [PATCH] cpptrad.c (_cpp_scan_out_logical_line): Improve test for whether directive begins at the beginning of a line. * cpptrad.c (_cpp_scan_out_logical_line): Improve test for whether directive begins at the beginning of a line. (testsuite) * gcc.dg/cpp/trad/xwin1.c: New test case. From-SVN: r73740 --- gcc/ChangeLog | 5 +++++ gcc/cpptrad.c | 6 +++++- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/cpp/trad/xwin1.c | 13 +++++++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/cpp/trad/xwin1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 932a06b5439c..0b4e2872d91d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-11-19 Nathanael Nerode <neroden@gcc.gnu.org> + + * cpptrad.c (_cpp_scan_out_logical_line): Improve test for + whether directive begins at the beginning of a line. + 2003-11-19 Richard Sandiford <rsandifo@redhat.com> * config/frv/frv.c (frv_init_libfuncs): Correct ufix_optab entries. diff --git a/gcc/cpptrad.c b/gcc/cpptrad.c index 0f98a8ad3dda..6da19cc41ec9 100644 --- a/gcc/cpptrad.c +++ b/gcc/cpptrad.c @@ -350,6 +350,7 @@ _cpp_scan_out_logical_line (cpp_reader *pfile, cpp_macro *macro) unsigned int c, paren_depth = 0, quote; enum ls lex_state = ls_none; bool header_ok; + const uchar *start_of_input_line; fmacro.buff = NULL; @@ -359,6 +360,9 @@ _cpp_scan_out_logical_line (cpp_reader *pfile, cpp_macro *macro) RLIMIT (pfile->context) = pfile->buffer->rlimit; pfile->out.cur = pfile->out.base; pfile->out.first_line = pfile->line; + /* start_of_input_line is needed to make sure that directives really, + really start at the first character of the line. */ + start_of_input_line = pfile->buffer->cur; new_context: context = pfile->context; cur = CUR (context); @@ -581,7 +585,7 @@ _cpp_scan_out_logical_line (cpp_reader *pfile, cpp_macro *macro) break; case '#': - if (out - 1 == pfile->out.base + if (cur - 1 == start_of_input_line /* A '#' from a macro doesn't start a directive. */ && !pfile->context->prev && !pfile->state.in_directive) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0f66268f1023..fdfcc6ebdcb8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2003-11-19 Nathanael Nerode <neroden@gcc.gnu.org> + + * gcc.dg/cpp/trad/xwin1.c: New test case. + 2003-11-19 Andreas Tobler <a.tobler@schweiz.ch> * g++.dg/compat/compat.exp: Add DYLD_LIBRARY_PATH for darwin. diff --git a/gcc/testsuite/gcc.dg/cpp/trad/xwin1.c b/gcc/testsuite/gcc.dg/cpp/trad/xwin1.c new file mode 100644 index 000000000000..21220d1db683 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/trad/xwin1.c @@ -0,0 +1,13 @@ +/* XWindows (as of 4.3) does some pretty strange things with cpp. + This tests one of them; the leading comments are supposed to be + eaten by the preprocessor; but the 'directives' after them are + supposed to be retained as text, not processed, so that imake's cpp + can be run on the output! + { dg-do preprocess } +*/ + +/**/#if 0 +passed +/**/#endif + +/* { dg-final { scan-file xwin1.i "(^|\n)#if 0" } } */ -- GitLab