This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/70105] [6 regression] giant warning when building gcc-5 with gcc-6


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

--- Comment #4 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Author: dmalcolm
Date: Wed Mar  9 18:23:27 2016
New Revision: 234088

URL: https://gcc.gnu.org/viewcvs?rev=234088&root=gcc&view=rev
Log:
PR c++/70105: prevent nonsensical underline spew for macro expansions

diagnostic_show_locus can sometimes do the wrong thing when handling
expressions built up from macros.

PR c++/70105 (currently marked as a P3 regression) has an example of
a diagnostic where over 500 lines of irrelevant source are printed,
and underlined, giving >1000 lines of useless spew to stderr.

This patch adds extra sanitization to diagnostic-show-locus.c, so that
we only attempt to print underlines and secondary locations if such
locations are "sufficiently sane" relative to the primary location
of a diagnostic.

This "sufficiently sane" condition is implemented by a new helper
function compatible_locations_p, which requires such locations to
have the same macro expansion hierarchy as the primary location,
using linemap_macro_map_loc_unwind_toward_spelling, effectively
mimicing the expansion performed by LRK_SPELLING_LOCATION.

This may be too strong a condition, but it effectively fixes
PR c++/70105, without removing any underlines in my testing.

Successfully bootstrapped&regrtested in combination with the previous
patch on x86_64-pc-linux-gnu; adds 15 new PASS results to g++.sum
and 4 new PASS results to gcc.sum.

gcc/ChangeLog:
        PR c/68473
        PR c++/70105
        * diagnostic-show-locus.c (compatible_locations_p): New function.
        (layout::layout): Sanitize ranges using compatible_locations_p.

gcc/testsuite/ChangeLog:
        PR c/68473
        PR c++/70105
        * g++.dg/diagnostic/pr70105.C: New test.
        * gcc.dg/plugin/diagnostic-test-expressions-1.c (foo): New decl.
        (test_multiple_ordinary_maps): New test function.

libcpp/ChangeLog:
        PR c/68473
        PR c++/70105
        * line-map.c (linemap_macro_map_loc_unwind_toward_spelling): Move
        decl...
        * include/line-map.h
        (linemap_macro_map_loc_unwind_toward_spelling): ...here,
        converting from static to extern.


Added:
    trunk/gcc/testsuite/g++.dg/diagnostic/pr70105.C
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/diagnostic-show-locus.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.dg/plugin/diagnostic-test-expressions-1.c
    trunk/libcpp/ChangeLog
    trunk/libcpp/include/line-map.h
    trunk/libcpp/line-map.c

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]