Author: Owen Pan Date: 2025-05-19T01:30:42-07:00 New Revision: 6da2acf8e99ec517bfbe498af2519d29834e2583
URL: https://github.com/llvm/llvm-project/commit/6da2acf8e99ec517bfbe498af2519d29834e2583 DIFF: https://github.com/llvm/llvm-project/commit/6da2acf8e99ec517bfbe498af2519d29834e2583.diff LOG: [clang-format] Merge short inline function in macro definition body (#140366) Fix #62356 Added: Modified: clang/lib/Format/UnwrappedLineFormatter.cpp clang/unittests/Format/FormatTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp b/clang/lib/Format/UnwrappedLineFormatter.cpp index 1298e3e7bab38..f2ed027b2c047 100644 --- a/clang/lib/Format/UnwrappedLineFormatter.cpp +++ b/clang/lib/Format/UnwrappedLineFormatter.cpp @@ -314,8 +314,8 @@ class LineJoiner { const AnnotatedLine *Line = nullptr; for (auto J = I - 1; J >= AnnotatedLines.begin(); --J) { assert(*J); - if ((*J)->InPPDirective || (*J)->isComment() || - (*J)->Level > TheLine->Level) { + if (((*J)->InPPDirective && !(*J)->InMacroBody) || + (*J)->isComment() || (*J)->Level > TheLine->Level) { continue; } if ((*J)->Level < TheLine->Level || diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 8fe57c80cbe25..c0633ba3c29b3 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -15093,6 +15093,13 @@ TEST_F(FormatTest, PullInlineFunctionDefinitionsIntoSingleLine) { "};", MergeInlineOnly); + MergeInlineOnly.AlignEscapedNewlines = FormatStyle::ENAS_Left; + verifyFormat("#define Foo \\\n" + " struct S { \\\n" + " void foo() { return; } \\\n" + " }", + MergeInlineOnly); + // Also verify behavior when BraceWrapping.AfterFunction = true MergeInlineOnly.BreakBeforeBraces = FormatStyle::BS_Custom; MergeInlineOnly.BraceWrapping.AfterFunction = true; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits