diff options
Diffstat (limited to 'llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp')
-rw-r--r-- | llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp index de7be52..d328460 100644 --- a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp +++ b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp @@ -244,7 +244,9 @@ Error RawCoverageMappingReader::readMappingRegionsSubArray( unsigned LineStart = 0; for (size_t I = 0; I < NumRegions; ++I) { Counter C, C2; - uint64_t BIDX, NC, ID, TID, FID; + uint64_t BIDX, NC; + // They are stored as internal values plus 1 (min is -1) + uint64_t ID1, TID1, FID1; mcdc::Parameters Params; CounterMappingRegion::RegionKind Kind = CounterMappingRegion::CodeRegion; @@ -303,28 +305,29 @@ Error RawCoverageMappingReader::readMappingRegionsSubArray( return Err; if (auto Err = readCounter(C2)) return Err; - if (auto Err = readIntMax(ID, std::numeric_limits<unsigned>::max())) + if (auto Err = readIntMax(ID1, std::numeric_limits<int16_t>::max())) return Err; - if (auto Err = readIntMax(TID, std::numeric_limits<unsigned>::max())) + if (auto Err = readIntMax(TID1, std::numeric_limits<int16_t>::max())) return Err; - if (auto Err = readIntMax(FID, std::numeric_limits<unsigned>::max())) + if (auto Err = readIntMax(FID1, std::numeric_limits<int16_t>::max())) return Err; - if (ID == 0) + if (ID1 == 0) return make_error<CoverageMapError>( coveragemap_error::malformed, "MCDCConditionID shouldn't be zero"); Params = mcdc::BranchParameters{ - static_cast<unsigned>(ID), - {static_cast<unsigned>(FID), static_cast<unsigned>(TID)}}; + static_cast<int16_t>(static_cast<int16_t>(ID1) - 1), + {static_cast<int16_t>(static_cast<int16_t>(FID1) - 1), + static_cast<int16_t>(static_cast<int16_t>(TID1) - 1)}}; break; case CounterMappingRegion::MCDCDecisionRegion: Kind = CounterMappingRegion::MCDCDecisionRegion; if (auto Err = readIntMax(BIDX, std::numeric_limits<unsigned>::max())) return Err; - if (auto Err = readIntMax(NC, std::numeric_limits<unsigned>::max())) + if (auto Err = readIntMax(NC, std::numeric_limits<int16_t>::max())) return Err; Params = mcdc::DecisionParameters{static_cast<unsigned>(BIDX), - static_cast<unsigned>(NC)}; + static_cast<uint16_t>(NC)}; break; default: return make_error<CoverageMapError>(coveragemap_error::malformed, |