@@ -805,7 +805,6 @@ Error CoverageMapping::loadFunctionRecord(
805805 else
806806 OrigFuncName = getFuncNameWithoutPrefix (OrigFuncName, Record.Filenames [0 ]);
807807
808- bool SingleByteCoverage = ProfileReader.hasSingleByteCoverage ();
809808 CounterMappingContext Ctx (Record.Expressions );
810809
811810 std::vector<uint64_t > Counts;
@@ -871,10 +870,7 @@ Error CoverageMapping::loadFunctionRecord(
871870 consumeError (std::move (E));
872871 return Error::success ();
873872 }
874- Function.pushRegion (
875- Region, (SingleByteCoverage && *ExecutionCount ? 1 : *ExecutionCount),
876- (SingleByteCoverage && *AltExecutionCount ? 1 : *AltExecutionCount),
877- SingleByteCoverage);
873+ Function.pushRegion (Region, *ExecutionCount, *AltExecutionCount);
878874
879875 // Record ExpansionRegion.
880876 if (Region.Kind == CounterMappingRegion::ExpansionRegion) {
@@ -936,6 +932,9 @@ Error CoverageMapping::loadFunctionRecord(
936932Error CoverageMapping::loadFromReaders (
937933 ArrayRef<std::unique_ptr<CoverageMappingReader>> CoverageReaders,
938934 IndexedInstrProfReader &ProfileReader, CoverageMapping &Coverage) {
935+ assert (!Coverage.SingleByteCoverage ||
936+ *Coverage.SingleByteCoverage == ProfileReader.hasSingleByteCoverage ());
937+ Coverage.SingleByteCoverage = ProfileReader.hasSingleByteCoverage ();
939938 for (const auto &CoverageReader : CoverageReaders) {
940939 for (auto RecordOrErr : *CoverageReader) {
941940 if (Error E = RecordOrErr.takeError ())
@@ -1296,14 +1295,8 @@ class SegmentBuilder {
12961295 // value for that area.
12971296 // We add counts of the regions of the same kind as the active region
12981297 // to handle the both situations.
1299- if (I->Kind == Active->Kind ) {
1300- assert (I->HasSingleByteCoverage == Active->HasSingleByteCoverage &&
1301- " Regions are generated in different coverage modes" );
1302- if (I->HasSingleByteCoverage )
1303- Active->ExecutionCount = Active->ExecutionCount || I->ExecutionCount ;
1304- else
1305- Active->ExecutionCount += I->ExecutionCount ;
1306- }
1298+ if (I->Kind == Active->Kind )
1299+ Active->ExecutionCount += I->ExecutionCount ;
13071300 }
13081301 return Regions.drop_back (std::distance (++Active, End));
13091302 }
@@ -1396,7 +1389,8 @@ static bool isExpansion(const CountedRegion &R, unsigned FileID) {
13961389}
13971390
13981391CoverageData CoverageMapping::getCoverageForFile (StringRef Filename) const {
1399- CoverageData FileCoverage (Filename);
1392+ assert (SingleByteCoverage);
1393+ CoverageData FileCoverage (*SingleByteCoverage, Filename);
14001394 std::vector<CountedRegion> Regions;
14011395
14021396 // Look up the function records in the given file. Due to hash collisions on
@@ -1460,7 +1454,9 @@ CoverageMapping::getCoverageForFunction(const FunctionRecord &Function) const {
14601454 if (!MainFileID)
14611455 return CoverageData ();
14621456
1463- CoverageData FunctionCoverage (Function.Filenames [*MainFileID]);
1457+ assert (SingleByteCoverage);
1458+ CoverageData FunctionCoverage (*SingleByteCoverage,
1459+ Function.Filenames [*MainFileID]);
14641460 std::vector<CountedRegion> Regions;
14651461 for (const auto &CR : Function.CountedRegions )
14661462 if (CR.FileID == *MainFileID) {
@@ -1487,8 +1483,9 @@ CoverageMapping::getCoverageForFunction(const FunctionRecord &Function) const {
14871483
14881484CoverageData CoverageMapping::getCoverageForExpansion (
14891485 const ExpansionRecord &Expansion) const {
1486+ assert (SingleByteCoverage);
14901487 CoverageData ExpansionCoverage (
1491- Expansion.Function .Filenames [Expansion.FileID ]);
1488+ *SingleByteCoverage, Expansion.Function .Filenames [Expansion.FileID ]);
14921489 std::vector<CountedRegion> Regions;
14931490 for (const auto &CR : Expansion.Function .CountedRegions )
14941491 if (CR.FileID == Expansion.FileID ) {
0 commit comments