summaryrefslogtreecommitdiffstats
path: root/clang/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
commit9e324dd16ecc4428ad91b6a38df3635688909a45 (patch)
tree0f300196da1a1155d55f9af41385fbf00c3b1ea1 /clang/lib/CodeGen/CoverageMappingGen.cpp
parent722830a51bde5cf6b96acdcfab4c836260fe0216 (diff)
downloadbcm5719-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.cpp28
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 =
OpenPOWER on IntegriCloud