mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-10 03:20:27 +08:00
analyzer: ensure .dot output is valid for an empty BB
This patch fixes an issue with the output of -fdump-analyzer-supergraph on BBs with no statements, where the resulting files were unreadable by dot e.g.: Error: syntax error in line 1 ... <TABLE BORDER="0"></TABLE> ... in label of node node_10 gcc/analyzer/ChangeLog: * supergraph.cc (supernode::dump_dot): Ensure that the TABLE element has at least one TR. gcc/testsuite/ChangeLog: * gcc.dg/analyzer/dot-output.c: Add test coverage for a BB with no statements.
This commit is contained in:
parent
8397af8ed0
commit
718930c0c8
gcc
@ -1,3 +1,8 @@
|
||||
2020-01-14 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* supergraph.cc (supernode::dump_dot): Ensure that the TABLE
|
||||
element has at least one TR.
|
||||
|
||||
2020-01-14 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
PR analyzer/58237
|
||||
|
@ -450,6 +450,8 @@ supernode::dump_dot (graphviz_out *gv, const dump_args_t &args) const
|
||||
pp_string (pp, "<TABLE BORDER=\"0\">");
|
||||
pp_write_text_to_stream (pp);
|
||||
|
||||
bool had_row = false;
|
||||
|
||||
if (m_returning_call)
|
||||
{
|
||||
gv->begin_tr ();
|
||||
@ -464,18 +466,22 @@ supernode::dump_dot (graphviz_out *gv, const dump_args_t &args) const
|
||||
if (args.m_node_annotator)
|
||||
args.m_node_annotator->add_stmt_annotations (gv, m_returning_call);
|
||||
pp_newline (pp);
|
||||
|
||||
had_row = true;
|
||||
}
|
||||
|
||||
if (entry_p ())
|
||||
{
|
||||
pp_string (pp, "<TR><TD>ENTRY</TD></TR>");
|
||||
pp_newline (pp);
|
||||
had_row = true;
|
||||
}
|
||||
|
||||
if (return_p ())
|
||||
{
|
||||
pp_string (pp, "<TR><TD>EXIT</TD></TR>");
|
||||
pp_newline (pp);
|
||||
had_row = true;
|
||||
}
|
||||
|
||||
/* Phi nodes. */
|
||||
@ -492,6 +498,7 @@ supernode::dump_dot (graphviz_out *gv, const dump_args_t &args) const
|
||||
args.m_node_annotator->add_stmt_annotations (gv, stmt);
|
||||
|
||||
pp_newline (pp);
|
||||
had_row = true;
|
||||
}
|
||||
|
||||
/* Statements. */
|
||||
@ -508,6 +515,15 @@ supernode::dump_dot (graphviz_out *gv, const dump_args_t &args) const
|
||||
args.m_node_annotator->add_stmt_annotations (gv, stmt);
|
||||
|
||||
pp_newline (pp);
|
||||
had_row = true;
|
||||
}
|
||||
|
||||
/* Graphviz requires a TABLE element to have at least one TR
|
||||
(and each TR to have at least one TD). */
|
||||
if (!had_row)
|
||||
{
|
||||
pp_string (pp, "<TR><TD>(empty)</TD></TR>");
|
||||
pp_newline (pp);
|
||||
}
|
||||
|
||||
pp_string (pp, "</TABLE>>];\n\n");
|
||||
|
@ -1,3 +1,8 @@
|
||||
2020-01-14 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* gcc.dg/analyzer/dot-output.c: Add test coverage for a BB with
|
||||
no statements.
|
||||
|
||||
2020-01-14 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
PR analyzer/58237
|
||||
|
@ -27,6 +27,22 @@ int *test (int *buf, int n, int *out)
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Test that we can generate valid .dot files given a BB with no
|
||||
statements. */
|
||||
extern int func ();
|
||||
int test_2 (void)
|
||||
{
|
||||
int c1;
|
||||
do
|
||||
{
|
||||
c1 = func ();
|
||||
if (c1 == '\0')
|
||||
break;
|
||||
}
|
||||
while (c1);
|
||||
return c1;
|
||||
}
|
||||
|
||||
/* { dg-final { dg-check-dot "dot-output.c.callgraph.dot" } } */
|
||||
/* { dg-final { dg-check-dot "dot-output.c.eg.dot" } } */
|
||||
/* { dg-final { dg-check-dot "dot-output.c.state-purge.dot" } } */
|
||||
|
Loading…
x
Reference in New Issue
Block a user