From 93814e2d690f7ccae4d87365b66d05cfa4a11576 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Fri, 10 Nov 2017 15:40:17 +0100 Subject: [PATCH] GCOV: do not support unexecuted blocks in Ada 2017-11-10 Martin Liska * coverage.c (coverage_init): Stream information about support of has_unexecuted_blocks. * doc/gcov.texi: Document that. * gcov-dump.c (dump_gcov_file): Support it in gcov_dump tool. * gcov.c (read_graph_file): Likewise. (output_line_beginning): Fix a small issue with color output. From-SVN: r254627 --- gcc/ChangeLog | 10 ++++++++++ gcc/coverage.c | 3 +++ gcc/doc/gcov.texi | 2 +- gcc/gcov-dump.c | 5 +++++ gcc/gcov.c | 7 ++++++- 5 files changed, 25 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1ed540a29e3..de86f33961b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2017-11-10 Martin Liska + + * coverage.c (coverage_init): Stream information about + support of has_unexecuted_blocks. + * doc/gcov.texi: Document that. + * gcov-dump.c (dump_gcov_file): Support it in gcov_dump tool. + * gcov.c (read_graph_file): Likewise. + (output_line_beginning): Fix a small issue with + color output. + 2017-11-10 Bin Cheng * tree-predcom.c (determine_roots_comp): Avoid memory leak by freeing diff --git a/gcc/coverage.c b/gcc/coverage.c index f57897b8314..ea05d94f441 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -1269,6 +1269,9 @@ coverage_init (const char *filename) gcov_write_unsigned (GCOV_NOTE_MAGIC); gcov_write_unsigned (GCOV_VERSION); gcov_write_unsigned (bbg_file_stamp); + + /* Do not support has_unexecuted_blocks for Ada. */ + gcov_write_unsigned (strcmp (lang_hooks.name, "GNU Ada") != 0); } } diff --git a/gcc/doc/gcov.texi b/gcc/doc/gcov.texi index 6f6a92c131a..8bf422e58d8 100644 --- a/gcc/doc/gcov.texi +++ b/gcc/doc/gcov.texi @@ -374,7 +374,7 @@ marked @samp{$$$$$} or @samp{%%%%%}, depending on whether a basic block is reachable via non-exceptional or exceptional paths. Executed basic blocks having a statement with zero @var{execution_count} end with @samp{*} character and are colored with magenta color with @option{-k} -option. +option. The functionality is not supported in Ada. Note that GCC can completely remove the bodies of functions that are not needed -- for instance if they are inlined everywhere. Such functions diff --git a/gcc/gcov-dump.c b/gcc/gcov-dump.c index c4e05cd4795..e5e649cb18f 100644 --- a/gcc/gcov-dump.c +++ b/gcc/gcov-dump.c @@ -217,6 +217,11 @@ dump_gcov_file (const char *filename) printf ("%s:stamp %lu\n", filename, (unsigned long)stamp); } + /* Support for unexecuted basic blocks. */ + unsigned support_unexecuted_blocks = gcov_read_unsigned (); + if (!support_unexecuted_blocks) + printf ("%s: has_unexecuted_block is not supported\n", filename); + while (1) { gcov_position_t base, position = gcov_position (); diff --git a/gcc/gcov.c b/gcc/gcov.c index 846a2326196..7152372ef31 100644 --- a/gcc/gcov.c +++ b/gcc/gcov.c @@ -424,6 +424,9 @@ static char *bbg_file_name; /* Stamp of the bbg file */ static unsigned bbg_stamp; +/* Supports has_unexecuted_blocks functionality. */ +static unsigned bbg_supports_has_unexecuted_blocks; + /* Name and file pointer of the input file for the count data (gcda). */ static char *da_file_name; @@ -1492,6 +1495,7 @@ read_graph_file (void) bbg_file_name, v, e); } bbg_stamp = gcov_read_unsigned (); + bbg_supports_has_unexecuted_blocks = gcov_read_unsigned (); while ((tag = gcov_read_unsigned ())) { @@ -2732,7 +2736,8 @@ output_line_beginning (FILE *f, bool exists, bool unexceptional, if (count > 0) { s = format_gcov (count, 0, -1); - if (has_unexecuted_block) + if (has_unexecuted_block + && bbg_supports_has_unexecuted_blocks) { if (flag_use_colors) { -- 2.30.2