-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[clang-format][NFC] Clean up fillRanges() in ClangFormat.cpp #143236
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-clang-format Author: Owen Pan (owenca) ChangesFull diff: https://github.com/llvm/llvm-project/pull/143236.diff 1 Files Affected:
diff --git a/clang/tools/clang-format/ClangFormat.cpp b/clang/tools/clang-format/ClangFormat.cpp
index b22d3aaf3183b..441ed442a30a9 100644
--- a/clang/tools/clang-format/ClangFormat.cpp
+++ b/clang/tools/clang-format/ClangFormat.cpp
@@ -244,17 +244,17 @@ static bool fillRanges(MemoryBuffer *Code,
DiagnosticsEngine Diagnostics(
IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs), DiagOpts);
SourceManager Sources(Diagnostics, Files);
- FileID ID = createInMemoryFile("<irrelevant>", *Code, Sources, Files,
- InMemoryFileSystem.get());
+ const auto ID = createInMemoryFile("<irrelevant>", *Code, Sources, Files,
+ InMemoryFileSystem.get());
if (!LineRanges.empty()) {
if (!Offsets.empty() || !Lengths.empty()) {
errs() << "error: cannot use -lines with -offset/-length\n";
return true;
}
- for (unsigned i = 0, e = LineRanges.size(); i < e; ++i) {
+ for (const auto &LineRange : LineRanges) {
unsigned FromLine, ToLine;
- if (parseLineRange(LineRanges[i], FromLine, ToLine)) {
+ if (parseLineRange(LineRange, FromLine, ToLine)) {
errs() << "error: invalid <start line>:<end line> pair\n";
return true;
}
@@ -266,12 +266,12 @@ static bool fillRanges(MemoryBuffer *Code,
errs() << "error: start line should not exceed end line\n";
return true;
}
- SourceLocation Start = Sources.translateLineCol(ID, FromLine, 1);
- SourceLocation End = Sources.translateLineCol(ID, ToLine, UINT_MAX);
+ const auto Start = Sources.translateLineCol(ID, FromLine, 1);
+ const auto End = Sources.translateLineCol(ID, ToLine, UINT_MAX);
if (Start.isInvalid() || End.isInvalid())
return true;
- unsigned Offset = Sources.getFileOffset(Start);
- unsigned Length = Sources.getFileOffset(End) - Offset;
+ const auto Offset = Sources.getFileOffset(Start);
+ const auto Length = Sources.getFileOffset(End) - Offset;
Ranges.push_back(tooling::Range(Offset, Length));
}
return false;
@@ -284,27 +284,28 @@ static bool fillRanges(MemoryBuffer *Code,
errs() << "error: number of -offset and -length arguments must match.\n";
return true;
}
- for (unsigned i = 0, e = Offsets.size(); i != e; ++i) {
- if (Offsets[i] >= Code->getBufferSize()) {
- errs() << "error: offset " << Offsets[i] << " is outside the file\n";
+ for (unsigned I = 0, E = Offsets.size(), Size = Lengths.size(); I < E; ++I) {
+ auto Offset = Offsets[I];
+ if (Offset >= Code->getBufferSize()) {
+ errs() << "error: offset " << Offset << " is outside the file\n";
return true;
}
- SourceLocation Start =
- Sources.getLocForStartOfFile(ID).getLocWithOffset(Offsets[i]);
+ const auto Start =
+ Sources.getLocForStartOfFile(ID).getLocWithOffset(Offset);
SourceLocation End;
- if (i < Lengths.size()) {
- if (Offsets[i] + Lengths[i] > Code->getBufferSize()) {
- errs() << "error: invalid length " << Lengths[i]
- << ", offset + length (" << Offsets[i] + Lengths[i]
- << ") is outside the file.\n";
+ if (I < Size) {
+ const auto L = Lengths[I];
+ if (Offset + L > Code->getBufferSize()) {
+ errs() << "error: invalid length " << L << ", offset + length ("
+ << Offset + L << ") is outside the file.\n";
return true;
}
- End = Start.getLocWithOffset(Lengths[i]);
+ End = Start.getLocWithOffset(L);
} else {
End = Sources.getLocForEndOfFile(ID);
}
- unsigned Offset = Sources.getFileOffset(Start);
- unsigned Length = Sources.getFileOffset(End) - Offset;
+ Offset = Sources.getFileOffset(Start);
+ const auto Length = Sources.getFileOffset(End) - Offset;
Ranges.push_back(tooling::Range(Offset, Length));
}
return false;
|
- Don't recalculate Offset for -offset. - Calculate Length only if -length is unspecified.
It seems this change has introduced a bug when formatting multiple files in one go. Passing a shorter file after a longer one results in a stale length being used. It can be reproduced with trivially short files:
This was supposed to be an NFC change so I'm going to revert the patch while the problem gets investigated/fixed. |
Reapply llvm#143236 after fixing the bug reported in llvm#143236 (comment).
Reapply llvm#143236 and fix the bug reported in llvm#143236 (comment).
…lvm#143236)" This reverts commit 897ccdd. It introduced a bug when formatting multiple files in one go. When a shorter file is passed after a longer one, a stale length from the previous file seems to be used, triggering an "invalid length (...) is outside the file" error.
…lvm#143236)" This reverts commit 897ccdd. It introduced a bug when formatting multiple files in one go. When a shorter file is passed after a longer one, a stale length from the previous file seems to be used, triggering an "invalid length (...) is outside the file" error.
…#143477) Reapply #143236 and fix the bug reported in #143236 (comment).
…Format.cpp" (#143477) Reapply llvm/llvm-project#143236 and fix the bug reported in llvm/llvm-project#143236 (comment).
…lvm#143236)" This reverts commit 897ccdd. It introduced a bug when formatting multiple files in one go. When a shorter file is passed after a longer one, a stale length from the previous file seems to be used, triggering an "invalid length (...) is outside the file" error.
…llvm#143477) Reapply llvm#143236 and fix the bug reported in llvm#143236 (comment).
…llvm#143477) Reapply llvm#143236 and fix the bug reported in llvm#143236 (comment).
No description provided.