diagnostics: show an extra line of context in line-insertion fix-it hints (PR 87091)
This patch tweaks how we print line-insertion fix-it hints, so that the line before the insertion point is also printed, to give the user more context on the proposed change. For example, it changes: ../x86_64-pc-linux-gnu/libstdc++-v3/include/vector:87:22: note: message +++ |+#include <vector> 74 | #endif .... 87 | using vector = std::vector<_Tp, polymorphic_allocator<_Tp>>; | ^~~ to: ../x86_64-pc-linux-gnu/libstdc++-v3/include/vector:87:22: note: message 73 | # include <debug/vector> +++ |+#include <vector> 74 | #endif .... 87 | using vector = std::vector<_Tp, polymorphic_allocator<_Tp>>; | ^~~ gcc/ChangeLog: PR 87091 * diagnostic-show-locus.c (get_line_span_for_fixit_hint): Show the line above for line-insertion fix-it hints. (selftest::test_fixit_insert_containing_newline): Update the expected results, and add a test with line-numbering enabled. gcc/testsuite/ChangeLog: PR 87091 * g++.dg/pr85523.C: Extend expected output to show line before line-insertion fix-it hint. * gcc.dg/plugin/diagnostic-test-show-locus-bw-line-numbers.c (test_fixit_insert_newline): Add previous line to expected output. * gcc.dg/plugin/diagnostic-test-show-locus-bw.c: Likewise. * gcc.dg/plugin/diagnostic-test-show-locus-color.c: Likewise. From-SVN: r263884
This commit is contained in:
parent
47c3496bf8
commit
df308f8160
|
@ -1,3 +1,11 @@
|
|||
2018-08-27 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
PR 87091
|
||||
* diagnostic-show-locus.c (get_line_span_for_fixit_hint): Show the
|
||||
line above for line-insertion fix-it hints.
|
||||
(selftest::test_fixit_insert_containing_newline): Update the
|
||||
expected results, and add a test with line-numbering enabled.
|
||||
|
||||
2018-08-27 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR sanitizer/86962
|
||||
|
|
|
@ -1159,7 +1159,16 @@ static line_span
|
|||
get_line_span_for_fixit_hint (const fixit_hint *hint)
|
||||
{
|
||||
gcc_assert (hint);
|
||||
return line_span (LOCATION_LINE (hint->get_start_loc ()),
|
||||
|
||||
int start_line = LOCATION_LINE (hint->get_start_loc ());
|
||||
|
||||
/* For line-insertion fix-it hints, add the previous line to the
|
||||
span, to give the user more context on the proposed change. */
|
||||
if (hint->ends_with_newline_p ())
|
||||
if (start_line > 1)
|
||||
start_line--;
|
||||
|
||||
return line_span (start_line,
|
||||
LOCATION_LINE (hint->get_next_loc ()));
|
||||
}
|
||||
|
||||
|
@ -3479,13 +3488,31 @@ test_fixit_insert_containing_newline (const line_table_case &case_)
|
|||
{
|
||||
rich_location richloc (line_table, case_loc);
|
||||
richloc.add_fixit_insert_before (line_start, " break;\n");
|
||||
test_diagnostic_context dc;
|
||||
diagnostic_show_locus (&dc, &richloc, DK_ERROR);
|
||||
ASSERT_STREQ ("\n"
|
||||
"+ break;\n"
|
||||
" case 'b':\n"
|
||||
" ^~~~~~~~~\n",
|
||||
pp_formatted_text (dc.printer));
|
||||
|
||||
/* Without line numbers. */
|
||||
{
|
||||
test_diagnostic_context dc;
|
||||
diagnostic_show_locus (&dc, &richloc, DK_ERROR);
|
||||
ASSERT_STREQ ("\n"
|
||||
" x = a;\n"
|
||||
"+ break;\n"
|
||||
" case 'b':\n"
|
||||
" ^~~~~~~~~\n",
|
||||
pp_formatted_text (dc.printer));
|
||||
}
|
||||
|
||||
/* With line numbers. */
|
||||
{
|
||||
test_diagnostic_context dc;
|
||||
dc.show_line_numbers_p = true;
|
||||
diagnostic_show_locus (&dc, &richloc, DK_ERROR);
|
||||
ASSERT_STREQ ("\n"
|
||||
"2 | x = a;\n"
|
||||
"+ |+ break;\n"
|
||||
"3 | case 'b':\n"
|
||||
" | ^~~~~~~~~\n",
|
||||
pp_formatted_text (dc.printer));
|
||||
}
|
||||
}
|
||||
|
||||
/* Verify that attempts to add text with a newline fail when the
|
||||
|
|
|
@ -1,3 +1,13 @@
|
|||
2018-08-27 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
PR 87091
|
||||
* g++.dg/pr85523.C: Extend expected output to show line
|
||||
before line-insertion fix-it hint.
|
||||
* gcc.dg/plugin/diagnostic-test-show-locus-bw-line-numbers.c
|
||||
(test_fixit_insert_newline): Add previous line to expected output.
|
||||
* gcc.dg/plugin/diagnostic-test-show-locus-bw.c: Likewise.
|
||||
* gcc.dg/plugin/diagnostic-test-show-locus-color.c: Likewise.
|
||||
|
||||
2018-08-27 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR sanitizer/86962
|
||||
|
|
|
@ -47,6 +47,7 @@ struct s5 {
|
|||
i = z.i;
|
||||
} // { dg-warning "no return statement in function returning non-void" }
|
||||
/* { dg-begin-multiline-output "" }
|
||||
i = z.i;
|
||||
+ return *this;
|
||||
}
|
||||
^
|
||||
|
@ -63,6 +64,7 @@ struct s6 {
|
|||
i = z.i;
|
||||
} // { dg-warning "no return statement in function returning non-void" }
|
||||
/* { dg-begin-multiline-output "" }
|
||||
i = z.i;
|
||||
+ return *this;
|
||||
}
|
||||
^
|
||||
|
@ -81,6 +83,7 @@ struct s7 {
|
|||
i = z.i;
|
||||
} // { dg-warning "no return statement in function returning non-void" }
|
||||
/* { dg-begin-multiline-output "" }
|
||||
i = z.i;
|
||||
+ return *this;
|
||||
}
|
||||
^
|
||||
|
|
|
@ -111,6 +111,7 @@ void test_fixit_insert_newline (void)
|
|||
x = b;
|
||||
}
|
||||
/* { dg-begin-multiline-output "" }
|
||||
109 | x = a;
|
||||
+++ |+ break;
|
||||
110 | case 'b':
|
||||
| ^~~~~~~~
|
||||
|
|
|
@ -332,6 +332,7 @@ void test_fixit_insert_newline (void)
|
|||
x = b;
|
||||
}
|
||||
/* { dg-begin-multiline-output "" }
|
||||
x = a;
|
||||
+ break;
|
||||
case 'b':
|
||||
^~~~~~~~
|
||||
|
|
|
@ -217,6 +217,7 @@ void test_fixit_insert_newline (void)
|
|||
x = b;
|
||||
}
|
||||
/* { dg-begin-multiline-output "" }
|
||||
x = a;
|
||||
+[32m[K break;[m[K
|
||||
[01;35m[Kcase 'b'[m[K:
|
||||
[01;35m[K^~~~~~~~[m[K
|
||||
|
|
Loading…
Reference in New Issue