diff options
author | Vedant Kumar <vsk@apple.com> | 2016-06-29 05:33:09 +0000 |
---|---|---|
committer | Vedant Kumar <vsk@apple.com> | 2016-06-29 05:33:09 +0000 |
commit | 9e324dd16ecc4428ad91b6a38df3635688909a45 (patch) | |
tree | 0f300196da1a1155d55f9af41385fbf00c3b1ea1 /clang/lib/CodeGen/CoverageMappingGen.cpp | |
parent | 722830a51bde5cf6b96acdcfab4c836260fe0216 (diff) | |
download | bcm5719-llvm-9e324dd16ecc4428ad91b6a38df3635688909a45.tar.gz bcm5719-llvm-9e324dd16ecc4428ad91b6a38df3635688909a45.zip |
Revert "[Coverage] Adopt llvm::coverage::encodeFilenamesAndRawMappings (NFC)"
This reverts commit 161ff9db3a3d0d62880d1cb18d58182cd3034912 (r273056).
This is breaking stage2 instrumented builds with "malformed coverage
data" errors.
llvm-svn: 274104
Diffstat (limited to 'clang/lib/CodeGen/CoverageMappingGen.cpp')
-rw-r--r-- | clang/lib/CodeGen/CoverageMappingGen.cpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/clang/lib/CodeGen/CoverageMappingGen.cpp b/clang/lib/CodeGen/CoverageMappingGen.cpp index b56cd077c8b..3980c4704ce 100644 --- a/clang/lib/CodeGen/CoverageMappingGen.cpp +++ b/clang/lib/CodeGen/CoverageMappingGen.cpp @@ -1013,27 +1013,35 @@ void CoverageMappingModuleGen::emit() { // Create the filenames and merge them with coverage mappings llvm::SmallVector<std::string, 16> FilenameStrs; + llvm::SmallVector<StringRef, 16> FilenameRefs; FilenameStrs.resize(FileEntries.size()); + FilenameRefs.resize(FileEntries.size()); for (const auto &Entry : FileEntries) { llvm::SmallString<256> Path(Entry.first->getName()); llvm::sys::fs::make_absolute(Path); auto I = Entry.second; FilenameStrs[I] = std::string(Path.begin(), Path.end()); + FilenameRefs[I] = FilenameStrs[I]; } - size_t FilenamesSize; - size_t CoverageMappingSize; - llvm::Expected<std::string> CoverageDataOrErr = encodeFilenamesAndRawMappings( - FilenameStrs, CoverageMappings, FilenamesSize, CoverageMappingSize); - if (llvm::Error E = CoverageDataOrErr.takeError()) { - llvm::handleAllErrors(std::move(E), [](llvm::ErrorInfoBase &EI) { - llvm::report_fatal_error(EI.message()); - }); + std::string FilenamesAndCoverageMappings; + llvm::raw_string_ostream OS(FilenamesAndCoverageMappings); + CoverageFilenamesSectionWriter(FilenameRefs).write(OS); + std::string RawCoverageMappings = + llvm::join(CoverageMappings.begin(), CoverageMappings.end(), ""); + OS << RawCoverageMappings; + size_t CoverageMappingSize = RawCoverageMappings.size(); + size_t FilenamesSize = OS.str().size() - CoverageMappingSize; + // Append extra zeroes if necessary to ensure that the size of the filenames + // and coverage mappings is a multiple of 8. + if (size_t Rem = OS.str().size() % 8) { + CoverageMappingSize += 8 - Rem; + for (size_t I = 0, S = 8 - Rem; I < S; ++I) + OS << '\0'; } - std::string CoverageData = std::move(CoverageDataOrErr.get()); auto *FilenamesAndMappingsVal = - llvm::ConstantDataArray::getString(Ctx, CoverageData, false); + llvm::ConstantDataArray::getString(Ctx, OS.str(), false); // Create the deferred function records array auto RecordsTy = |