diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/ProfileData/CoverageMappingReader.cpp | 16 | ||||
| -rw-r--r-- | llvm/lib/ProfileData/CoverageMappingWriter.cpp | 6 |
2 files changed, 15 insertions, 7 deletions
diff --git a/llvm/lib/ProfileData/CoverageMappingReader.cpp b/llvm/lib/ProfileData/CoverageMappingReader.cpp index c58df0fc093..c8108d4ce99 100644 --- a/llvm/lib/ProfileData/CoverageMappingReader.cpp +++ b/llvm/lib/ProfileData/CoverageMappingReader.cpp @@ -170,13 +170,17 @@ std::error_code RawCoverageMappingReader::readMappingRegionsSubArray( } // Read the source range. - uint64_t LineStartDelta, ColumnStart, NumLines, ColumnEnd; + uint64_t LineStartDelta, CodeBeforeColumnStart, NumLines, ColumnEnd; if (auto Err = readIntMax(LineStartDelta, std::numeric_limits<unsigned>::max())) return Err; - if (auto Err = - readIntMax(ColumnStart, std::numeric_limits<unsigned>::max())) + if (auto Err = readULEB128(CodeBeforeColumnStart)) return Err; + bool HasCodeBefore = CodeBeforeColumnStart & 1; + uint64_t ColumnStart = CodeBeforeColumnStart >> + CounterMappingRegion::EncodingHasCodeBeforeBits; + if (ColumnStart > std::numeric_limits<unsigned>::max()) + return error(instrprof_error::malformed); if (auto Err = readIntMax(NumLines, std::numeric_limits<unsigned>::max())) return Err; if (auto Err = readIntMax(ColumnEnd, std::numeric_limits<unsigned>::max())) @@ -194,9 +198,9 @@ std::error_code RawCoverageMappingReader::readMappingRegionsSubArray( ColumnStart = 1; ColumnEnd = std::numeric_limits<unsigned>::max(); } - MappingRegions.push_back( - CounterMappingRegion(C, InferredFileID, LineStart, ColumnStart, - LineStart + NumLines, ColumnEnd, Kind)); + MappingRegions.push_back(CounterMappingRegion( + C, InferredFileID, LineStart, ColumnStart, LineStart + NumLines, + ColumnEnd, HasCodeBefore, Kind)); MappingRegions.back().ExpandedFileID = ExpandedFileID; } return success(); diff --git a/llvm/lib/ProfileData/CoverageMappingWriter.cpp b/llvm/lib/ProfileData/CoverageMappingWriter.cpp index f9bbe61fb48..f5e6ab46380 100644 --- a/llvm/lib/ProfileData/CoverageMappingWriter.cpp +++ b/llvm/lib/ProfileData/CoverageMappingWriter.cpp @@ -181,7 +181,11 @@ void CoverageMappingWriter::write(raw_ostream &OS) { } assert(I.LineStart >= PrevLineStart); encodeULEB128(I.LineStart - PrevLineStart, OS); - encodeULEB128(I.ColumnStart, OS); + uint64_t CodeBeforeColumnStart = + uint64_t(I.HasCodeBefore) | + (uint64_t(I.ColumnStart) + << CounterMappingRegion::EncodingHasCodeBeforeBits); + encodeULEB128(CodeBeforeColumnStart, OS); assert(I.LineEnd >= I.LineStart); encodeULEB128(I.LineEnd - I.LineStart, OS); encodeULEB128(I.ColumnEnd, OS); |

