@@ -59,12 +59,11 @@ sumMCDCPairs(const ArrayRef<MCDCRecord> &Records) {
59
59
return {NumPairs, CoveredPairs};
60
60
}
61
61
62
- FunctionCoverageSummary
63
- FunctionCoverageSummary::get (const CoverageMapping &CM,
64
- const coverage::FunctionRecord &Function) {
62
+ static std::pair<RegionCoverageInfo, LineCoverageInfo>
63
+ sumRegions (ArrayRef<CountedRegion> CodeRegions, const CoverageData &CD) {
65
64
// Compute the region coverage.
66
65
size_t NumCodeRegions = 0 , CoveredRegions = 0 ;
67
- for (auto &CR : Function. CountedRegions ) {
66
+ for (auto &CR : CodeRegions ) {
68
67
if (CR.Kind != CounterMappingRegion::CodeRegion)
69
68
continue ;
70
69
++NumCodeRegions;
@@ -74,7 +73,6 @@ FunctionCoverageSummary::get(const CoverageMapping &CM,
74
73
75
74
// Compute the line coverage
76
75
size_t NumLines = 0 , CoveredLines = 0 ;
77
- CoverageData CD = CM.getCoverageForFunction (Function);
78
76
for (const auto &LCS : getLineCoverageStats (CD)) {
79
77
if (!LCS.isMapped ())
80
78
continue ;
@@ -83,6 +81,16 @@ FunctionCoverageSummary::get(const CoverageMapping &CM,
83
81
++CoveredLines;
84
82
}
85
83
84
+ return {RegionCoverageInfo (CoveredRegions, NumCodeRegions),
85
+ LineCoverageInfo (CoveredLines, NumLines)};
86
+ }
87
+
88
+ FunctionCoverageSummary
89
+ FunctionCoverageSummary::get (const CoverageMapping &CM,
90
+ const coverage::FunctionRecord &Function) {
91
+ CoverageData CD = CM.getCoverageForFunction (Function);
92
+ auto [RegionCoverage, LineCoverage] = sumRegions (Function.CountedRegions , CD);
93
+
86
94
// Compute the branch coverage, including branches from expansions.
87
95
size_t NumBranches = 0 , CoveredBranches = 0 ;
88
96
sumBranches (NumBranches, CoveredBranches, CD.getBranches ());
@@ -92,9 +100,7 @@ FunctionCoverageSummary::get(const CoverageMapping &CM,
92
100
std::tie (NumPairs, CoveredPairs) = sumMCDCPairs (CD.getMCDCRecords ());
93
101
94
102
return FunctionCoverageSummary (
95
- Function.Name , Function.ExecutionCount ,
96
- RegionCoverageInfo (CoveredRegions, NumCodeRegions),
97
- LineCoverageInfo (CoveredLines, NumLines),
103
+ Function.Name , Function.ExecutionCount , RegionCoverage, LineCoverage,
98
104
BranchCoverageInfo (CoveredBranches, NumBranches),
99
105
MCDCCoverageInfo (CoveredPairs, NumPairs));
100
106
}
0 commit comments