[clang] 26ffc71 - [clang-format] Disallow breaking before/after ## (#200721)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 5 22:10:04 PDT 2026
Author: owenca
Date: 2026-06-05T22:09:59-07:00
New Revision: 26ffc71afa7c9a4a9904742016b343de6f2ea4e6
URL: https://github.com/llvm/llvm-project/commit/26ffc71afa7c9a4a9904742016b343de6f2ea4e6
DIFF: https://github.com/llvm/llvm-project/commit/26ffc71afa7c9a4a9904742016b343de6f2ea4e6.diff
LOG: [clang-format] Disallow breaking before/after ## (#200721)
Fixes #199775
Added:
Modified:
clang/lib/Format/TokenAnnotator.cpp
clang/unittests/Format/FormatTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index 90c9466fdf431..22b41fb337cda 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -6495,6 +6495,8 @@ bool TokenAnnotator::canBreakBefore(const AnnotatedLine &Line,
!(Right.Next &&
Right.Next->isOneOf(TT_FunctionDeclarationName, tok::kw_const)));
}
+ if (Left.is(tok::hashhash) || Right.is(tok::hashhash))
+ return false;
if (Right.isOneOf(TT_StartOfName, TT_FunctionDeclarationName,
TT_ClassHeadName, TT_QtProperty, tok::kw_operator)) {
return true;
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index 3c22f4fe8866c..1f243fe967fd1 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -5967,22 +5967,33 @@ TEST_F(FormatTest, HashInMacroDefinition) {
verifyFormat("#define A(c) uR#c");
verifyFormat("#define A(c) UR#c");
verifyFormat("#define A(c) u8R#c");
- verifyFormat("#define A \\\n b #c;", getLLVMStyleWithColumns(11));
+
+ auto Style = getLLVMStyleWithColumns(11);
+ verifyFormat("#define A \\\n b #c;", Style);
verifyFormat("#define A \\\n"
" { \\\n"
" f(#c); \\\n"
" }",
- getLLVMStyleWithColumns(11));
+ Style);
+ Style.ColumnLimit = 22;
verifyFormat("#define A(X) \\\n"
" void function##X()",
- getLLVMStyleWithColumns(22));
-
+ Style);
verifyFormat("#define A(a, b, c) \\\n"
" void a##b##c()",
- getLLVMStyleWithColumns(22));
+ Style);
+ verifyFormat("#define A void # ## #", Style);
- verifyFormat("#define A void # ## #", getLLVMStyleWithColumns(22));
+ Style.ColumnLimit = 60;
+ Style.AlignEscapedNewlines = FormatStyle::ENAS_DontAlign;
+ verifyFormat(
+ "#define MACRO(Name) \\\n"
+ " struct LongPrefix##Name##LongSuffix< \\\n"
+ " VeryLongTemplateArgument> {};",
+ "#define MACRO(Name) \\\n"
+ " struct LongPrefix##Name##LongSuffix<VeryLongTemplateArgument> {};",
+ Style);
verifyFormat("{\n"
" {\n"
More information about the cfe-commits
mailing list