Skip to content

Commit 3998fdf

Browse files
committed
DiagnosticVerifier: Optimize CapturedFixItInfo::getLineColumnRange for intra-line source ranges
1 parent d291143 commit 3998fdf

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

lib/Frontend/DiagnosticVerifier.cpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,19 @@ CapturedFixItInfo::getLineColumnRange(const SourceManager &SM,
4747

4848
std::tie(LineColRange.StartLine, LineColRange.StartCol) =
4949
SM.getPresumedLineAndColumnForLoc(SrcRange.getStart(), BufferID);
50-
std::tie(LineColRange.EndLine, LineColRange.EndCol) =
51-
SM.getPresumedLineAndColumnForLoc(SrcRange.getEnd(), BufferID);
50+
51+
// We don't have to compute much if the end location is on the same line.
52+
if (SrcRange.getByteLength() == 0) {
53+
LineColRange.EndLine = LineColRange.StartLine;
54+
LineColRange.EndCol = LineColRange.StartCol;
55+
} else if (SM.extractText(SrcRange, BufferID).find_first_of("\n\r") ==
56+
StringRef::npos) {
57+
LineColRange.EndLine = LineColRange.StartLine;
58+
LineColRange.EndCol = LineColRange.StartCol + SrcRange.getByteLength();
59+
} else {
60+
std::tie(LineColRange.EndLine, LineColRange.EndCol) =
61+
SM.getPresumedLineAndColumnForLoc(SrcRange.getEnd(), BufferID);
62+
}
5263

5364
return LineColRange;
5465
}

0 commit comments

Comments
 (0)