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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits