[clang] 4dcfae6 - Fix a violated precondition in clang-format.
Manuel Klimek via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 1 05:39:56 PST 2021
Author: Manuel Klimek
Date: 2021-12-01T14:39:00+01:00
New Revision: 4dcfae6a003aa541600e5af42c0bec5d8e1abef0
URL: https://github.com/llvm/llvm-project/commit/4dcfae6a003aa541600e5af42c0bec5d8e1abef0
DIFF: https://github.com/llvm/llvm-project/commit/4dcfae6a003aa541600e5af42c0bec5d8e1abef0.diff
LOG: Fix a violated precondition in clang-format.
Make sure we do not try to change line comments that are non-regular, i.e. do
not start with "//" or "#". This can for example happen when "//" is
broken into two lines with an escaped newline.
Added:
Modified:
clang/lib/Format/ContinuationIndenter.cpp
clang/unittests/Format/FormatTestComments.cpp
Removed:
################################################################################
diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp
index f56b7c70d18e7..5073f5105d051 100644
--- a/clang/lib/Format/ContinuationIndenter.cpp
+++ b/clang/lib/Format/ContinuationIndenter.cpp
@@ -1984,11 +1984,17 @@ ContinuationIndenter::createBreakableToken(const FormatToken &Current,
} else if (Current.is(TT_LineComment) &&
(Current.Previous == nullptr ||
Current.Previous->isNot(TT_ImplicitStringLiteral))) {
+ bool RegularComments = [&]() {
+ for (const FormatToken *T = &Current; T && T->is(TT_LineComment);
+ T = T->Next) {
+ if (!(T->TokenText.startswith("//") || T->TokenText.startswith("#")))
+ return false;
+ }
+ return true;
+ }();
if (!Style.ReflowComments ||
CommentPragmasRegex.match(Current.TokenText.substr(2)) ||
- switchesFormatting(Current) ||
- !(Current.TokenText.startswith("//") ||
- Current.TokenText.startswith("#")))
+ switchesFormatting(Current) || !RegularComments)
return nullptr;
return std::make_unique<BreakableLineCommentSection>(
Current, StartColumn, /*InPPDirective=*/false, Encoding, Style);
diff --git a/clang/unittests/Format/FormatTestComments.cpp b/clang/unittests/Format/FormatTestComments.cpp
index 2a7ead62ba5b4..b5db353d4ae0a 100644
--- a/clang/unittests/Format/FormatTestComments.cpp
+++ b/clang/unittests/Format/FormatTestComments.cpp
@@ -3978,6 +3978,18 @@ TEST_F(FormatTestComments, SpaceAtLineCommentBegin) {
format(Code, Style));
}
+TEST_F(FormatTestComments, SplitCommentIntroducers) {
+ EXPECT_EQ(R"(//
+/\
+/
+)",
+ format(R"(//
+/\
+/
+ )",
+ getLLVMStyleWithColumns(10)));
+}
+
} // end namespace
} // end namespace format
} // end namespace clang
More information about the cfe-commits
mailing list