diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 39 | ||||
-rw-r--r-- | gcc/diagnostic-show-locus.c | 227 | ||||
-rw-r--r-- | gcc/diagnostic.c | 42 | ||||
-rw-r--r-- | gcc/edit-context.c | 248 | ||||
-rw-r--r-- | gcc/edit-context.h | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Wmissing-braces-fixits.c | 62 |
7 files changed, 202 insertions, 425 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0157559..6441ac1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,42 @@ +2017-05-01 David Malcolm <dmalcolm@redhat.com> + + * diagnostic-show-locus.c (layout::get_expanded_location): Rewrite + to use new fixit_hint representation, using the "replace" logic. + (get_line_span_for_fixit_hint): Likewise. + (layout::print_any_fixits): Likewise. + (selftest::test_one_liner_many_fixits): Rename to... + (selftest::test_one_liner_many_fixits_1): ...this, and update + comment and expected output to reflect that the multiple fix-it + hints are now consolidated into one insertion. + (selftest::test_one_liner_many_fixits_2): New test. + (selftest::test_diagnostic_show_locus_one_liner): Update for + above. + (selftest::test_fixit_consolidation): Update for fix-it API + change. + * diagnostic.c (print_parseable_fixits): Likewise. + * edit-context.c (edited_line::m_line_events): Convert from + auto_vec <line_event *> to auto_vec <line_event>. + (class line_event): Convert from abstract base class to a concrete + class, taking over the role of replace_event. + (class insert_event): Delete. + (class replace_event): Rename to class line_event. Convert to + half-open range. + (edit_context::add_fixits): Reimplement. + (edit_context::apply_insert): Delete. + (edit_context::apply_replace): Rename to... + (edit_context::apply_fixit): ...this. Convert to half-open range. + (edited_file::apply_insert): Delete. + (edited_file::apply_replace): Rename to... + (edited_file::apply_fixit): ...this. + (edited_line::~edited_line): Drop deletion of events. + (edited_line::apply_insert): Delete. + (edited_line::apply_replace): Rename to... + (edited_line::apply_fixit): ...this. Convert to half-open range. + Update for change to type of m_line_events. + * edit-context.h (edit_context::apply_insert): Delete. + (edit_context::apply_replace): Rename to... + (edit_context::apply_fixit): ...this. + 2017-05-01 Martin Sebor <msebor@redhat.com> * gimple-ssa-sprintf.c (format_integer): Set knownrange when it's diff --git a/gcc/diagnostic-show-locus.c b/gcc/diagnostic-show-locus.c index 5c386ae..3c10b69 100644 --- a/gcc/diagnostic-show-locus.c +++ b/gcc/diagnostic-show-locus.c @@ -941,32 +941,10 @@ layout::get_expanded_location (const line_span *line_span) const bool layout::validate_fixit_hint_p (const fixit_hint *hint) { - switch (hint->get_kind ()) - { - case fixit_hint::INSERT: - { - const fixit_insert *insert = static_cast <const fixit_insert *> (hint); - location_t loc = insert->get_location (); - if (LOCATION_FILE (loc) != m_exploc.file) - return false; - } - break; - - case fixit_hint::REPLACE: - { - const fixit_replace *replace - = static_cast <const fixit_replace *> (hint); - source_range src_range = replace->get_range (); - if (LOCATION_FILE (src_range.m_start) != m_exploc.file) - return false; - if (LOCATION_FILE (src_range.m_finish) != m_exploc.file) - return false; - } - break; - - default: - gcc_unreachable (); - } + if (LOCATION_FILE (hint->get_start_loc ()) != m_exploc.file) + return false; + if (LOCATION_FILE (hint->get_next_loc ()) != m_exploc.file) + return false; return true; } @@ -979,30 +957,8 @@ static line_span get_line_span_for_fixit_hint (const fixit_hint *hint) { gcc_assert (hint); - switch (hint->get_kind ()) - { - case fixit_hint::INSERT: - { - const fixit_insert *insert = static_cast <const fixit_insert *> (hint); - location_t loc = insert->get_location (); - int line = LOCATION_LINE (loc); - return line_span (line, line); - } - break; - - case fixit_hint::REPLACE: - { - const fixit_replace *replace - = static_cast <const fixit_replace *> (hint); - source_range src_range = replace->get_range (); - return line_span (LOCATION_LINE (src_range.m_start), - LOCATION_LINE (src_range.m_finish)); - } - break; - - default: - gcc_unreachable (); - } + return line_span (LOCATION_LINE (hint->get_start_loc ()), + LOCATION_LINE (hint->get_next_loc ())); } /* We want to print the pertinent source code at a diagnostic. The @@ -1264,62 +1220,47 @@ layout::print_any_fixits (int row) if (hint->affects_line_p (m_exploc.file, row)) { /* For now we assume each fixit hint can only touch one line. */ - switch (hint->get_kind ()) + if (hint->insertion_p ()) + { + /* This assumes the insertion just affects one line. */ + int start_column = LOCATION_COLUMN (hint->get_start_loc ()); + move_to_column (&column, start_column); + m_colorizer.set_fixit_insert (); + pp_string (m_pp, hint->get_string ()); + m_colorizer.set_normal_text (); + column += hint->get_length (); + } + else { - case fixit_hint::INSERT: - { - const fixit_insert *insert - = static_cast <const fixit_insert *> (hint); - /* This assumes the insertion just affects one line. */ - int start_column - = LOCATION_COLUMN (insert->get_location ()); - move_to_column (&column, start_column); - m_colorizer.set_fixit_insert (); - pp_string (m_pp, insert->get_string ()); - m_colorizer.set_normal_text (); - column += insert->get_length (); - } - break; - - case fixit_hint::REPLACE: - { - const fixit_replace *replace - = static_cast <const fixit_replace *> (hint); - source_range src_range = replace->get_range (); - int line = LOCATION_LINE (src_range.m_start); - int start_column = LOCATION_COLUMN (src_range.m_start); - int finish_column = LOCATION_COLUMN (src_range.m_finish); - - /* If the range of the replacement wasn't printed in the - annotation line, then print an extra underline to - indicate exactly what is being replaced. - Always show it for removals. */ - if (!annotation_line_showed_range_p (line, start_column, - finish_column) - || replace->get_length () == 0) - { - move_to_column (&column, start_column); - m_colorizer.set_fixit_delete (); - for (; column <= finish_column; column++) - pp_character (m_pp, '-'); - m_colorizer.set_normal_text (); - } - /* Print the replacement text. REPLACE also covers - removals, so only do this extra work (potentially starting - a new line) if we have actual replacement text. */ - if (replace->get_length () > 0) - { - move_to_column (&column, start_column); - m_colorizer.set_fixit_insert (); - pp_string (m_pp, replace->get_string ()); - m_colorizer.set_normal_text (); - column += replace->get_length (); - } - } - break; - - default: - gcc_unreachable (); + int line = LOCATION_LINE (hint->get_start_loc ()); + int start_column = LOCATION_COLUMN (hint->get_start_loc ()); + int finish_column = LOCATION_COLUMN (hint->get_next_loc ()) - 1; + + /* If the range of the replacement wasn't printed in the + annotation line, then print an extra underline to + indicate exactly what is being replaced. + Always show it for removals. */ + if (!annotation_line_showed_range_p (line, start_column, + finish_column) + || hint->get_length () == 0) + { + move_to_column (&column, start_column); + m_colorizer.set_fixit_delete (); + for (; column <= finish_column; column++) + pp_character (m_pp, '-'); + m_colorizer.set_normal_text (); + } + /* Print the replacement text. REPLACE also covers + removals, so only do this extra work (potentially starting + a new line) if we have actual replacement text. */ + if (hint->get_length () > 0) + { + move_to_column (&column, start_column); + m_colorizer.set_fixit_insert (); + pp_string (m_pp, hint->get_string ()); + m_colorizer.set_normal_text (); + column += hint->get_length (); + } } } } @@ -1852,41 +1793,45 @@ test_one_liner_fixit_validation_adhoc_locations () } } -/* Ensure that we can add an arbitrary number of fix-it hints to a - rich_location. */ +/* Test of consolidating insertions at the same location. */ static void -test_one_liner_many_fixits () +test_one_liner_many_fixits_1 () { test_diagnostic_context dc; location_t equals = linemap_position_for_column (line_table, 5); rich_location richloc (line_table, equals); for (int i = 0; i < 19; i++) richloc.add_fixit_insert_before ("a"); + ASSERT_EQ (1, richloc.get_num_fixit_hints ()); + diagnostic_show_locus (&dc, &richloc, DK_ERROR); + ASSERT_STREQ ("\n" + " foo = bar.field;\n" + " ^\n" + " aaaaaaaaaaaaaaaaaaa\n", + pp_formatted_text (dc.printer)); +} + +/* Ensure that we can add an arbitrary number of fix-it hints to a + rich_location, even if they are not consolidated. */ + +static void +test_one_liner_many_fixits_2 () +{ + test_diagnostic_context dc; + location_t equals = linemap_position_for_column (line_table, 5); + rich_location richloc (line_table, equals); + for (int i = 0; i < 19; i++) + { + location_t loc = linemap_position_for_column (line_table, i * 2); + richloc.add_fixit_insert_before (loc, "a"); + } ASSERT_EQ (19, richloc.get_num_fixit_hints ()); diagnostic_show_locus (&dc, &richloc, DK_ERROR); ASSERT_STREQ ("\n" " foo = bar.field;\n" " ^\n" - " a\n" - " a\n" - " a\n" - " a\n" - " a\n" - " a\n" - " a\n" - " a\n" - " a\n" - " a\n" - " a\n" - " a\n" - " a\n" - " a\n" - " a\n" - " a\n" - " a\n" - " a\n" - " a\n", + "a a a a a a a a a a a a a a a a a a a\n", pp_formatted_text (dc.printer)); } @@ -1924,7 +1869,8 @@ test_diagnostic_show_locus_one_liner (const line_table_case &case_) test_one_liner_fixit_replace_non_equal_range (); test_one_liner_fixit_replace_equal_secondary_range (); test_one_liner_fixit_validation_adhoc_locations (); - test_one_liner_many_fixits (); + test_one_liner_many_fixits_1 (); + test_one_liner_many_fixits_2 (); } /* Verify that we print fixits even if they only affect lines @@ -2027,6 +1973,7 @@ test_fixit_consolidation (const line_table_case &case_) const location_t c16 = linemap_position_for_column (line_table, 16); const location_t c17 = linemap_position_for_column (line_table, 17); const location_t c20 = linemap_position_for_column (line_table, 20); + const location_t c21 = linemap_position_for_column (line_table, 21); const location_t caret = c10; /* Insert + insert. */ @@ -2105,11 +2052,9 @@ test_fixit_consolidation (const line_table_case &case_) /* They should have been merged into a single "replace". */ ASSERT_EQ (1, richloc.get_num_fixit_hints ()); const fixit_hint *hint = richloc.get_fixit_hint (0); - ASSERT_EQ (fixit_hint::REPLACE, hint->get_kind ()); - const fixit_replace *replace = (const fixit_replace *)hint; - ASSERT_STREQ ("foobar", replace->get_string ()); - ASSERT_EQ (c10, replace->get_range ().m_start); - ASSERT_EQ (c20, replace->get_range ().m_finish); + ASSERT_STREQ ("foobar", hint->get_string ()); + ASSERT_EQ (c10, hint->get_start_loc ()); + ASSERT_EQ (c21, hint->get_next_loc ()); } } @@ -2129,11 +2074,9 @@ test_fixit_consolidation (const line_table_case &case_) range extended to cover that of the removal. */ ASSERT_EQ (1, richloc.get_num_fixit_hints ()); const fixit_hint *hint = richloc.get_fixit_hint (0); - ASSERT_EQ (fixit_hint::REPLACE, hint->get_kind ()); - const fixit_replace *replace = (const fixit_replace *)hint; - ASSERT_STREQ ("foo", replace->get_string ()); - ASSERT_EQ (c10, replace->get_range ().m_start); - ASSERT_EQ (c20, replace->get_range ().m_finish); + ASSERT_STREQ ("foo", hint->get_string ()); + ASSERT_EQ (c10, hint->get_start_loc ()); + ASSERT_EQ (c21, hint->get_next_loc ()); } } @@ -2151,11 +2094,9 @@ test_fixit_consolidation (const line_table_case &case_) /* They should have been merged into a single "replace-with-empty". */ ASSERT_EQ (1, richloc.get_num_fixit_hints ()); const fixit_hint *hint = richloc.get_fixit_hint (0); - ASSERT_EQ (fixit_hint::REPLACE, hint->get_kind ()); - const fixit_replace *replace = (const fixit_replace *)hint; - ASSERT_STREQ ("", replace->get_string ()); - ASSERT_EQ (c10, replace->get_range ().m_start); - ASSERT_EQ (c20, replace->get_range ().m_finish); + ASSERT_STREQ ("", hint->get_string ()); + ASSERT_EQ (c10, hint->get_start_loc ()); + ASSERT_EQ (c21, hint->get_next_loc ()); } } } diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c index dbaf8d6..dc81755 100644 --- a/gcc/diagnostic.c +++ b/gcc/diagnostic.c @@ -757,43 +757,13 @@ print_parseable_fixits (pretty_printer *pp, rich_location *richloc) expanded_location start_exploc = expand_location (start_loc); pp_string (pp, "fix-it:"); print_escaped_string (pp, start_exploc.file); - source_location end_loc; - /* For compatibility with clang, print as a half-open range. */ - if (hint->maybe_get_end_loc (&end_loc)) - { - expanded_location end_exploc = expand_location (end_loc); - pp_printf (pp, ":{%i:%i-%i:%i}:", - start_exploc.line, start_exploc.column, - end_exploc.line, end_exploc.column + 1); - } - else - { - pp_printf (pp, ":{%i:%i-%i:%i}:", - start_exploc.line, start_exploc.column, - start_exploc.line, start_exploc.column); - } - switch (hint->get_kind ()) - { - case fixit_hint::INSERT: - { - const fixit_insert *insert - = static_cast <const fixit_insert *> (hint); - print_escaped_string (pp, insert->get_string ()); - } - break; - - case fixit_hint::REPLACE: - { - const fixit_replace *replace - = static_cast <const fixit_replace *> (hint); - print_escaped_string (pp, replace->get_string ()); - } - break; - - default: - gcc_unreachable (); - } + source_location next_loc = hint->get_next_loc (); + expanded_location next_exploc = expand_location (next_loc); + pp_printf (pp, ":{%i:%i-%i:%i}:", + start_exploc.line, start_exploc.column, + next_exploc.line, next_exploc.column); + print_escaped_string (pp, hint->get_string ()); pp_newline (pp); } } diff --git a/gcc/edit-context.c b/gcc/edit-context.c index db8a5dc..bea8a8a 100644 --- a/gcc/edit-context.c +++ b/gcc/edit-context.c @@ -45,8 +45,6 @@ class edit_context; class edited_file; class edited_line; class line_event; - class insert_event; - class replace_event; /* A struct to hold the params of a print_diff call. */ @@ -71,11 +69,10 @@ class edited_file const char *get_filename () const { return m_filename; } char *get_content (); - bool apply_insert (int line, int column, const char *str, int len); - bool apply_replace (int line, int start_column, - int finish_column, - const char *replacement_str, - int replacement_len); + bool apply_fixit (int line, int start_column, + int next_column, + const char *replacement_str, + int replacement_len); int get_effective_column (int line, int column); static int call_print_diff (const char *, edited_file *file, @@ -119,11 +116,10 @@ class edited_line int get_len () const { return m_len; } int get_effective_column (int orig_column) const; - bool apply_insert (int column, const char *str, int len); - bool apply_replace (int start_column, - int finish_column, - const char *replacement_str, - int replacement_len); + bool apply_fixit (int start_column, + int next_column, + const char *replacement_str, + int replacement_len); private: void ensure_capacity (int len); @@ -134,55 +130,23 @@ class edited_line char *m_content; int m_len; int m_alloc_sz; - auto_vec <line_event *> m_line_events; + auto_vec <line_event> m_line_events; }; -/* Abstract base class for representing events that have occurred - on one line of one file. */ - -class line_event -{ - public: - virtual ~line_event () {} - virtual int get_effective_column (int orig_column) const = 0; -}; - -/* Concrete subclass of line_event: an insertion of some text - at some column on the line. +/* Class for representing edit events that have occurred on one line of + one file: the replacement of some text betweeen some columns + on the line. Subsequent events will need their columns adjusting if they're - are on this line and their column is >= the insertion point. */ + are on this line and their column is >= the start point. */ -class insert_event : public line_event -{ - public: - insert_event (int column, int len) : m_column (column), m_len (len) {} - int get_effective_column (int orig_column) const FINAL OVERRIDE - { - if (orig_column >= m_column) - return orig_column + m_len; - else - return orig_column; - } - - private: - int m_column; - int m_len; -}; - -/* Concrete subclass of line_event: the replacement of some text - betweeen some columns on the line. - - Subsequent events will need their columns adjusting if they're - are on this line and their column is >= the finish point. */ - -class replace_event : public line_event +class line_event { public: - replace_event (int start, int finish, int len) : m_start (start), - m_finish (finish), m_delta (len - (finish + 1 - start)) {} + line_event (int start, int next, int len) : m_start (start), + m_next (next), m_delta (len - (next - start)) {} - int get_effective_column (int orig_column) const FINAL OVERRIDE + int get_effective_column (int orig_column) const { if (orig_column >= m_start) return orig_column += m_delta; @@ -192,7 +156,7 @@ class replace_event : public line_event private: int m_start; - int m_finish; + int m_next; int m_delta; }; @@ -221,27 +185,8 @@ edit_context::add_fixits (rich_location *richloc) for (unsigned i = 0; i < richloc->get_num_fixit_hints (); i++) { const fixit_hint *hint = richloc->get_fixit_hint (i); - switch (hint->get_kind ()) - { - case fixit_hint::INSERT: - if (!apply_insert ((const fixit_insert *)hint)) - { - /* Failure. */ - m_valid = false; - return; - } - break; - case fixit_hint::REPLACE: - if (!apply_replace ((const fixit_replace *)hint)) - { - /* Failure. */ - m_valid = false; - return; - } - break; - default: - gcc_unreachable (); - } + if (!apply_fixit (hint)) + m_valid = false; } } @@ -302,45 +247,25 @@ edit_context::print_diff (pretty_printer *pp, bool show_filenames) applied, or false otherwise. */ bool -edit_context::apply_insert (const fixit_insert *insert) -{ - expanded_location exploc = expand_location (insert->get_location ()); - - if (exploc.column == 0) - return false; - - edited_file &file = get_or_insert_file (exploc.file); - if (!m_valid) - return false; - return file.apply_insert (exploc.line, exploc.column, insert->get_string (), - insert->get_length ()); -} - -/* Attempt to apply the given fixit. Return true if it can be - applied, or false otherwise. */ - -bool -edit_context::apply_replace (const fixit_replace *replace) +edit_context::apply_fixit (const fixit_hint *hint) { - source_range range = replace->get_range (); - - expanded_location start = expand_location (range.m_start); - expanded_location finish = expand_location (range.m_finish); - if (start.file != finish.file) + expanded_location start = expand_location (hint->get_start_loc ()); + expanded_location next_loc = expand_location (hint->get_next_loc ()); + if (start.file != next_loc.file) return false; - if (start.line != finish.line) + if (start.line != next_loc.line) return false; if (start.column == 0) return false; - if (finish.column == 0) + if (next_loc.column == 0) return false; edited_file &file = get_or_insert_file (start.file); if (!m_valid) return false; - return file.apply_replace (start.line, start.column, finish.column, - replace->get_string (), - replace->get_length ()); + return file.apply_fixit (start.line, start.column, next_loc.column, + hint->get_string (), + hint->get_length ()); } /* Locate the edited_file * for FILENAME, if any @@ -409,37 +334,21 @@ edited_file::get_content () return xstrdup (pp_formatted_text (&pp)); } -/* Attempt to insert the string INSERT_STR with length INSERT_LEN - at LINE and COLUMN, updating the in-memory copy of the line, and - the record of edits to the line. */ - -bool -edited_file::apply_insert (int line, int column, - const char *insert_str, - int insert_len) -{ - edited_line *el = get_or_insert_line (line); - if (!el) - return false; - return el->apply_insert (column, insert_str, insert_len); -} - -/* Attempt to replace columns START_COLUMN through FINISH_COLUMN of LINE - with the string REPLACEMENT_STR of length REPLACEMENT_LEN, +/* Attempt to replace columns START_COLUMN up to but not including NEXT_COLUMN + of LINE with the string REPLACEMENT_STR of length REPLACEMENT_LEN, updating the in-memory copy of the line, and the record of edits to the line. */ bool -edited_file::apply_replace (int line, int start_column, - int finish_column, - const char *replacement_str, - int replacement_len) +edited_file::apply_fixit (int line, int start_column, int next_column, + const char *replacement_str, + int replacement_len) { edited_line *el = get_or_insert_line (line); if (!el) return false; - return el->apply_replace (start_column, finish_column, replacement_str, - replacement_len); + return el->apply_fixit (start_column, next_column, replacement_str, + replacement_len); } /* Given line LINE, map from COLUMN in the input file to its current @@ -698,11 +607,6 @@ edited_line::edited_line (const char *filename, int line_num) edited_line::~edited_line () { free (m_content); - - int i; - line_event *event; - FOR_EACH_VEC_ELT (m_line_events, i, event) - delete event; } /* A callback for deleting edited_line *, for use as a @@ -727,85 +631,41 @@ edited_line::get_effective_column (int orig_column) const return orig_column; } -/* Attempt to insert the string INSERT_STR with length INSERT_LEN at COLUMN - of this line, updating the in-memory copy of the line, and the record - of edits to it. - Return true if successful; false if an error occurred. */ - -bool -edited_line::apply_insert (int column, const char *insert_str, - int insert_len) -{ - column = get_effective_column (column); - - int start_offset = column - 1; - gcc_assert (start_offset >= 0); - if (start_offset > m_len) - return false; - - /* Ensure buffer is big enough. */ - size_t new_len = m_len + insert_len; - ensure_capacity (new_len); - - char *suffix = m_content + start_offset; - gcc_assert (suffix <= m_content + m_len); - size_t len_suffix = (m_content + m_len) - suffix; - - /* Move successor content into position. They overlap, so use memmove. */ - memmove (m_content + start_offset + insert_len, - suffix, len_suffix); - - /* Replace target content. They don't overlap, so use memcpy. */ - memcpy (m_content + start_offset, - insert_str, - insert_len); - - m_len = new_len; - - ensure_terminated (); - - /* Record the insertion, so that future changes to the line can have - their column information adjusted accordingly. */ - m_line_events.safe_push (new insert_event (column, insert_len)); - - return true; -} - -/* Attempt to replace columns START_COLUMN through FINISH_COLUMN of the line - with the string REPLACEMENT_STR of length REPLACEMENT_LEN, - updating the in-memory copy of the line, and the record of edits to - the line. +/* Attempt to replace columns START_COLUMN up to but not including + NEXT_COLUMN of the line with the string REPLACEMENT_STR of + length REPLACEMENT_LEN, updating the in-memory copy of the line, + and the record of edits to the line. Return true if successful; false if an error occurred. */ bool -edited_line::apply_replace (int start_column, - int finish_column, - const char *replacement_str, - int replacement_len) +edited_line::apply_fixit (int start_column, + int next_column, + const char *replacement_str, + int replacement_len) { start_column = get_effective_column (start_column); - finish_column = get_effective_column (finish_column); + next_column = get_effective_column (next_column); int start_offset = start_column - 1; - int end_offset = finish_column - 1; + int next_offset = next_column - 1; gcc_assert (start_offset >= 0); - gcc_assert (end_offset >= 0); + gcc_assert (next_offset >= 0); - if (start_column > finish_column) + if (start_column > next_column) return false; - if (start_offset >= m_len) + if (start_offset >= (m_len + 1)) return false; - if (end_offset >= m_len) + if (next_offset >= (m_len + 1)) return false; - size_t victim_len = end_offset - start_offset + 1; + size_t victim_len = next_offset - start_offset; /* Ensure buffer is big enough. */ size_t new_len = m_len + replacement_len - victim_len; ensure_capacity (new_len); - char *suffix = m_content + end_offset + 1; + char *suffix = m_content + next_offset; gcc_assert (suffix <= m_content + m_len); size_t len_suffix = (m_content + m_len) - suffix; @@ -824,8 +684,8 @@ edited_line::apply_replace (int start_column, /* Record the replacement, so that future changes to the line can have their column information adjusted accordingly. */ - m_line_events.safe_push (new replace_event (start_column, finish_column, - replacement_len)); + m_line_events.safe_push (line_event (start_column, next_column, + replacement_len)); return true; } diff --git a/gcc/edit-context.h b/gcc/edit-context.h index 0d79f07..402b8b1 100644 --- a/gcc/edit-context.h +++ b/gcc/edit-context.h @@ -56,8 +56,7 @@ class edit_context void print_diff (pretty_printer *pp, bool show_filenames); private: - bool apply_insert (const fixit_insert *insert); - bool apply_replace (const fixit_replace *replace); + bool apply_fixit (const fixit_hint *hint); edited_file *get_file (const char *filename); edited_file &get_or_insert_file (const char *filename); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9d69bf7..dc80b56 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2017-05-01 David Malcolm <dmalcolm@redhat.com> + + * gcc.dg/Wmissing-braces-fixits.c: Update expected output to + reflect insertion fix-it hints at the same location now being + consolidated. + 2017-05-01 Martin Sebor <msebor@redhat.com> * tree-ssa/builtin-sprintf-warn-18.c: Adjust to avoid failures diff --git a/gcc/testsuite/gcc.dg/Wmissing-braces-fixits.c b/gcc/testsuite/gcc.dg/Wmissing-braces-fixits.c index 37998d0..b7d66cd 100644 --- a/gcc/testsuite/gcc.dg/Wmissing-braces-fixits.c +++ b/gcc/testsuite/gcc.dg/Wmissing-braces-fixits.c @@ -48,13 +48,9 @@ int arr_2_2_3[2][2][3] = \ /* { dg-begin-multiline-output "" } { 0, 1, 2, 3, 4, 5, ^ - { - { } { } - } + {{ } { }} 6, 7, 8, 9, 10, 11}; - { - { } { } - } + {{ } { }} { dg-end-multiline-output "" } */ int arr_2_3_2[2][3][2] = \ @@ -63,13 +59,9 @@ int arr_2_3_2[2][3][2] = \ /* { dg-begin-multiline-output "" } { 0, 1, 2, 3, 4, 5, ^ - { - { } { } { } - } + {{ } { } { }} 6, 7, 8, 9, 10, 11}; - { - { } { } { } - } + {{ } { } { }} { dg-end-multiline-output "" } */ int arr_6_2[6][2] = \ @@ -89,15 +81,9 @@ int arr_3_2_2[3][2][2] = \ /* { dg-begin-multiline-output "" } { 0, 1, 2, 3, 4, 5, ^ - { - { } { } - } { - { } + {{ } { }}{{ } 6, 7, 8, 9, 10, 11}; - { } - } { - { } { } - } + { }}{{ } { }} { dg-end-multiline-output "" } */ int arr_3_4[3][4] = \ @@ -128,13 +114,9 @@ int arr_2_1_6[2][1][6] = \ /* { dg-begin-multiline-output "" } { 0, 1, 2, 3, 4, 5, ^ - { - { } - } + {{ }} 6, 7, 8, 9, 10, 11}; - { - { } - } + {{ }} { dg-end-multiline-output "" } */ struct sf2 arr_6_sf2[6] = \ @@ -165,21 +147,9 @@ struct sa2 arr_6_sa2[6] = \ /* { dg-begin-multiline-output "" } { 0, 1, 2, 3, 4, 5, ^ - { - { } - } { - { } - } { - { } - } + {{ }}{{ }}{{ }} 6, 7, 8, 9, 10, 11}; - { - { } - } { - { } - } { - { } - } + {{ }}{{ }}{{ }} { dg-end-multiline-output "" } */ struct sa3 arr_4_sa3[4] = \ @@ -188,15 +158,7 @@ struct sa3 arr_4_sa3[4] = \ /* { dg-begin-multiline-output "" } { 0, 1, 2, 3, 4, 5, ^ - { - { } - } { - { } - } + {{ }}{{ }} 6, 7, 8, 9, 10, 11}; - { - { } - } { - { } - } + {{ }}{{ }} { dg-end-multiline-output "" } */ |