summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/IR/GCOV.cpp4
-rw-r--r--llvm/test/tools/llvm-cov/Inputs/test_exit_block_arcs.gcdabin0 -> 124 bytes
-rw-r--r--llvm/test/tools/llvm-cov/Inputs/test_exit_block_arcs.gcnobin0 -> 216 bytes
-rw-r--r--llvm/test/tools/llvm-cov/llvm-cov.test4
4 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/IR/GCOV.cpp b/llvm/lib/IR/GCOV.cpp
index 08f44e079a4..b0a2bae4e06 100644
--- a/llvm/lib/IR/GCOV.cpp
+++ b/llvm/lib/IR/GCOV.cpp
@@ -302,10 +302,12 @@ bool GCOVFunction::readGCDA(GCOVBuffer &Buff, GCOV::GCOVVersion Version) {
// required to combine the edge counts that are contained in the GCDA file.
for (uint32_t BlockNo = 0; Count > 0; ++BlockNo) {
// The last block is always reserved for exit block
- if (BlockNo >= Blocks.size() - 1) {
+ if (BlockNo >= Blocks.size()) {
errs() << "Unexpected number of edges (in " << Name << ").\n";
return false;
}
+ if (BlockNo == Blocks.size() - 1)
+ errs() << "(" << Name << ") has arcs from exit block.\n";
GCOVBlock &Block = *Blocks[BlockNo];
for (size_t EdgeNo = 0, End = Block.getNumDstEdges(); EdgeNo < End;
++EdgeNo) {
diff --git a/llvm/test/tools/llvm-cov/Inputs/test_exit_block_arcs.gcda b/llvm/test/tools/llvm-cov/Inputs/test_exit_block_arcs.gcda
new file mode 100644
index 00000000000..3ca483d1f46
--- /dev/null
+++ b/llvm/test/tools/llvm-cov/Inputs/test_exit_block_arcs.gcda
Binary files differ
diff --git a/llvm/test/tools/llvm-cov/Inputs/test_exit_block_arcs.gcno b/llvm/test/tools/llvm-cov/Inputs/test_exit_block_arcs.gcno
new file mode 100644
index 00000000000..d453566282f
--- /dev/null
+++ b/llvm/test/tools/llvm-cov/Inputs/test_exit_block_arcs.gcno
Binary files differ
diff --git a/llvm/test/tools/llvm-cov/llvm-cov.test b/llvm/test/tools/llvm-cov/llvm-cov.test
index 6a71120c882..ad4ceefbbce 100644
--- a/llvm/test/tools/llvm-cov/llvm-cov.test
+++ b/llvm/test/tools/llvm-cov/llvm-cov.test
@@ -111,4 +111,8 @@ RUN: llvm-cov test.c -gcda=test_file_checksum_fail.gcda
# Bad function checksum on gcda
RUN: llvm-cov test.c -gcda=test_func_checksum_fail.gcda
+# Has arcs from exit blocks
+RUN: llvm-cov test_exit_block_arcs.c 2>&1 | FileCheck %s -check-prefix=EXIT_BLOCK_ARCS
+EXIT_BLOCK_ARCS: (main) has arcs from exit block.
+
XFAIL: powerpc64-, s390x, mips-, mips64-, sparc
OpenPOWER on IntegriCloud