Skip to content
Snippets Groups Projects
Commit fed41342 authored by Tom Stellard's avatar Tom Stellard
Browse files

Revert "Revert "[Coverage] Fix branch coverage merging in...

Revert "Revert "[Coverage] Fix branch coverage merging in FunctionCoverageSummary::get() for instantiation""

This reverts commit 33d312b2.

The original patch was correct, so we need to restore it in the
release branch.
parent b7c7b42d
No related branches found
No related tags found
No related merge requests found
// RUN: llvm-profdata merge %S/Inputs/branch-templates.proftext -o %t.profdata // RUN: llvm-profdata merge %S/Inputs/branch-templates.proftext -o %t.profdata
// RUN: llvm-cov show --show-expansions --show-branches=count %S/Inputs/branch-templates.o32l -instr-profile %t.profdata -path-equivalence=/tmp,%S %s | FileCheck %s // RUN: llvm-cov show --show-expansions --show-branches=count %S/Inputs/branch-templates.o32l -instr-profile %t.profdata -path-equivalence=/tmp,%S %s | FileCheck %s
// RUN: llvm-cov report --show-branch-summary %S/Inputs/branch-templates.o32l -instr-profile %t.profdata -show-functions -path-equivalence=/tmp,%S %s | FileCheck %s -check-prefix=REPORT // RUN: llvm-cov report --show-branch-summary %S/Inputs/branch-templates.o32l -instr-profile %t.profdata -show-functions -path-equivalence=/tmp,%S %s | FileCheck %s -check-prefix=REPORT
// RUN: llvm-cov report --show-branch-summary %S/Inputs/branch-templates.o32l -instr-profile %t.profdata -path-equivalence=/tmp,%S %s | FileCheck %s -check-prefix=REPORTFILE
#include <stdio.h> #include <stdio.h>
template<typename T> template<typename T>
void unused(T x) { void unused(T x) {
return; return;
...@@ -45,3 +45,17 @@ int main() { ...@@ -45,3 +45,17 @@ int main() {
// REPORT-NEXT: _Z4funcIfEiT_ 5 2 60.00% 7 3 57.14% 2 1 50.00% // REPORT-NEXT: _Z4funcIfEiT_ 5 2 60.00% 7 3 57.14% 2 1 50.00%
// REPORT-NEXT: --- // REPORT-NEXT: ---
// REPORT-NEXT: TOTAL 22 7 68.18% 31 11 64.52% 12 6 50.00% // REPORT-NEXT: TOTAL 22 7 68.18% 31 11 64.52% 12 6 50.00%
// Make sure the covered branch tally for the function instantiation group is
// merged to reflect maximum branch coverage of a single instantiation, just
// like what is done for lines and regions. Also, the total branch tally
// summary for an instantiation group should agree with the total number of
// branches in the definition (In this case, 2 and 6 for func<>() and main(),
// respectively). This is returned by: FunctionCoverageSummary::get(const
// InstantiationGroup &Group, ...)
// REPORTFILE: Filename Regions Missed Regions Cover Functions Missed Functions Executed Lines Missed Lines Cover Branches Missed Branches Cover
// REPORTFILE-NEXT: ---
// REPORTFILE-NEXT: branch-templates.cpp 12 3 75.00% 2 0 100.00% 17 4 76.47% 8 4 50.00%
// REPORTFILE-NEXT: ---
// REPORTFILE-NEXT: TOTAL 12 3 75.00% 2 0 100.00% 17 4 76.47% 8 4 50.00%
...@@ -100,11 +100,7 @@ FunctionCoverageSummary::get(const InstantiationGroup &Group, ...@@ -100,11 +100,7 @@ FunctionCoverageSummary::get(const InstantiationGroup &Group,
for (const auto &FCS : Summaries.drop_front()) { for (const auto &FCS : Summaries.drop_front()) {
Summary.RegionCoverage.merge(FCS.RegionCoverage); Summary.RegionCoverage.merge(FCS.RegionCoverage);
Summary.LineCoverage.merge(FCS.LineCoverage); Summary.LineCoverage.merge(FCS.LineCoverage);
Summary.BranchCoverage.merge(FCS.BranchCoverage);
// Sum branch coverage across instantiation groups for the summary rather
// than "merge" the maximum count. This is a clearer view into whether all
// created branches are covered.
Summary.BranchCoverage += FCS.BranchCoverage;
} }
return Summary; return Summary;
} }
...@@ -123,6 +123,11 @@ public: ...@@ -123,6 +123,11 @@ public:
return *this; return *this;
} }
void merge(const BranchCoverageInfo &RHS) {
Covered = std::max(Covered, RHS.Covered);
NumBranches = std::max(NumBranches, RHS.NumBranches);
}
size_t getCovered() const { return Covered; } size_t getCovered() const { return Covered; }
size_t getNumBranches() const { return NumBranches; } size_t getNumBranches() const { return NumBranches; }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment