diff options
-rw-r--r-- | lib/IR/GCOV.cpp | 5 | ||||
-rw-r--r-- | test/tools/llvm-cov/Inputs/copy_block_helper.gcda | bin | 0 -> 432 bytes | |||
-rw-r--r-- | test/tools/llvm-cov/Inputs/copy_block_helper.gcno | bin | 0 -> 1140 bytes | |||
-rw-r--r-- | test/tools/llvm-cov/copy_block_helper.m | 29 | ||||
-rw-r--r-- | test/tools/llvm-cov/lit.local.cfg | 2 |
5 files changed, 35 insertions, 1 deletions
diff --git a/lib/IR/GCOV.cpp b/lib/IR/GCOV.cpp index dc9cb4b2a8..f69bdc4f8c 100644 --- a/lib/IR/GCOV.cpp +++ b/lib/IR/GCOV.cpp @@ -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); diff --git a/test/tools/llvm-cov/Inputs/copy_block_helper.gcda b/test/tools/llvm-cov/Inputs/copy_block_helper.gcda Binary files differnew file mode 100644 index 0000000000..d7ff4696df --- /dev/null +++ b/test/tools/llvm-cov/Inputs/copy_block_helper.gcda diff --git a/test/tools/llvm-cov/Inputs/copy_block_helper.gcno b/test/tools/llvm-cov/Inputs/copy_block_helper.gcno Binary files differnew file mode 100644 index 0000000000..a9d1084064 --- /dev/null +++ b/test/tools/llvm-cov/Inputs/copy_block_helper.gcno diff --git a/test/tools/llvm-cov/copy_block_helper.m b/test/tools/llvm-cov/copy_block_helper.m new file mode 100644 index 0000000000..61a91c1e77 --- /dev/null +++ b/test/tools/llvm-cov/copy_block_helper.m @@ -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); } diff --git a/test/tools/llvm-cov/lit.local.cfg b/test/tools/llvm-cov/lit.local.cfg index df9b335dd1..f738810475 100644 --- a/test/tools/llvm-cov/lit.local.cfg +++ b/test/tools/llvm-cov/lit.local.cfg @@ -1 +1 @@ -config.suffixes = ['.test'] +config.suffixes = ['.test', '.m'] |