[Bug preprocessor/60723] Line directives with incorrect system header flag

dodji at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Jul 16 10:34:00 GMT 2014


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60723

--- Comment #21 from Dodji Seketeli <dodji at gcc dot gnu.org> ---
Author: dodji
Date: Wed Jul 16 10:33:36 2014
New Revision: 212638

URL: https://gcc.gnu.org/viewcvs?rev=212638&root=gcc&view=rev
Log:
PR preprocessor/60723 - missing system-ness marks for macro tokens

When a system macro is expanded in a non-system file during
out-of-line preprocessing, it can happen that the preprocessor forgets
to emit line markers to express the system-ness status of tokens that
come after the expansion of the macro.

That can lead to situations where the entire non-system file can be
considered as being a system file and thus have its warnings be
discarded during the compilation of the resulting preprocessed file.

My understanding is that this is due to the preprocessor not
systematically detecting (and reporting) the change in system-ness of
tokens.

And this is what this patch does.  Each time the system-ness of a
given token is different from the previous token that was emitted by
the preprocessor, it emits a line marker for the sole purpose of
marking the new system-ness of the subsequent tokens to come.

Bootstrapped and tested on x86_64-unknown-linux-gnu against trunk.

gcc/c-family/ChangeLog:
    * c-ppoutput.c (struct print::prev_was_system_token): New data
    member.
    (init_pp_output): Initialize it.
    (maybe_print_line_1, maybe_print_line, print_line_1, print_line)
    (do_line_change): Return a flag saying if a line marker was
    emitted or not.
    (scan_translation_unit): Detect if the system-ness of the token we
    are about to emit is different from the one of the previously
    emitted token.  If so, emit a line marker.  Avoid emitting useless
    adjacent line markers.  Avoid emitting line markers for tokens
    originating from the expansion of built-in macros.
    (scan_translation_unit_directives_only): Adjust.

gcc/testsuite/ChangeLog:
    * gcc.dg/cpp/syshdr{4,5}.{c,h}: New test files.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>

Signed-off-by: Dodji Seketeli <dodji@redhat.com>

Added:
    trunk/gcc/testsuite/gcc.dg/cpp/syshdr4.c
    trunk/gcc/testsuite/gcc.dg/cpp/syshdr4.h
    trunk/gcc/testsuite/gcc.dg/cpp/syshdr5.c
    trunk/gcc/testsuite/gcc.dg/cpp/syshdr5.h
Modified:
    trunk/gcc/c-family/ChangeLog
    trunk/gcc/c-family/c-ppoutput.c
    trunk/gcc/testsuite/ChangeLog



More information about the Gcc-bugs mailing list