[llvm] r204863 - llvm-cov: Handle functions with no line number

Justin Bogner mail at justinbogner.com
Wed Mar 26 15:03:06 PDT 2014


Author: bogner
Date: Wed Mar 26 17:03:06 2014
New Revision: 204863

URL: http://llvm.org/viewvc/llvm-project?rev=204863&view=rev
Log:
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.

Added:
    llvm/trunk/test/tools/llvm-cov/Inputs/copy_block_helper.gcda
    llvm/trunk/test/tools/llvm-cov/Inputs/copy_block_helper.gcno
    llvm/trunk/test/tools/llvm-cov/copy_block_helper.m
Modified:
    llvm/trunk/lib/IR/GCOV.cpp
    llvm/trunk/test/tools/llvm-cov/lit.local.cfg

Modified: llvm/trunk/lib/IR/GCOV.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/GCOV.cpp?rev=204863&r1=204862&r2=204863&view=diff
==============================================================================
--- llvm/trunk/lib/IR/GCOV.cpp (original)
+++ llvm/trunk/lib/IR/GCOV.cpp Wed Mar 26 17:03:06 2014
@@ -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);

Added: llvm/trunk/test/tools/llvm-cov/Inputs/copy_block_helper.gcda
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/copy_block_helper.gcda?rev=204863&view=auto
==============================================================================
Binary files llvm/trunk/test/tools/llvm-cov/Inputs/copy_block_helper.gcda (added) and llvm/trunk/test/tools/llvm-cov/Inputs/copy_block_helper.gcda Wed Mar 26 17:03:06 2014 differ

Added: llvm/trunk/test/tools/llvm-cov/Inputs/copy_block_helper.gcno
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/copy_block_helper.gcno?rev=204863&view=auto
==============================================================================
Binary files llvm/trunk/test/tools/llvm-cov/Inputs/copy_block_helper.gcno (added) and llvm/trunk/test/tools/llvm-cov/Inputs/copy_block_helper.gcno Wed Mar 26 17:03:06 2014 differ

Added: llvm/trunk/test/tools/llvm-cov/copy_block_helper.m
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/copy_block_helper.m?rev=204863&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-cov/copy_block_helper.m (added)
+++ llvm/trunk/test/tools/llvm-cov/copy_block_helper.m Wed Mar 26 17:03:06 2014
@@ -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); }

Modified: llvm/trunk/test/tools/llvm-cov/lit.local.cfg
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/lit.local.cfg?rev=204863&r1=204862&r2=204863&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-cov/lit.local.cfg (original)
+++ llvm/trunk/test/tools/llvm-cov/lit.local.cfg Wed Mar 26 17:03:06 2014
@@ -1 +1 @@
-config.suffixes = ['.test']
+config.suffixes = ['.test', '.m']





More information about the llvm-commits mailing list