aboutsummaryrefslogtreecommitdiff
path: root/libcpp/ChangeLog
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2016-08-31 00:35:01 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2016-08-31 00:35:01 +0000
commitb816477a5ad7277b3a588e9a58cbcd764152b8d2 (patch)
tree4e3390b81b9f7a7b900db1de9278ee74805abf77 /libcpp/ChangeLog
parentfb8e9c5e8ee12831db4a020f7ccb63ac7bbf9dee (diff)
downloadgcc-b816477a5ad7277b3a588e9a58cbcd764152b8d2.zip
gcc-b816477a5ad7277b3a588e9a58cbcd764152b8d2.tar.gz
gcc-b816477a5ad7277b3a588e9a58cbcd764152b8d2.tar.bz2
Remove arbitrary limits from rich_location
This patch eliminates the hard-coded limits within rich_location (up to 3 ranges, up to 2 fixits). The common case is still handled by embedding the values inside rich_location - it only uses dynamic allocation if these limits are exceeded, so creation of rich_location instances on the stack should still be fast. This is implemented via a new container class, semi_embedded_vec <T, N>. gcc/ChangeLog: * diagnostic-show-locus.c (colorizer::begin_state): Support more than 3 ranges per diagnostic by alternating between color 1 and color 2. (layout::layout): Replace use of rich_location::MAX_RANGES with richloc->get_num_locations (). (layout::calculate_line_spans): Replace use of rich_location::MAX_RANGES with m_layout_ranges.length (). (layout::print_annotation_line): Handle arbitrary numbers of ranges in caret-printing by defaulting to '^'. (selftest::test_one_liner_many_fixits): New function. (test_diagnostic_show_locus_one_liner): Call it. * diagnostic.c (diagnostic_initialize): Update for renaming of rich_location::MAX_RANGES to rich_location::STATICALLY_ALLOCATED_RANGES. * diagnostic.h (struct diagnostic_context): Likewise. gcc/testsuite/ChangeLog: * gcc.dg/plugin/diagnostic-test-show-locus-bw.c (test_many_nested_locations): New function. * gcc.dg/plugin/diagnostic_plugin_test_show_locus.c (test_show_locus): Handle "test_many_nested_locations". libcpp/ChangeLog: * include/line-map.h (class semi_embedded_vec): New class. (semi_embedded_vec<T, NUM_EMBEDDED>::semi_embedded_vec): New ctor. (semi_embedded_vec<T, NUM_EMBEDDED>::~semi_embedded_vec): New dtor. (semi_embedded_vec<T, NUM_EMBEDDED>::operator[]): New methods. (semi_embedded_vec<T, NUM_EMBEDDED>::push): New method. (semi_embedded_vec<T, NUM_EMBEDDED>::truncate): New method. (rich_location::get_num_locations): Reimplement in terms of m_ranges. (rich_location::get_range): Make non-inline. (rich_location::get_num_fixit_hints): Reimplement in terms of m_fixit_hints. (rich_location::add_fixit): New function. (rich_location::MAX_RANGES): Rename to... (rich_location::STATICALLY_ALLOCATED_RANGES): ...this. (rich_location::MAX_FIXIT_HINTS): Rename to... (rich_location::STATICALLY_ALLOCATED_RANGES): ...this, and make private. (rich_location::m_num_ranges): Eliminate in favor of... (rich_location::m_ranges): ...this, converting from a fixed-size array to a semi_embedded_vec. (rich_location::m_num_fixit_hints): Eliminate in favor of... (rich_location::m_fixit_hints): ...this, converting from a fixed-size array to a semi_embedded_vec. * line-map.c (rich_location::rich_location): Update for above changes. (rich_location::~rich_location): Likewise. (rich_location::get_loc): Likewise. (rich_location::get_range): New methods. (rich_location::add_range): Update for above changes. (rich_location::set_range): Likewise. (rich_location::add_fixit_insert): Likewise. (rich_location::add_fixit_replace): Likewise. (rich_location::get_last_fixit_hint): Likewise. (rich_location::reject_impossible_fixit): Likewise. (rich_location::add_fixit): New method. From-SVN: r239879
Diffstat (limited to 'libcpp/ChangeLog')
-rw-r--r--libcpp/ChangeLog39
1 files changed, 39 insertions, 0 deletions
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index a753033..595d6ca 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,5 +1,44 @@
2016-08-30 David Malcolm <dmalcolm@redhat.com>
+ * include/line-map.h (class semi_embedded_vec): New class.
+ (semi_embedded_vec<T, NUM_EMBEDDED>::semi_embedded_vec): New ctor.
+ (semi_embedded_vec<T, NUM_EMBEDDED>::~semi_embedded_vec): New
+ dtor.
+ (semi_embedded_vec<T, NUM_EMBEDDED>::operator[]): New methods.
+ (semi_embedded_vec<T, NUM_EMBEDDED>::push): New method.
+ (semi_embedded_vec<T, NUM_EMBEDDED>::truncate): New method.
+ (rich_location::get_num_locations): Reimplement in terms of
+ m_ranges.
+ (rich_location::get_range): Make non-inline.
+ (rich_location::get_num_fixit_hints): Reimplement in terms of
+ m_fixit_hints.
+ (rich_location::add_fixit): New function.
+ (rich_location::MAX_RANGES): Rename to...
+ (rich_location::STATICALLY_ALLOCATED_RANGES): ...this.
+ (rich_location::MAX_FIXIT_HINTS): Rename to...
+ (rich_location::STATICALLY_ALLOCATED_RANGES): ...this, and make
+ private.
+ (rich_location::m_num_ranges): Eliminate in favor of...
+ (rich_location::m_ranges): ...this, converting from a fixed-size
+ array to a semi_embedded_vec.
+ (rich_location::m_num_fixit_hints): Eliminate in favor of...
+ (rich_location::m_fixit_hints): ...this, converting from a
+ fixed-size array to a semi_embedded_vec.
+ * line-map.c (rich_location::rich_location): Update for above
+ changes.
+ (rich_location::~rich_location): Likewise.
+ (rich_location::get_loc): Likewise.
+ (rich_location::get_range): New methods.
+ (rich_location::add_range): Update for above changes.
+ (rich_location::set_range): Likewise.
+ (rich_location::add_fixit_insert): Likewise.
+ (rich_location::add_fixit_replace): Likewise.
+ (rich_location::get_last_fixit_hint): Likewise.
+ (rich_location::reject_impossible_fixit): Likewise.
+ (rich_location::add_fixit): New method.
+
+2016-08-30 David Malcolm <dmalcolm@redhat.com>
+
* include/line-map.h (rich_location::add_fixit_insert): Add
comments. Add overload omitting the source_location param.
(rich_location::add_fixit_remove): Add comments. Add overloads