diff options
-rw-r--r-- | llvm/lib/IR/GCOV.cpp | 4 | ||||
-rw-r--r-- | llvm/test/tools/llvm-cov/Inputs/test_exit_block_arcs.gcda | bin | 0 -> 124 bytes | |||
-rw-r--r-- | llvm/test/tools/llvm-cov/Inputs/test_exit_block_arcs.gcno | bin | 0 -> 216 bytes | |||
-rw-r--r-- | llvm/test/tools/llvm-cov/llvm-cov.test | 4 |
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 Binary files differnew file mode 100644 index 00000000000..3ca483d1f46 --- /dev/null +++ b/llvm/test/tools/llvm-cov/Inputs/test_exit_block_arcs.gcda 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 Binary files differnew file mode 100644 index 00000000000..d453566282f --- /dev/null +++ b/llvm/test/tools/llvm-cov/Inputs/test_exit_block_arcs.gcno 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 |