Skip to content

Commit 0c3afea

Browse files
committed
Improved error/warning message for function end line derivation
Signed-off-by: Henry Cox <[email protected]>
1 parent 1155feb commit 0c3afea

File tree

5 files changed

+72
-17
lines changed

5 files changed

+72
-17
lines changed

lib/lcovutil.pm

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7137,6 +7137,8 @@ sub _deriveFunctionEndLines
71377137
'"' . $traceInfo->filename() .
71387138
"\":$currentLine: assign end_line " .
71397139
$func->name() . "\n");
7140+
# warn that we are deriving end lines
7141+
_generate_end_line_message();
71407142
$func->set_end_line($currentLine);
71417143
$modified = 1;
71427144
}
@@ -7841,17 +7843,36 @@ sub _mergeParallelChunk
78417843
$lcovutil::profileData{filt_chunk}{$chunkId} = $to - $forkAt;
78427844
}
78437845

7846+
sub _generate_end_line_message
7847+
{
7848+
if (lcovutil::warn_once('compiler_version', 1)) {
7849+
my $msg =
7850+
'Function begin/end line exclusions not supported with this version of GCC/gcov; require gcc/9 or newer';
7851+
if ((defined($lcovutil::derive_function_end_line) &&
7852+
$lcovutil::derive_function_end_line != 0) ||
7853+
(defined($lcovutil::derive_function_end_line_all_files) &&
7854+
$lcovutil::derive_function_end_line_all_files != 0)
7855+
) {
7856+
lcovutil::ignorable_warning($lcovutil::ERROR_UNSUPPORTED,
7857+
$msg .
7858+
": attempting to derive function end lines - see lcovrc man entry for 'derive_function_end_line'."
7859+
);
7860+
} else {
7861+
lcovutil::ignorable_error($lcovutil::ERROR_UNSUPPORTED,
7862+
$msg .
7863+
". See lcovrc man entry for 'derive_function_end_line'."
7864+
);
7865+
}
7866+
}
7867+
}
7868+
78447869
sub _updateModifiedFile
78457870
{
78467871
my ($self, $name, $traceFile, $state) = @_;
78477872
$self->[FILES]->{$name} = $traceFile;
78487873

7849-
if ($state->[0]->[1] != 0 &&
7850-
lcovutil::warn_once('compiler_version', 1)) {
7851-
lcovutil::ignorable_error($lcovutil::ERROR_UNSUPPORTED,
7852-
"Function begin/end line exclusions not supported with this version of GCC/gcov; require gcc/9 or newer. See lcovrc man entry for 'derive_function_end_line'."
7853-
);
7854-
}
7874+
_generate_end_line_message()
7875+
if $state->[0]->[1] != 0;
78557876
}
78567877

78577878
sub _processParallelChunk

tests/gendiffcov/simple/script.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1228,8 +1228,8 @@ fi
12281228
12291229
12301230
# check select script
1231-
echo ${LCOV_HOME}/bin/genhtml $DIFFCOV_OPTS --baseline-file ./baseline.info.gz --diff-file diff.txt --annotate-script `pwd`/annotate.sh --show-owners all --ignore-errors source --select "$SELECT" --select --owner --select stanley.ukeridge current.info -o select $IGNORE
1232-
$COVER ${GENHTML_TOOL} $DIFFCOV_OPTS --baseline-file ./baseline.info.gz --diff-file diff.txt --annotate-script `pwd`/annotate.sh --show-owners all --ignore-errors source --select "$SELECT" --select --owner --select stanley.ukeridge current.info -o select $IGNORE
1231+
echo ${LCOV_HOME}/bin/genhtml $DIFFCOV_OPTS --baseline-file ./baseline.info.gz --diff-file diff.txt --annotate-script `pwd`/annotate.sh --show-owners all --ignore-errors source --select "$SELECT" --select --owner --select stanley.ukeridge current.info -o select $IGNORE --validate
1232+
$COVER ${GENHTML_TOOL} $DIFFCOV_OPTS --baseline-file ./baseline.info.gz --diff-file diff.txt --annotate-script `pwd`/annotate.sh --show-owners all --ignore-errors source --select "$SELECT" --select --owner --select stanley.ukeridge current.info -o select $IGNORE --validate
12331233
if [ 0 != $? ] ; then
12341234
echo "ERROR: genhtml select did not pass"
12351235
status=1
@@ -1266,8 +1266,8 @@ fi
12661266
12671267
12681268
# check select script
1269-
echo ${LCOV_HOME}/bin/genhtml $DIFFCOV_OPTS --baseline-file ./baseline.info.gz --diff-file diff.txt --annotate-script `pwd`/annotate.sh --show-owners all --ignore-errors source --select "$SELECT" --select --owner --select not.there current.info -o select2 $IGNORE
1270-
$COVER ${GENHTML_TOOL} $DIFFCOV_OPTS --baseline-file ./baseline.info.gz --diff-file diff.txt --annotate-script `pwd`/annotate.sh --show-owners all --ignore-errors source --select "$SELECT" --select --owner --select not.there current.info -o select2 $IGNORE
1269+
echo ${LCOV_HOME}/bin/genhtml $DIFFCOV_OPTS --baseline-file ./baseline.info.gz --diff-file diff.txt --annotate-script `pwd`/annotate.sh --show-owners all --ignore-errors source --select "$SELECT" --select --owner --select not.there current.info -o select2 $IGNORE --valideate
1270+
$COVER ${GENHTML_TOOL} $DIFFCOV_OPTS --baseline-file ./baseline.info.gz --diff-file diff.txt --annotate-script `pwd`/annotate.sh --show-owners all --ignore-errors source --select "$SELECT" --select --owner --select not.there current.info -o select2 $IGNORE --validate
12711271
if [ 0 != $? ] ; then
12721272
echo "ERROR: genhtml select did not pass"
12731273
status=1

tests/lcov/demangle/demangle.sh

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ PARENT=`(cd .. ; pwd)`
8484

8585
LCOV_OPTS="--branch-coverage --no-external $PARALLEL $PROFILE"
8686

87-
rm -rf *.gcda *.gcno a.out *.info* *.txt* *.json dumper* testRC *.gcov *.gcov.*
87+
rm -rf *.gcda *.gcno a.out *.info* *.txt* *.json dumper* testRC *.gcov *.gcov.* *.log
8888

8989
if [ "x$COVER" != 'x' ] && [ 0 != $LOCAL_COVERAGE ] ; then
9090
cover -delete
@@ -109,7 +109,7 @@ fi
109109
${CXX} -std=c++1y --coverage demangle.cpp
110110
./a.out 1
111111

112-
$COVER $LCOV_TOOL $LCOV_OPTS --capture --filter branch --demangle --directory . -o demangle.info
112+
$COVER $LCOV_TOOL $LCOV_OPTS --capture --filter branch --demangle --directory . -o demangle.info --rc derive_function_end_line=0
113113

114114
$COVER $LCOV_TOOL $LCOV_OPTS --list demangle.info
115115

@@ -223,21 +223,55 @@ else
223223
# no end line in data - check for error message...
224224
echo "----------------------"
225225
echo " compiler version DOESN't support start/end reporting - check error"
226-
$COVER $LCOV_TOOL $LCOV_OPTS --capture --filter branch --demangle-cpp --directory . --erase-functions main --ignore unused -o exclude.info
226+
$COVER $LCOV_TOOL $LCOV_OPTS --capture --filter branch --demangle-cpp --directory . --erase-functions main --ignore unused -o exclude.info --rc derive_function_end_line=0 --msg-log exclude.log
227227
if [ 0 == $? ] ; then
228228
echo "Error: expected exit for unsupported feature"
229229
if [ $KEEP_GOING == 0 ] ; then
230230
exit 1
231231
fi
232232
fi
233233

234-
$COVER $LCOV_TOOL $LCOV_OPTS --capture --filter branch --demangle-cpp --directory . --erase-functions main --ignore unsupported,unused -o ignore.info
234+
grep -E 'ERROR: .+Function begin/end line exclusions not supported' exclude.log
235+
if [ 0 != $? ] ; then
236+
echo "Error: didn't find unsupported message"
237+
if [ $KEEP_GOING == 0 ] ; then
238+
exit 1
239+
fi
240+
fi
241+
242+
$COVER $LCOV_TOOL $LCOV_OPTS --capture --filter branch --demangle-cpp --directory . --erase-functions main --ignore unused -o exclude2.info --rc derive_function_end_line=1 --msg-log exclude2.log
243+
if [ 0 != $? ] ; then
244+
echo "Error: unexpected exit when 'derive' enabled"
245+
if [ $KEEP_GOING == 0 ] ; then
246+
exit 1
247+
fi
248+
fi
249+
250+
grep -E 'WARNING: .+Function begin/end line exclusions.+attempting to derive' exclude2.log
251+
if [ 0 != $? ] ; then
252+
echo "Error: didn't find derive warning"
253+
if [ $KEEP_GOING == 0 ] ; then
254+
exit 1
255+
fi
256+
257+
fi
258+
259+
$COVER $LCOV_TOOL $LCOV_OPTS --capture --filter branch --demangle-cpp --directory . --erase-functions main --rc derive_function_end_line=0 --ignore unsupported,unused -o ignore.info --msg-log=exclude3.log
235260
if [ 0 != $? ] ; then
236261
echo "Error: expected to ignore unsupported message"
237262
if [ $KEEP_GOING == 0 ] ; then
238263
exit 1
239264
fi
240265
fi
266+
grep -E 'WARNING: .+Function begin/end line exclusions.+See lcovrc man entry' exclude3.log
267+
if [ 0 != $? ] ; then
268+
echo "Error: didn't find derive warning2"
269+
if [ $KEEP_GOING == 0 ] ; then
270+
exit 1
271+
fi
272+
273+
fi
274+
241275
# expect not to find 'main'
242276
grep main ignore.info
243277
if [ $? == 0 ] ; then

tests/perl2lcov/perltest1.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ if [ 0 != $? ] ; then
257257
fi
258258
259259
# now try running genhtml on the perl2lcov-generated .info file...
260-
perl -MDevel::Cover=-db,cover_genhtml,-silent,1 ../../bin/genhtml -o perl2lcov_report --flat --show-navigation one.info --branch
260+
perl -MDevel::Cover=-db,cover_genhtml,-silent,1 ../../bin/genhtml -o perl2lcov_report --flat --show-navigation one.info --branch --validate
261261
if [ 0 != $? ] ; then
262262
echo "genhtml failed"
263263
if [ 0 == $KEEP_GOING ] ; then

tests/py2lcov/py2lcov.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ for d in \
198198
done
199199

200200
# should be valid data to generate HTML
201-
$GENHTML_TOOL -o rpt1 $VERSION $ANNOTATE functions.info
201+
$GENHTML_TOOL -o rpt1 $VERSION $ANNOTATE functions.info --validate
202202
if [ 0 != $? ] ; then
203203
echo "genhtml failed"
204204
if [ 0 == $KEEP_GOING ] ; then
@@ -252,7 +252,7 @@ for l in `grep -E '^DA:' checksum.info` ; do
252252
done
253253

254254
# should be valid data to generate HTML
255-
$GENHTML_TOOL -o rpt2 $VERSION$DEPOT $ANNOTATE functions.info checksum.info
255+
$GENHTML_TOOL -o rpt2 $VERSION$DEPOT $ANNOTATE functions.info checksum.info --validate
256256
if [ 0 != $? ] ; then
257257
echo "genhtml 2 failed"
258258
if [ 0 == $KEEP_GOING ] ; then

0 commit comments

Comments
 (0)