@@ -894,31 +894,34 @@ static Error readCoverageMappingData(
894
894
Expected<std::unique_ptr<BinaryCoverageReader>>
895
895
BinaryCoverageReader::createCoverageReaderFromBuffer (
896
896
StringRef Coverage, FuncRecordsStorage &&FuncRecords,
897
- InstrProfSymtab &&ProfileNames , uint8_t BytesInAddress,
897
+ std::unique_ptr< InstrProfSymtab> ProfileNamesPtr , uint8_t BytesInAddress,
898
898
llvm::endianness Endian, StringRef CompilationDir) {
899
- std::unique_ptr<BinaryCoverageReader> Reader (
900
- new BinaryCoverageReader (std::move (FuncRecords)));
901
- Reader->ProfileNames = std::move (ProfileNames);
899
+ if (ProfileNamesPtr == nullptr )
900
+ return make_error<CoverageMapError>(coveragemap_error::malformed,
901
+ " Caller must provide ProfileNames" );
902
+ std::unique_ptr<BinaryCoverageReader> Reader (new BinaryCoverageReader (
903
+ std::move (ProfileNamesPtr), std::move (FuncRecords)));
904
+ InstrProfSymtab &ProfileNames = *Reader->ProfileNames ;
902
905
StringRef FuncRecordsRef = Reader->FuncRecords ->getBuffer ();
903
906
if (BytesInAddress == 4 && Endian == llvm::endianness::little) {
904
907
if (Error E = readCoverageMappingData<uint32_t , llvm::endianness::little>(
905
- Reader-> ProfileNames , Coverage, FuncRecordsRef,
906
- Reader-> MappingRecords , CompilationDir, Reader->Filenames ))
908
+ ProfileNames, Coverage, FuncRecordsRef, Reader-> MappingRecords ,
909
+ CompilationDir, Reader->Filenames ))
907
910
return std::move (E);
908
911
} else if (BytesInAddress == 4 && Endian == llvm::endianness::big) {
909
912
if (Error E = readCoverageMappingData<uint32_t , llvm::endianness::big>(
910
- Reader-> ProfileNames , Coverage, FuncRecordsRef,
911
- Reader-> MappingRecords , CompilationDir, Reader->Filenames ))
913
+ ProfileNames, Coverage, FuncRecordsRef, Reader-> MappingRecords ,
914
+ CompilationDir, Reader->Filenames ))
912
915
return std::move (E);
913
916
} else if (BytesInAddress == 8 && Endian == llvm::endianness::little) {
914
917
if (Error E = readCoverageMappingData<uint64_t , llvm::endianness::little>(
915
- Reader-> ProfileNames , Coverage, FuncRecordsRef,
916
- Reader-> MappingRecords , CompilationDir, Reader->Filenames ))
918
+ ProfileNames, Coverage, FuncRecordsRef, Reader-> MappingRecords ,
919
+ CompilationDir, Reader->Filenames ))
917
920
return std::move (E);
918
921
} else if (BytesInAddress == 8 && Endian == llvm::endianness::big) {
919
922
if (Error E = readCoverageMappingData<uint64_t , llvm::endianness::big>(
920
- Reader-> ProfileNames , Coverage, FuncRecordsRef,
921
- Reader-> MappingRecords , CompilationDir, Reader->Filenames ))
923
+ ProfileNames, Coverage, FuncRecordsRef, Reader-> MappingRecords ,
924
+ CompilationDir, Reader->Filenames ))
922
925
return std::move (E);
923
926
} else
924
927
return make_error<CoverageMapError>(
@@ -963,8 +966,8 @@ loadTestingFormat(StringRef Data, StringRef CompilationDir) {
963
966
if (Data.size () < ProfileNamesSize)
964
967
return make_error<CoverageMapError>(coveragemap_error::malformed,
965
968
" the size of ProfileNames is too big" );
966
- InstrProfSymtab ProfileNames;
967
- if (Error E = ProfileNames. create (Data.substr (0 , ProfileNamesSize), Address))
969
+ auto ProfileNames = std::make_unique<InstrProfSymtab>() ;
970
+ if (Error E = ProfileNames-> create (Data.substr (0 , ProfileNamesSize), Address))
968
971
return std::move (E);
969
972
Data = Data.substr (ProfileNamesSize);
970
973
@@ -1099,7 +1102,7 @@ loadBinaryFormat(std::unique_ptr<Binary> Bin, StringRef Arch,
1099
1102
OF->isLittleEndian () ? llvm::endianness::little : llvm::endianness::big;
1100
1103
1101
1104
// Look for the sections that we are interested in.
1102
- InstrProfSymtab ProfileNames;
1105
+ auto ProfileNames = std::make_unique<InstrProfSymtab>() ;
1103
1106
std::vector<SectionRef> NamesSectionRefs;
1104
1107
// If IPSK_name is not found, fallback to search for IPK_covname, which is
1105
1108
// used when binary correlation is enabled.
@@ -1116,7 +1119,7 @@ loadBinaryFormat(std::unique_ptr<Binary> Bin, StringRef Arch,
1116
1119
return make_error<CoverageMapError>(
1117
1120
coveragemap_error::malformed,
1118
1121
" the size of coverage mapping section is not one" );
1119
- if (Error E = ProfileNames. create (NamesSectionRefs.back ()))
1122
+ if (Error E = ProfileNames-> create (NamesSectionRefs.back ()))
1120
1123
return std::move (E);
1121
1124
1122
1125
auto CoverageSection = lookupSections (*OF, IPSK_covmap);
0 commit comments