[PATCH] D120902: [clang-format] Fix assertion failure/crash with `AllowShortFunctionsOnASingleLine: Inline/InlineOnly`.
Marek Kurdej via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 3 06:39:56 PST 2022
curdeius created this revision.
curdeius added reviewers: MyDeveloperDay, HazardyKnusperkeks, owenpan.
Herald added a project: All.
curdeius requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
Fixes https://github.com/llvm/llvm-project/issues/54147.
When handling `AllowShortFunctionsOnASingleLine`, we were searching for the last line with a smaller level than the current line. The search was incorrect when the first line had the same level as the current one. This led to an unsatisfied assumption about the existence of a brace (non-comment token).
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D120902
Files:
clang/lib/Format/UnwrappedLineFormatter.cpp
clang/unittests/Format/FormatTest.cpp
Index: clang/unittests/Format/FormatTest.cpp
===================================================================
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -12639,6 +12639,13 @@
"};",
MergeInlineOnly);
verifyFormat("int f() {}", MergeInlineOnly);
+ // https://llvm.org/PR54147
+ verifyFormat("auto lambda = []() {\n"
+ " // comment\n"
+ " f();\n"
+ " g();\n"
+ "};",
+ MergeInlineOnly);
// Also verify behavior when BraceWrapping.AfterFunction = true
MergeInlineOnly.BreakBeforeBraces = FormatStyle::BS_Custom;
Index: clang/lib/Format/UnwrappedLineFormatter.cpp
===================================================================
--- clang/lib/Format/UnwrappedLineFormatter.cpp
+++ clang/lib/Format/UnwrappedLineFormatter.cpp
@@ -310,6 +310,8 @@
for (; J != AnnotatedLines.begin(); --J)
if ((*J)->Level < TheLine->Level)
break;
+ if ((*J)->Level == TheLine->Level)
+ return false;
// Check if the found line starts a record.
const FormatToken *LastNonComment = (*J)->Last;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D120902.412702.patch
Type: text/x-patch
Size: 1218 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220303/f0c110c0/attachment.bin>
More information about the cfe-commits
mailing list