diff --git a/test/tools/llvm-cov/Inputs/lineExecutionCounts.covmapping b/test/tools/llvm-cov/Inputs/lineExecutionCounts.covmapping index 5cfa1694da2..9774b89ede8 100644 Binary files a/test/tools/llvm-cov/Inputs/lineExecutionCounts.covmapping and b/test/tools/llvm-cov/Inputs/lineExecutionCounts.covmapping differ diff --git a/test/tools/llvm-cov/showLineExecutionCounts.cpp b/test/tools/llvm-cov/showLineExecutionCounts.cpp index 9c94344e5ee..34baa574dab 100644 --- a/test/tools/llvm-cov/showLineExecutionCounts.cpp +++ b/test/tools/llvm-cov/showLineExecutionCounts.cpp @@ -1,5 +1,8 @@ -// RUN: llvm-cov show %S/Inputs/lineExecutionCounts.covmapping -instr-profile %S/Inputs/lineExecutionCounts.profdata -no-colors -filename-equivalence %s | FileCheck %s +// RUN: llvm-cov show %S/Inputs/lineExecutionCounts.covmapping -instr-profile %S/Inputs/lineExecutionCounts.profdata -no-colors -filename-equivalence %s | FileCheck -check-prefix=CHECK -check-prefix=WHOLE-FILE %s +// RUN: llvm-cov show %S/Inputs/lineExecutionCounts.covmapping -instr-profile %S/Inputs/lineExecutionCounts.profdata -no-colors -filename-equivalence -name=main %s | FileCheck -check-prefix=CHECK -check-prefix=FILTER %s +// before any coverage // WHOLE-FILE: | [[@LINE]]|// before + // FILTER-NOT: | [[@LINE-1]]|// before int main() { // CHECK: 1| [[@LINE]]|int main( int x = 0; // CHECK: 1| [[@LINE]]| int x // CHECK: 1| [[@LINE]]| @@ -20,6 +23,8 @@ int main() { // CHECK: 1| [[@LINE]]|int main( // CHECK: 1| [[@LINE]]| return 0; // CHECK: 1| [[@LINE]]| return } // CHECK: 1| [[@LINE]]|} +// after coverage // WHOLE-FILE: | [[@LINE]]|// after + // FILTER-NOT: | [[@LINE-1]]|// after // llvm-cov doesn't work on big endian yet // XFAIL: powerpc64-, s390x, mips-, mips64-, sparc diff --git a/tools/llvm-cov/SourceCoverageView.cpp b/tools/llvm-cov/SourceCoverageView.cpp index 2ad3e145198..3be54f828da 100644 --- a/tools/llvm-cov/SourceCoverageView.cpp +++ b/tools/llvm-cov/SourceCoverageView.cpp @@ -163,6 +163,7 @@ void SourceCoverageView::render(raw_ostream &OS, bool WholeFile, auto NextSegment = CoverageSegments.begin(); auto EndSegment = CoverageSegments.end(); + unsigned FirstLine = NextSegment != EndSegment ? NextSegment->Line : 0; const CoverageSegment *WrappedSegment = nullptr; SmallVector LineSegments; for (line_iterator LI(File, /*SkipBlanks=*/false); !LI.is_at_eof(); ++LI) { @@ -171,7 +172,7 @@ void SourceCoverageView::render(raw_ostream &OS, bool WholeFile, if (!WholeFile) { if (NextSegment == EndSegment) break; - else if (LI.line_number() < NextSegment->Line) + else if (LI.line_number() < FirstLine) continue; }