mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-29 10:32:47 +00:00
llvm-cov: Handle functions with no line number
Functions may in an instrumented binary but not in the original source when they're inserted by the compiler or the runtime. These functions aren't meaningful to the user, so teach llvm-cov to skip over them instead of crashing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204863 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
70ea745ec8
commit
2a6873fdf3
@ -308,6 +308,11 @@ void GCOVFunction::dump() const {
|
||||
/// collectLineCounts - Collect line counts. This must be used after
|
||||
/// reading .gcno and .gcda files.
|
||||
void GCOVFunction::collectLineCounts(FileInfo &FI) {
|
||||
// If the line number is zero, this is a function that doesn't actually appear
|
||||
// in the source file, so there isn't anything we can do with it.
|
||||
if (LineNumber == 0)
|
||||
return;
|
||||
|
||||
for (SmallVectorImpl<GCOVBlock *>::iterator I = Blocks.begin(),
|
||||
E = Blocks.end(); I != E; ++I)
|
||||
(*I)->collectLineCounts(FI);
|
||||
|
BIN
test/tools/llvm-cov/Inputs/copy_block_helper.gcda
Normal file
BIN
test/tools/llvm-cov/Inputs/copy_block_helper.gcda
Normal file
Binary file not shown.
BIN
test/tools/llvm-cov/Inputs/copy_block_helper.gcno
Normal file
BIN
test/tools/llvm-cov/Inputs/copy_block_helper.gcno
Normal file
Binary file not shown.
29
test/tools/llvm-cov/copy_block_helper.m
Normal file
29
test/tools/llvm-cov/copy_block_helper.m
Normal file
@ -0,0 +1,29 @@
|
||||
// Make sure that compiler-added functions (whose line number is zero) don't
|
||||
// crash llvm-cov.
|
||||
|
||||
// We need shell for cd
|
||||
// REQUIRES: shell
|
||||
|
||||
// RUN: rm -rf %t
|
||||
// RUN: mkdir %t
|
||||
// RUN: cd %t
|
||||
// RUN: cp %s %p/Inputs/copy_block_helper.gc* .
|
||||
|
||||
// RUN: llvm-cov copy_block_helper.m | FileCheck %s --check-prefix=STDOUT
|
||||
// STDOUT: File 'copy_block_helper.m'
|
||||
// STDOUT: Lines executed:100.00% of 5
|
||||
// STDOUT: copy_block_helper.m:creating 'copy_block_helper.m.gcov'
|
||||
|
||||
// RUN: FileCheck %s --check-prefix=GCOV < %t/copy_block_helper.m.gcov
|
||||
// GCOV: -: 0:Runs:1
|
||||
// GCOV: -: 0:Programs:1
|
||||
|
||||
id test_helper(id (^foo)(void)) { return foo(); } // GCOV: 1: [[@LINE]]:id
|
||||
void test(id x) { // GCOV: -: [[@LINE]]:void test
|
||||
test_helper(^{ // GCOV: 2: [[@LINE]]: test_helper
|
||||
return x; // GCOV: 1: [[@LINE]]: return
|
||||
}); // GCOV: -: [[@LINE]]:
|
||||
} // GCOV: 1: [[@LINE]]:}
|
||||
|
||||
// GCOV: 1: [[@LINE+1]]:int main
|
||||
int main(int argc, const char *argv[]) { test(0); }
|
@ -1 +1 @@
|
||||
config.suffixes = ['.test']
|
||||
config.suffixes = ['.test', '.m']
|
||||
|
Loading…
Reference in New Issue
Block a user