summaryrefslogtreecommitdiffstats
path: root/lib/CodeGen/CoverageMappingGen.cpp
diff options
context:
space:
mode:
authorVedant Kumar <vsk@apple.com>2016-06-29 05:33:09 +0000
committerVedant Kumar <vsk@apple.com>2016-06-29 05:33:09 +0000
commit03f9ee026f694b24b7411c1631b27785767c12d4 (patch)
tree03e0af88dc4348b795304bf96f53edf4100c73b8 /lib/CodeGen/CoverageMappingGen.cpp
parent91071298a03083a4023fd6c12f31f04d98dd1eb5 (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.cpp28
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 =