Author: vedantk Date: Wed Jul 26 19:20:25 2017 New Revision: 309245 URL: http://llvm.org/viewvc/llvm-project?rev=309245&view=rev Log: [Coverage] NFC: Simplify sanity checks with a SpellingRange utility
This should simplify D35925. Modified: cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp Modified: cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp?rev=309245&r1=309244&r2=309245&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp (original) +++ cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp Wed Jul 26 19:20:25 2017 @@ -73,6 +73,36 @@ public: } }; +/// Spelling locations for the start and end of a source region. +struct SpellingRegion { + /// The line where the region starts. + unsigned LineStart; + + /// The column where the region starts. + unsigned ColumnStart; + + /// The line where the region ends. + unsigned LineEnd; + + /// The column where the region ends. + unsigned ColumnEnd; + + SpellingRegion(SourceManager &SM, SourceLocation LocStart, + SourceLocation LocEnd) { + LineStart = SM.getSpellingLineNumber(LocStart); + ColumnStart = SM.getSpellingColumnNumber(LocStart); + LineEnd = SM.getSpellingLineNumber(LocEnd); + ColumnEnd = SM.getSpellingColumnNumber(LocEnd); + } + + /// Check if the start and end locations appear in source order, i.e + /// top->bottom, left->right. + bool isInSourceOrder() const { + return (LineStart < LineEnd) || + (LineStart == LineEnd && ColumnStart <= ColumnEnd); + } +}; + /// \brief Provides the common functionality for the different /// coverage mapping region builders. class CoverageMappingBuilder { @@ -241,12 +271,9 @@ public: auto CovFileID = getCoverageFileID(LocStart); if (!CovFileID) continue; - unsigned LineStart = SM.getSpellingLineNumber(LocStart); - unsigned ColumnStart = SM.getSpellingColumnNumber(LocStart); - unsigned LineEnd = SM.getSpellingLineNumber(LocEnd); - unsigned ColumnEnd = SM.getSpellingColumnNumber(LocEnd); + SpellingRegion SR{SM, LocStart, LocEnd}; auto Region = CounterMappingRegion::makeSkipped( - *CovFileID, LineStart, ColumnStart, LineEnd, ColumnEnd); + *CovFileID, SR.LineStart, SR.ColumnStart, SR.LineEnd, SR.ColumnEnd); // Make sure that we only collect the regions that are inside // the souce code of this function. if (Region.LineStart >= FileLineRanges[*CovFileID].first && @@ -284,16 +311,12 @@ public: if (Filter.count(std::make_pair(LocStart, LocEnd))) continue; - // Find the spilling locations for the mapping region. - unsigned LineStart = SM.getSpellingLineNumber(LocStart); - unsigned ColumnStart = SM.getSpellingColumnNumber(LocStart); - unsigned LineEnd = SM.getSpellingLineNumber(LocEnd); - unsigned ColumnEnd = SM.getSpellingColumnNumber(LocEnd); - - assert(LineStart <= LineEnd && "region start and end out of order"); + // Find the spelling locations for the mapping region. + SpellingRegion SR{SM, LocStart, LocEnd}; + assert(SR.isInSourceOrder() && "region start and end out of order"); MappingRegions.push_back(CounterMappingRegion::makeRegion( - Region.getCounter(), *CovFileID, LineStart, ColumnStart, LineEnd, - ColumnEnd)); + Region.getCounter(), *CovFileID, SR.LineStart, SR.ColumnStart, + SR.LineEnd, SR.ColumnEnd)); } } @@ -317,14 +340,11 @@ public: "region spans multiple files"); Filter.insert(std::make_pair(ParentLoc, LocEnd)); - unsigned LineStart = SM.getSpellingLineNumber(ParentLoc); - unsigned ColumnStart = SM.getSpellingColumnNumber(ParentLoc); - unsigned LineEnd = SM.getSpellingLineNumber(LocEnd); - unsigned ColumnEnd = SM.getSpellingColumnNumber(LocEnd); - + SpellingRegion SR{SM, ParentLoc, LocEnd}; + assert(SR.isInSourceOrder() && "region start and end out of order"); MappingRegions.push_back(CounterMappingRegion::makeExpansion( - *ParentFileID, *ExpandedFileID, LineStart, ColumnStart, LineEnd, - ColumnEnd)); + *ParentFileID, *ExpandedFileID, SR.LineStart, SR.ColumnStart, + SR.LineEnd, SR.ColumnEnd)); } return Filter; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits