Add debugging ruler to diagnostic-show-locus.c
When debugging diagnostic-show-locus.c, it's invaluable to have a "ruler" showing column numbers. This patch adds in support via a new "show_ruler_p" flag within the diagnostic_context. There's no direct way for end-users to enable this, but plugins can enable it by setting the flag, so the plugin that tests the diagnostic subsystem uses this to verify that the ruler is correctly printed. gcc/ChangeLog: * diagnostic-show-locus.c (layout::layout): Call show_ruler if show_ruler_p was set on the context. (layout::show_ruler): New method. * diagnostic.h (struct diagnostic_context): Add field "show_ruler_p". gcc/testsuite/ChangeLog: * gcc.dg/plugin/diagnostic-test-show-locus-bw.c (test_very_wide_line): Add ruler to expected output. * gcc.dg/plugin/diagnostic-test-show-locus-color.c (test_very_wide_line): Likewise. * gcc.dg/plugin/diagnostic_plugin_test_show_locus.c (test_show_locus): Within the handling of "test_very_wide_line", enable show_ruler_p on the diagnostic context. From-SVN: r236080
This commit is contained in:
parent
4a3255dd43
commit
f3352cabb8
@ -1,3 +1,11 @@
|
||||
2016-05-10 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* diagnostic-show-locus.c (layout::layout): Call show_ruler
|
||||
if show_ruler_p was set on the context.
|
||||
(layout::show_ruler): New method.
|
||||
* diagnostic.h (struct diagnostic_context): Add field
|
||||
"show_ruler_p".
|
||||
|
||||
2016-05-10 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/71039
|
||||
|
@ -199,6 +199,8 @@ class layout
|
||||
void print_annotation_line (int row, const line_bounds lbounds);
|
||||
void print_any_fixits (int row, const rich_location *richloc);
|
||||
|
||||
void show_ruler (int max_column) const;
|
||||
|
||||
private:
|
||||
void calculate_line_spans ();
|
||||
|
||||
@ -653,6 +655,9 @@ layout::layout (diagnostic_context * context,
|
||||
m_x_offset = column - right_margin;
|
||||
gcc_assert (m_x_offset >= 0);
|
||||
}
|
||||
|
||||
if (context->show_ruler_p)
|
||||
show_ruler (m_x_offset + max_width);
|
||||
}
|
||||
|
||||
/* Return true iff we should print a heading when starting the
|
||||
@ -1084,6 +1089,40 @@ layout::move_to_column (int *column, int dest_column)
|
||||
}
|
||||
}
|
||||
|
||||
/* For debugging layout issues, render a ruler giving column numbers
|
||||
(after the 1-column indent). */
|
||||
|
||||
void
|
||||
layout::show_ruler (int max_column) const
|
||||
{
|
||||
/* Hundreds. */
|
||||
if (max_column > 99)
|
||||
{
|
||||
pp_space (m_pp);
|
||||
for (int column = 1 + m_x_offset; column <= max_column; column++)
|
||||
if (0 == column % 10)
|
||||
pp_character (m_pp, '0' + (column / 100) % 10);
|
||||
else
|
||||
pp_space (m_pp);
|
||||
pp_newline (m_pp);
|
||||
}
|
||||
|
||||
/* Tens. */
|
||||
pp_space (m_pp);
|
||||
for (int column = 1 + m_x_offset; column <= max_column; column++)
|
||||
if (0 == column % 10)
|
||||
pp_character (m_pp, '0' + (column / 10) % 10);
|
||||
else
|
||||
pp_space (m_pp);
|
||||
pp_newline (m_pp);
|
||||
|
||||
/* Units. */
|
||||
pp_space (m_pp);
|
||||
for (int column = 1 + m_x_offset; column <= max_column; column++)
|
||||
pp_character (m_pp, '0' + (column % 10));
|
||||
pp_newline (m_pp);
|
||||
}
|
||||
|
||||
} /* End of anonymous namespace. */
|
||||
|
||||
/* Print the physical source code corresponding to the location of
|
||||
|
@ -201,6 +201,10 @@ struct diagnostic_context
|
||||
source code (to avoid e.g. colorizing just the first character in
|
||||
a token, which would look strange). */
|
||||
bool colorize_source_p;
|
||||
|
||||
/* Usable by plugins; if true, print a debugging ruler above the
|
||||
source output. */
|
||||
bool show_ruler_p;
|
||||
};
|
||||
|
||||
static inline void
|
||||
|
@ -1,3 +1,13 @@
|
||||
2016-05-10 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* gcc.dg/plugin/diagnostic-test-show-locus-bw.c
|
||||
(test_very_wide_line): Add ruler to expected output.
|
||||
* gcc.dg/plugin/diagnostic-test-show-locus-color.c
|
||||
(test_very_wide_line): Likewise.
|
||||
* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
|
||||
(test_show_locus): Within the handling of "test_very_wide_line",
|
||||
enable show_ruler_p on the diagnostic context.
|
||||
|
||||
2016-05-10 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/71039
|
||||
|
@ -117,6 +117,9 @@ void test_very_wide_line (void)
|
||||
#if 0
|
||||
float f = foo * bar; /* { dg-warning "95: test" } */
|
||||
/* { dg-begin-multiline-output "" }
|
||||
0 0 0 0 0 0 1
|
||||
4 5 6 7 8 9 0
|
||||
6789012345678901234567890123456789012345678901234567890123456789012345
|
||||
float f = foo * bar;
|
||||
~~~~^~~~~
|
||||
{ dg-end-multiline-output "" } */
|
||||
|
@ -117,6 +117,9 @@ void test_very_wide_line (void)
|
||||
#if 0
|
||||
float f = foo * bar; /* { dg-warning "95: test" } */
|
||||
/* { dg-begin-multiline-output "" }
|
||||
0 0 0 0 0 0 1
|
||||
4 5 6 7 8 9 0
|
||||
6789012345678901234567890123456789012345678901234567890123456789012345
|
||||
float f = [01;35m[Kfoo * bar[m[K;
|
||||
[01;35m[K~~~~^~~~~[m[K
|
||||
{ dg-end-multiline-output "" } */
|
||||
|
@ -234,9 +234,11 @@ test_show_locus (function *fun)
|
||||
if (0 == strcmp (fnname, "test_very_wide_line"))
|
||||
{
|
||||
const int line = fnstart_line + 2;
|
||||
global_dc->show_ruler_p = true;
|
||||
warning_at (make_location (get_loc (line, 94), get_loc (line, 90),
|
||||
get_loc (line, 98)),
|
||||
0, "test");
|
||||
global_dc->show_ruler_p = false;
|
||||
}
|
||||
|
||||
/* Example of multiple carets. */
|
||||
|
Loading…
Reference in New Issue
Block a user