diff options
author | Jørgen Kvalsvik <j@lambda.is> | 2024-07-10 18:47:27 +0200 |
---|---|---|
committer | Jørgen Kvalsvik <j@lambda.is> | 2024-07-11 09:11:55 +0200 |
commit | 2b3fbac8e37384857cd594c0800fccd99e4d39a1 (patch) | |
tree | 3a261354f5739ba5b360866224824911982559c2 | |
parent | 36e5e409190e595638cec053ea034d20d5c74d6b (diff) | |
download | gcc-2b3fbac8e37384857cd594c0800fccd99e4d39a1.zip gcc-2b3fbac8e37384857cd594c0800fccd99e4d39a1.tar.gz gcc-2b3fbac8e37384857cd594c0800fccd99e4d39a1.tar.bz2 |
Ensure function.end_line in source_info.lines
Ensure that the function.end_line in the lines vector for the source
file, even if it is not explicitly touched by a basic block. This
ensures consistency with what you would expect. For example, this file
has sources[sum.cc].lines.size () == 23 and main.end_line == 2 without
adjusting sources.lines, which in this case is a no-op.
#####: 17:int main ()
-: 18:{
#####: 19: sum (1, 2);
#####: 20: sum (1.1, 2);
#####: 21: sum (2.2, 2.3);
#####: 22:}
This is a useful property when combined with selective reporting.
gcc/ChangeLog:
* gcov.cc (process_all_functions): Ensure fn.end_line is
included source[fn].lines.
-rw-r--r-- | gcc/gcov.cc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/gcov.cc b/gcc/gcov.cc index 2e4bd9d..7b4a075 100644 --- a/gcc/gcov.cc +++ b/gcc/gcov.cc @@ -1544,6 +1544,12 @@ process_all_functions (void) } } + /* Make sure to include the last line for this function even when it + is not directly covered by a basic block, for example when } is on + its own line. */ + if (sources[fn->src].lines.size () <= fn->end_line) + sources[fn->src].lines.resize (fn->end_line + 1); + /* Allocate lines for group function, following start_line and end_line information of the function. */ if (fn->is_group) |