Skip to content

Commit

Permalink
diagnostics: fix bad interaction between line spans and line numbers
Browse files Browse the repository at this point in the history
Without this patch, the "line span" markers and the line numbering
interacted badly, leading to stray copies of the line-span markers
appearing as prefixes on the first source line in a span:

missing-header-fixit-3.c: In function 'test':
missing-header-fixit-3.c:9:3: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
9 |   printf ("%i of %i\n", i, j);
  |   ^~~~~~
missing-header-fixit-3.c:9:3: warning: incompatible implicit declaration of built-in function 'printf'
missing-header-fixit-3.c:9:3: note: include '<stdio.h>' or provide a declaration of 'printf'
missing-header-fixit-3.c:1:1:
  |+#include <stdio.h>
missing-header-fixit-3.c:1:1:1 | /* Example of a fix-it hint that adds a #include directive,
missing-header-fixit-3.c:9:3:
missing-header-fixit-3.c:9:3:9 |   printf ("%i of %i\n", i, j);
  |   ^~~~~~

With this patch, we now correctly print:

missing-header-fixit-3.c: In function 'test':
missing-header-fixit-3.c:9:3: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
9 |   printf ("%i of %i\n", i, j);
  |   ^~~~~~
missing-header-fixit-3.c:9:3: warning: incompatible implicit declaration of built-in function 'printf'
missing-header-fixit-3.c:9:3: note: include '<stdio.h>' or provide a declaration of 'printf'
missing-header-fixit-3.c:1:1:
+ |+#include <stdio.h>
1 | /* Example of a fix-it hint that adds a #include directive,
missing-header-fixit-3.c:9:3:
9 |   printf ("%i of %i\n", i, j);
  |   ^~~~~~

gcc/ChangeLog:
	* diagnostic.c (default_diagnostic_start_span_fn): Call pp_string
	to emit the span, rather than setting it as the prefix.

gcc/testsuite/ChangeLog:
	* gcc.dg/missing-header-fixit-3.c: New test.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@263606 138bc75d-0d04-0410-961f-82ee72b054a4
  • Loading branch information
dmalcolm committed Aug 16, 2018
1 parent 87c50f5 commit 287abda
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 3 deletions.
5 changes: 5 additions & 0 deletions gcc/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
2018-08-16 David Malcolm <dmalcolm@redhat.com>

* diagnostic.c (default_diagnostic_start_span_fn): Call pp_string
to emit the span, rather than setting it as the prefix.

2018-08-16 David Malcolm <dmalcolm@redhat.com>

* diagnostic-show-locus.c (layout::start_annotation_line): Add
Expand Down
6 changes: 3 additions & 3 deletions gcc/diagnostic.c
Original file line number Diff line number Diff line change
Expand Up @@ -629,9 +629,9 @@ void
default_diagnostic_start_span_fn (diagnostic_context *context,
expanded_location exploc)
{
pp_set_prefix (context->printer,
diagnostic_get_location_text (context, exploc));
pp_string (context->printer, "");
char *text = diagnostic_get_location_text (context, exploc);
pp_string (context->printer, text);
free (text);
pp_newline (context->printer);
}

Expand Down
4 changes: 4 additions & 0 deletions gcc/testsuite/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
2018-08-16 David Malcolm <dmalcolm@redhat.com>

* gcc.dg/missing-header-fixit-3.c: New test.

2018-08-16 David Malcolm <dmalcolm@redhat.com>

* gcc.dg/plugin/diagnostic-test-show-locus-bw-line-numbers.c
Expand Down
27 changes: 27 additions & 0 deletions gcc/testsuite/gcc.dg/missing-header-fixit-3.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/* Example of a fix-it hint that adds a #include directive,
adding them to the top of the file, given that there is no
pre-existing #include. */

/* { dg-options "-fdiagnostics-show-caret -fdiagnostics-show-line-numbers" } */

void test (int i, int j)
{
printf ("%i of %i\n", i, j); /* { dg-warning "implicit declaration" } */
/* { dg-message "include '<stdio.h>' or provide a declaration of 'printf'" "" { target *-*-* } .-1 } */
#if 0
/* { dg-begin-multiline-output "" }
9 | printf ("%i of %i\n", i, j);
| ^~~~~~
{ dg-end-multiline-output "" } */
/* { dg-regexp ".*missing-header-fixit-3.c:1:1:" } */
/* { dg-begin-multiline-output "" }
+ |+#include <stdio.h>
1 | /* Example of a fix-it hint that adds a #include directive,
{ dg-end-multiline-output "" } */
/* { dg-regexp ".*missing-header-fixit-3.c:9:3:" } */
/* { dg-begin-multiline-output "" }
9 | printf ("%i of %i\n", i, j);
| ^~~~~~
{ dg-end-multiline-output "" } */
#endif
}

0 comments on commit 287abda

Please sign in to comment.