@@ -856,7 +856,7 @@ Error CoverageMapping::loadFunctionRecord(
856
856
return Error::success ();
857
857
858
858
MCDCDecisionRecorder MCDCDecisions;
859
- FunctionRecord Function (OrigFuncName, Record.Filenames , SingleByteCoverage );
859
+ FunctionRecord Function (OrigFuncName, Record.Filenames );
860
860
for (const auto &Region : Record.MappingRegions ) {
861
861
// MCDCDecisionRegion should be handled first since it overlaps with
862
862
// others inside.
@@ -874,10 +874,10 @@ Error CoverageMapping::loadFunctionRecord(
874
874
consumeError (std::move (E));
875
875
return Error::success ();
876
876
}
877
- assert (!SingleByteCoverage ||
878
- ( 0 <= *ExecutionCount && *ExecutionCount <= 1 &&
879
- 0 <= *AltExecutionCount && *AltExecutionCount <= 1 ));
880
- Function. pushRegion (Region, *ExecutionCount, *AltExecutionCount );
877
+ Function. pushRegion (
878
+ Region, (SingleByteCoverage && *ExecutionCount ? 1 : *ExecutionCount),
879
+ (SingleByteCoverage && *AltExecutionCount ? 1 : *AltExecutionCount),
880
+ SingleByteCoverage );
881
881
882
882
// Record ExpansionRegion.
883
883
if (Region.Kind == CounterMappingRegion::ExpansionRegion) {
@@ -1273,8 +1273,7 @@ class SegmentBuilder {
1273
1273
1274
1274
// / Combine counts of regions which cover the same area.
1275
1275
static ArrayRef<CountedRegion>
1276
- combineRegions (MutableArrayRef<CountedRegion> Regions,
1277
- bool SingleByteCoverage) {
1276
+ combineRegions (MutableArrayRef<CountedRegion> Regions) {
1278
1277
if (Regions.empty ())
1279
1278
return Regions;
1280
1279
auto Active = Regions.begin ();
@@ -1301,7 +1300,9 @@ class SegmentBuilder {
1301
1300
// We add counts of the regions of the same kind as the active region
1302
1301
// to handle the both situations.
1303
1302
if (I->Kind == Active->Kind ) {
1304
- if (SingleByteCoverage)
1303
+ assert (I->HasSingleByteCoverage == Active->HasSingleByteCoverage &&
1304
+ " Regions are generated in different coverage modes" );
1305
+ if (I->HasSingleByteCoverage )
1305
1306
Active->ExecutionCount = Active->ExecutionCount || I->ExecutionCount ;
1306
1307
else
1307
1308
Active->ExecutionCount += I->ExecutionCount ;
@@ -1313,14 +1314,12 @@ class SegmentBuilder {
1313
1314
public:
1314
1315
// / Build a sorted list of CoverageSegments from a list of Regions.
1315
1316
static std::vector<CoverageSegment>
1316
- buildSegments (MutableArrayRef<CountedRegion> Regions,
1317
- bool SingleByteCoverage) {
1317
+ buildSegments (MutableArrayRef<CountedRegion> Regions) {
1318
1318
std::vector<CoverageSegment> Segments;
1319
1319
SegmentBuilder Builder (Segments);
1320
1320
1321
1321
sortNestedRegions (Regions);
1322
- ArrayRef<CountedRegion> CombinedRegions =
1323
- combineRegions (Regions, SingleByteCoverage);
1322
+ ArrayRef<CountedRegion> CombinedRegions = combineRegions (Regions);
1324
1323
1325
1324
LLVM_DEBUG ({
1326
1325
dbgs () << " Combined regions:\n " ;
@@ -1407,14 +1406,10 @@ CoverageData CoverageMapping::getCoverageForFile(StringRef Filename) const {
1407
1406
// the filename, we may get back some records that are not in the file.
1408
1407
ArrayRef<unsigned > RecordIndices =
1409
1408
getImpreciseRecordIndicesForFilename (Filename);
1410
- std::optional<bool > SingleByteCoverage;
1411
1409
for (unsigned RecordIndex : RecordIndices) {
1412
1410
const FunctionRecord &Function = Functions[RecordIndex];
1413
1411
auto MainFileID = findMainViewFileID (Filename, Function);
1414
1412
auto FileIDs = gatherFileIDs (Filename, Function);
1415
- assert (!SingleByteCoverage ||
1416
- *SingleByteCoverage == Function.SingleByteCoverage );
1417
- SingleByteCoverage = Function.SingleByteCoverage ;
1418
1413
for (const auto &CR : Function.CountedRegions )
1419
1414
if (FileIDs.test (CR.FileID )) {
1420
1415
Regions.push_back (CR);
@@ -1432,8 +1427,7 @@ CoverageData CoverageMapping::getCoverageForFile(StringRef Filename) const {
1432
1427
}
1433
1428
1434
1429
LLVM_DEBUG (dbgs () << " Emitting segments for file: " << Filename << " \n " );
1435
- FileCoverage.Segments =
1436
- SegmentBuilder::buildSegments (Regions, *SingleByteCoverage);
1430
+ FileCoverage.Segments = SegmentBuilder::buildSegments (Regions);
1437
1431
1438
1432
return FileCoverage;
1439
1433
}
@@ -1489,8 +1483,7 @@ CoverageMapping::getCoverageForFunction(const FunctionRecord &Function) const {
1489
1483
1490
1484
LLVM_DEBUG (dbgs () << " Emitting segments for function: " << Function.Name
1491
1485
<< " \n " );
1492
- FunctionCoverage.Segments =
1493
- SegmentBuilder::buildSegments (Regions, Function.SingleByteCoverage );
1486
+ FunctionCoverage.Segments = SegmentBuilder::buildSegments (Regions);
1494
1487
1495
1488
return FunctionCoverage;
1496
1489
}
@@ -1500,12 +1493,8 @@ CoverageData CoverageMapping::getCoverageForExpansion(
1500
1493
CoverageData ExpansionCoverage (
1501
1494
Expansion.Function .Filenames [Expansion.FileID ]);
1502
1495
std::vector<CountedRegion> Regions;
1503
- std::optional<bool > SingleByteCoverage;
1504
1496
for (const auto &CR : Expansion.Function .CountedRegions )
1505
1497
if (CR.FileID == Expansion.FileID ) {
1506
- assert (!SingleByteCoverage ||
1507
- *SingleByteCoverage == Expansion.Function .SingleByteCoverage );
1508
- SingleByteCoverage = Expansion.Function .SingleByteCoverage ;
1509
1498
Regions.push_back (CR);
1510
1499
if (isExpansion (CR, Expansion.FileID ))
1511
1500
ExpansionCoverage.Expansions .emplace_back (CR, Expansion.Function );
@@ -1517,8 +1506,7 @@ CoverageData CoverageMapping::getCoverageForExpansion(
1517
1506
1518
1507
LLVM_DEBUG (dbgs () << " Emitting segments for expansion of file "
1519
1508
<< Expansion.FileID << " \n " );
1520
- ExpansionCoverage.Segments =
1521
- SegmentBuilder::buildSegments (Regions, *SingleByteCoverage);
1509
+ ExpansionCoverage.Segments = SegmentBuilder::buildSegments (Regions);
1522
1510
1523
1511
return ExpansionCoverage;
1524
1512
}
0 commit comments