diff options
author | Martin Liska <mliska@suse.cz> | 2019-03-14 10:33:54 +0100 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2019-03-14 09:33:54 +0000 |
commit | b81547179688b601af97fc2185489dbea1cd86b2 (patch) | |
tree | 3b014b7c0ae678b661a9596e5af81a9395664ec1 /gcc | |
parent | ea9d9d749c3203e9fb01267fabecad93b7f1c06c (diff) | |
download | gcc-b81547179688b601af97fc2185489dbea1cd86b2.zip gcc-b81547179688b601af97fc2185489dbea1cd86b2.tar.gz gcc-b81547179688b601af97fc2185489dbea1cd86b2.tar.bz2 |
GCOV: print {start,end}_column in JSON file and gcov-dump tool.
2019-03-14 Martin Liska <mliska@suse.cz>
* coverage.c (coverage_begin_function): Stream also
end_column.
* doc/gcov.texi: Document 2 new fields in JSON file. Improve
documentation about function declaration location.
* gcov-dump.c (tag_function): Print whole range
of function declaration.
* gcov.c (struct function_info): Add end_column field.
(function_info::function_info): Initialize it.
(output_json_intermediate_file): Output {start,end}_column
fields.
(read_graph_file): Read end_column.
From-SVN: r269678
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/coverage.c | 2 | ||||
-rw-r--r-- | gcc/doc/gcov.texi | 15 | ||||
-rw-r--r-- | gcc/gcov-dump.c | 4 | ||||
-rw-r--r-- | gcc/gcov.c | 10 |
5 files changed, 42 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2d2495c..86a2319 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2019-03-14 Martin Liska <mliska@suse.cz> + + * coverage.c (coverage_begin_function): Stream also + end_column. + * doc/gcov.texi: Document 2 new fields in JSON file. Improve + documentation about function declaration location. + * gcov-dump.c (tag_function): Print whole range + of function declaration. + * gcov.c (struct function_info): Add end_column field. + (function_info::function_info): Initialize it. + (output_json_intermediate_file): Output {start,end}_column + fields. + (read_graph_file): Read end_column. + 2019-03-14 Richard Biener <rguenther@suse.de> PR middle-end/89698 diff --git a/gcc/coverage.c b/gcc/coverage.c index a34c5da..1ffefd5 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -652,8 +652,10 @@ coverage_begin_function (unsigned lineno_checksum, unsigned cfg_checksum) /* Function can start in a single file and end in another one. */ int end_line = endloc.file == xloc.file ? endloc.line : xloc.line; + int end_column = endloc.file == xloc.file ? endloc.column: xloc.column; gcc_assert (xloc.line <= end_line); gcov_write_unsigned (end_line); + gcov_write_unsigned (end_column); gcov_write_length (offset); return !gcov_is_error (); diff --git a/gcc/doc/gcov.texi b/gcc/doc/gcov.texi index 0960e4a..ecad5d1 100644 --- a/gcc/doc/gcov.texi +++ b/gcc/doc/gcov.texi @@ -236,9 +236,11 @@ Each @var{function} has the following form: "blocks": @var{blocks}, "blocks_executed": @var{blocks_executed}, "demangled_name": "@var{demangled_name}, + "end_column": @var{end_column}, "end_line": @var{end_line}, "execution_count": @var{execution_count}, "name": @var{name}, + "start_column": @var{start_column} "start_line": @var{start_line} @} @end smallexample @@ -256,6 +258,9 @@ Fields of the @var{function} element have following semantics: @var{demangled_name}: demangled name of the function @item +@var{end_column}: column in the source file where the function ends + +@item @var{end_line}: line in the source file where the function ends @item @@ -265,9 +270,17 @@ Fields of the @var{function} element have following semantics: @var{name}: name of the function @item +@var{start_column}: column in the source file where the function begins + +@item @var{start_line}: line in the source file where the function begins @end itemize +Note that line numbers and column numbers number from 1. In the current +implementation, @var{start_line} and @var{start_column} do not include +any template parameters and the leading return type but that +this is likely to be fixed in the future. + Each @var{line} has the following form: @smallexample @@ -293,11 +306,11 @@ Fields of the @var{line} element have following semantics: @item @var{unexecuted_block}: flag whether the line contains an unexecuted block (not all statements on the line are executed) -@end itemize @item @var{function_name}: a name of a function this @var{line} belongs to (for a line with an inlined statements can be not set) +@end itemize Each @var{branch} has the following form: diff --git a/gcc/gcov-dump.c b/gcc/gcov-dump.c index 72d94d9..67b1e88 100644 --- a/gcc/gcov-dump.c +++ b/gcc/gcov-dump.c @@ -315,7 +315,9 @@ tag_function (const char *filename ATTRIBUTE_UNUSED, unsigned line_start = gcov_read_unsigned (); unsigned column_start = gcov_read_unsigned (); unsigned line_end = gcov_read_unsigned (); - printf (":%u:%u:%u", line_start, column_start, line_end); + unsigned column_end = gcov_read_unsigned (); + printf (":%u:%u-%u:%u", line_start, column_start, + line_end, column_end); if (artificial) printf (", artificial"); } @@ -283,6 +283,9 @@ struct function_info /* Last line number. */ unsigned end_line; + /* Last line column. */ + unsigned end_column; + /* Index of source file where the function is defined. */ unsigned src; @@ -631,7 +634,8 @@ function_info::function_info (): m_name (NULL), m_demangled_name (NULL), ident (0), lineno_checksum (0), cfg_checksum (0), has_catch (0), artificial (0), is_group (0), blocks (), blocks_executed (0), counts (), - start_line (0), start_column (), end_line (0), src (0), lines (), next (NULL) + start_line (0), start_column (0), end_line (0), end_column (0), + src (0), lines (), next (NULL) { } @@ -1131,7 +1135,9 @@ output_json_intermediate_file (json::array *json_files, source_info *src) function->set ("demangled_name", new json::string ((*it)->get_demangled_name ())); function->set ("start_line", new json::number ((*it)->start_line)); + function->set ("start_column", new json::number ((*it)->start_column)); function->set ("end_line", new json::number ((*it)->end_line)); + function->set ("end_column", new json::number ((*it)->end_column)); function->set ("blocks", new json::number ((*it)->get_block_count ())); function->set ("blocks_executed", @@ -1726,6 +1732,7 @@ read_graph_file (void) unsigned start_line = gcov_read_unsigned (); unsigned start_column = gcov_read_unsigned (); unsigned end_line = gcov_read_unsigned (); + unsigned end_column = gcov_read_unsigned (); fn = new function_info (); functions.push_back (fn); @@ -1739,6 +1746,7 @@ read_graph_file (void) fn->start_line = start_line; fn->start_column = start_column; fn->end_line = end_line; + fn->end_column = end_column; fn->artificial = artificial; current_tag = tag; |