[clang] [clang-format] Keep compound literals stable in macro bodies (PR #173771)

Björn Schäpers via cfe-commits cfe-commits at lists.llvm.org
Sun Dec 28 05:26:18 PST 2025


================
@@ -5858,6 +5858,26 @@ TEST_F(FormatTest, RespectWhitespaceInMacroDefinitions) {
   verifyFormat("#define false((foo)0)", Style);
 }
 
+TEST_F(FormatTest, CompoundLiteralInMacroDefinition) {
+  // https://github.com/llvm/llvm-project/issues/173583
+  //
+  // A C compound literal `(type){...}` is not a function/block. When used in a
+  // macro definition, clang-format should not treat `&` as a function name and
+  // reformat it as if it were `&(type) { ... }`.
+  FormatStyle Style = getLLVMStyle();
+  Style.Language = FormatStyle::LK_Cpp;
+  Style.IndentWidth = 4;
+  Style.TabWidth = 4;
+  Style.UseTab = FormatStyle::UT_Never;
+  Style.AlignEscapedNewlines = FormatStyle::ENAS_LeftWithLastLine;
+  Style.AllowShortFunctionsOnASingleLine = FormatStyle::SFS_Empty;
+  Style.BreakBeforeBraces = FormatStyle::BS_Attach;
----------------
HazardyKnusperkeks wrote:

Is any of this necessary to trigger the bug? If not just drop it.

https://github.com/llvm/llvm-project/pull/173771


More information about the cfe-commits mailing list