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 | 03f9ee026f694b24b7411c1631b27785767c12d4 (patch) | |
tree | 03e0af88dc4348b795304bf96f53edf4100c73b8 /lib/CodeGen/CoverageMappingGen.cpp | |
parent | 91071298a03083a4023fd6c12f31f04d98dd1eb5 (diff) |
Revert "[Coverage] Adopt llvm::coverage::encodeFilenamesAndRawMappings (NFC)"
This reverts commit 161ff9db3a3d0d62880d1cb18d58182cd3034912 (r273056).
This is breaking stage2 instrumented builds with "malformed coverage
data" errors.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274104 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CoverageMappingGen.cpp')
-rw-r--r-- | lib/CodeGen/CoverageMappingGen.cpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/lib/CodeGen/CoverageMappingGen.cpp b/lib/CodeGen/CoverageMappingGen.cpp index b56cd077c8..3980c4704c 100644 --- a/lib/CodeGen/CoverageMappingGen.cpp +++ b/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 = |