[Bug preprocessor/97498] #pragma GCC diagnostic ignored "-Wunused-function" inconsistent

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Aug 1 23:15:01 GMT 2022


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

--- Comment #9 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-12 branch has been updated by Lewis Hyatt
<lhyatt@gcc.gnu.org>:

https://gcc.gnu.org/g:98e2676558f6f50cfb90610e5a160642a24d1596

commit r12-8648-g98e2676558f6f50cfb90610e5a160642a24d1596
Author: Lewis Hyatt <lhyatt@gmail.com>
Date:   Sat Jul 9 16:12:21 2022 -0400

    c: Fix location for _Pragma tokens [PR97498]

    The handling of #pragma GCC diagnostic uses input_location, which is not
always
    as precise as needed; in particular the relative location of some tokens
and a
    _Pragma directive will crucially determine whether a given diagnostic is
enabled
    or suppressed in the desired way. PR97498 shows how the C frontend ends up
with
    input_location pointing to the beginning of the line containing a _Pragma()
    directive, resulting in the wrong behavior if the diagnostic to be modified
    pertains to some tokens found earlier on the same line. This patch fixes
that by
    addressing two issues:

        a) libcpp was not assigning a valid location to the CPP_PRAGMA token
        generated by the _Pragma directive.
        b) C frontend was not setting input_location to something reasonable.

    With this change, the C frontend is able to change input_location to point
to
    the _Pragma token as needed.

    This is just a two-line fix (one for each of a) and b)), the testsuite
changes
    were needed only because the location on the tested warnings has been
somewhat
    improved, so the tests need to look for the new locations.

    gcc/c/ChangeLog:

            PR preprocessor/97498
            * c-parser.cc (c_parser_pragma): Set input_location to the
            location of the pragma, rather than the start of the line.

    libcpp/ChangeLog:

            PR preprocessor/97498
            * directives.cc (destringize_and_run): Override the location of
            the CPP_PRAGMA token from a _Pragma directive to the location of
            the expansion point, as is done for the tokens lexed from it.

    gcc/testsuite/ChangeLog:

            PR preprocessor/97498
            * c-c++-common/pr97498.c: New test.
            * c-c++-common/gomp/pragma-3.c: Adapt for improved warning
locations.
            * c-c++-common/gomp/pragma-5.c: Likewise.
            * gcc.dg/pragma-message.c: Likewise.

    libgomp/ChangeLog:

            * testsuite/libgomp.oacc-c-c++-common/reduction-5.c: Adapt for
            improved warning locations.
            * testsuite/libgomp.oacc-c-c++-common/vred2d-128.c: Likewise.

    (cherry picked from commit 0587cef3d7962a8b0f44779589ba2920dd3d71e5)


More information about the Gcc-bugs mailing list