aboutsummaryrefslogtreecommitdiff
path: root/gcc/gcc-rich-location.h
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2017-07-11 13:43:31 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2017-07-11 13:43:31 +0000
commita10631530f1719c92d70117455e2a207975b350b (patch)
treeacbc15e7a9bfdeafeb290b090773e2ae649fdc6f /gcc/gcc-rich-location.h
parentd988b35c9a330535dda0a46c79f6312fd3f846c6 (diff)
downloadgcc-a10631530f1719c92d70117455e2a207975b350b.zip
gcc-a10631530f1719c92d70117455e2a207975b350b.tar.gz
gcc-a10631530f1719c92d70117455e2a207975b350b.tar.bz2
diagnostics: support compact printing of secondary locations
gcc/ChangeLog: * diagnostic-show-locus.c: Include "gcc-rich-location.h". (layout::m_primary_loc): New field. (layout::layout): Initialize new field. Move location filtering logic from here to... (layout::maybe_add_location_range): ...this new method. Add support for filtering to just the lines already specified by other locations. (layout::will_show_line_p): New method. (selftest::test_add_location_if_nearby): New test function. (selftest::diagnostic_show_locus_c_tests): Call it. * gcc-rich-location.h (gcc_rich_location::add_location_if_nearby): New method. From-SVN: r250133
Diffstat (limited to 'gcc/gcc-rich-location.h')
-rw-r--r--gcc/gcc-rich-location.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/gcc-rich-location.h b/gcc/gcc-rich-location.h
index 49708ca..2720f38 100644
--- a/gcc/gcc-rich-location.h
+++ b/gcc/gcc-rich-location.h
@@ -40,6 +40,27 @@ class gcc_rich_location : public rich_location
void add_fixit_misspelled_id (location_t misspelled_token_loc,
tree hint_id);
+
+ /* If LOC is within the spans of lines that will already be printed for
+ this gcc_rich_location, then add it as a secondary location
+ and return true.
+
+ Otherwise return false.
+
+ This allows for a diagnostic to compactly print secondary locations
+ in one diagnostic when these are near enough the primary locations for
+ diagnostics-show-locus.c to cope with them, and to fall back to
+ printing them via a note otherwise e.g.:
+
+ gcc_rich_location richloc (primary_loc);
+ bool added secondary = richloc.add_location_if_nearby (secondary_loc);
+ error_at_rich_loc (&richloc, "main message");
+ if (!added secondary)
+ inform (secondary_loc, "message for secondary");
+
+ Implemented in diagnostic-show-locus.c. */
+
+ bool add_location_if_nearby (location_t loc);
};
#endif /* GCC_RICH_LOCATION_H */