summaryrefslogtreecommitdiff
path: root/gcc/coverage.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2017-11-09 10:11:17 +0100
committerMartin Liska <marxin@gcc.gnu.org>2017-11-09 09:11:17 +0000
commit136ca74eb91c225ff18a7b08e0e7fd027b88517c (patch)
tree3d35f88384d1fc66a1a463a1b060b85bc366a37d /gcc/coverage.c
parent6bc322a11bec51aceb463fb2336198645dca993f (diff)
GCOV: support multiple functions per a line (PR gcov-profile/48463)
2017-11-09 Martin Liska <mliska@suse.cz> PR gcov-profile/48463 * coverage.c (coverage_begin_function): Output also end locus of a function and information whether the function is artificial. * gcov-dump.c (tag_function): Parse and print the information. * gcov.c (INCLUDE_MAP): Add include. (INCLUDE_SET): Likewise. (struct line_info): Move earlier in the source file because of vector<line_info> in function_info structure. (line_info::line_info): Likewise. (line_info::has_block): Likewise. (struct source_info): Add new member index. (source_info::get_functions_at_location): New function. (function_info::group_line_p): New function. (output_intermediate_line): New function. (output_intermediate_file): Use the mentioned function. (struct function_start): New. (struct function_start_pair_hash): Likewise. (process_file): Add code that identifies group functions. Assign lines either to global or function scope. (generate_results): Skip artificial functions. (find_source): Assign index for each source file. (read_graph_file): Read new flag artificial and end_line. (add_line_counts): Assign it either to global of function scope. (accumulate_line_counts): Isolate core of the function to accumulate_line_info and call it for both function and global scope lines. (accumulate_line_info): New function. (output_line_beginning): Fix GNU coding style. (print_source_line): New function. (output_line_details): Likewise. (output_function_details): Likewise. (output_lines): Iterate both source (global) scope and function scope. (struct function_line_start_cmp): New class. * doc/gcov.texi: Reflect changes in documentation. From-SVN: r254562
Diffstat (limited to 'gcc/coverage.c')
-rw-r--r--gcc/coverage.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/coverage.c b/gcc/coverage.c
index 8a56a677f15..f57897b8314 100644
--- a/gcc/coverage.c
+++ b/gcc/coverage.c
@@ -663,8 +663,15 @@ coverage_begin_function (unsigned lineno_checksum, unsigned cfg_checksum)
gcov_write_unsigned (cfg_checksum);
gcov_write_string (IDENTIFIER_POINTER
(DECL_ASSEMBLER_NAME (current_function_decl)));
+ gcov_write_unsigned (DECL_ARTIFICIAL (current_function_decl));
gcov_write_filename (xloc.file);
gcov_write_unsigned (xloc.line);
+ gcov_write_unsigned (xloc.column);
+
+ expanded_location endloc = expand_location (cfun->function_end_locus);
+
+ /* Function can start in a single file and end in another one. */
+ gcov_write_unsigned (endloc.file == xloc.file ? endloc.line : xloc.line);
gcov_write_length (offset);
return !gcov_is_error ();