<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/82618>82618</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang-format] Reflowing macros sometimes erroneously removes backslashes, causing compilation to fail.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-format
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
BenoitLabrique-EH
</td>
</tr>
</table>
<pre>
Using the configuration file below, applying clang-format to:
```
#define DEFINE_COMMAND_PROCESS_TABLE(Enum) \
const STExample TCommand::EXPL_MAIN[] = { \
{Enum::GetName(), "shows help"} \
};
```
results in
```
#define DEFINE_COMMAND_PROCESS_TABLE(Enum) \
const STExample TCommand::EXPL_MAIN[] = { \
{Enum::GetName(), "shows help"}
};
```
which is obviously wrong because the last \ has been removed, causing the subsequent compilation to fail.
Clang-Format version is 17.0.6
The configuration I'm using is the following:
####
---
Language: Cpp
Standard: c++20
AccessModifierOffset: -4
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments:
Enabled: true
AlignCompound: true
PadOperators: false
AlignConsecutiveBitFields: AcrossEmptyLines
AlignConsecutiveDeclarations: Consecutive
AlignConsecutiveMacros: Consecutive
AlignEscapedNewlines: Left
AlignOperands: Align
AlignTrailingComments: Always
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: false
AllowShortEnumsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: Never
AllowShortLambdasOnASingleLine : None
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None # DEPRECATED
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: Yes
AttributeMacros:
- __capability
- __packed
BinPackArguments: true
BinPackParameters: true
BitFieldColonSpacing: Both
BraceWrapping:
AfterCaseLabel: true
AfterClass: true
AfterControlStatement: Always
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: true
AfterStruct: true
AfterUnion: true
AfterExternBlock: true
BeforeCatch: true
BeforeElse: true
BeforeLambdaBody: true
BeforeWhile: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakAfterJavaFieldAnnotations: false
BreakBeforeBinaryOperators: NonAssignment
BreakBeforeBraces: Custom
BreakBeforeConceptDeclarations: true
BreakBeforeTernaryOperators: true
BreakConstructorInitializers: BeforeComma
BreakInheritanceList: AfterComma
BreakStringLiterals: true
BreakConstructorInitializersBeforeComma: true
ColumnLimit: 120
CommentPragmas: ^!<|^/<|^lint
CompactNamespaces: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DeriveLineEnding: false
DerivePointerAlignment: false
DisableFormat: false
EmptyLineBeforeAccessModifier: LogicalBlock
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: false
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
- FOR_ALL
- FOR_ALL_COND
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
SortPriority: 0
CaseSensitive: false
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
SortPriority: 0
CaseSensitive: false
- Regex: '.*'
Priority: 1
SortPriority: 0
CaseSensitive: false
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
IndentCaseBlocks: true
IndentCaseLabels: false
IndentExternBlock: AfterExternBlock
IndentGotoLabels: false
IndentPPDirectives: BeforeHash
IndentWidth: 4
IndentWrappedFunctionNames: true
InsertTrailingCommas: None
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 2
NamespaceIndentation: All
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 4
ObjCBreakBeforeNestedBlockParam: true
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: false
PenaltyBreakAssignment: 0
PenaltyBreakBeforeFirstCallParameter: 0
PenaltyBreakComment: 60
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 0
PenaltyExcessCharacter: 1000000
PenaltyIndentedWhitespace: 0
PenaltyReturnTypeOnItsOwnLine: 200
PointerAlignment: Middle
ReflowComments: false
SortIncludes: Never
SortJavaStaticImport: Before
SortUsingDeclarations: Lexicographic
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceAroundPointerQualifiers: Default
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeCpp11BracedList: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: Custom
SpaceBeforeParensOptions:
AfterControlStatements: true
AfterForeachMacros: true
AfterFunctionDeclarationName: false
AfterFunctionDefinitionName : false
AfterIfMacros: true
AfterOverloadedOperator : false
AfterRequiresInClause: true
AfterRequiresInExpression: true
BeforeNonEmptyParentheses: false
SpaceBeforeRangeBasedForLoopColon: true
SpaceBeforeSquareBrackets: false
SpaceInEmptyBlock: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: Never
SpacesInConditionalStatement: false
SpacesInContainerLiterals: false
SpacesInSquareBrackets: false
StatementAttributeLikeMacros:
- Q_EMIT
- emit
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 4
UseTab: Never
WhitespaceSensitiveMacros:
- STRINGIZE
- PP_STRINGIZE
- BOOST_PP_STRINGIZE
- NS_SWIFT_NAME
- CF_SWIFT_NAME
AlignArrayOfStructures: Left
EmptyLineAfterAccessModifier: Never
IfMacros:
- KJ_IF_MAYBE
IndentAccessModifiers: false
LambdaBodyIndentation: Signature
PPIndentWidth: -1
ReferenceAlignment: Pointer
ShortNamespaceLines: 1
SpacesInLineCommentPrefix:
Minimum: 1
Maximum: -1
PackConstructorInitializers: Never
PenaltyBreakOpenParenthesis: 100
QualifierAlignment: Leave # Setting to something other than Leave, COULD lead to incorrect code formatting
SeparateDefinitionBlocks: Always
IndentRequiresClause: true
InsertBraces: false # warning: setting to true is unstable!
RequiresClausePosition: OwnLine
BreakAfterAttributes: Always
BreakArrays: false
InsertNewlineAtEOF: true
LineEnding: LF
RemoveSemicolon: false # warning: setting to true is unstable!
RequiresExpressionIndentation: OuterScope
KeepEmptyLinesAtEOF: false
RemoveParentheses: Leave # warning: setting to != Leave is unstable!
SpacesInParens: Never # set to Custom to let SpacesInParensOptions it
SpacesInParensOptions:
InConditionalStatements: false
InCStyleCasts: false
InEmptyParentheses: false
Other: false
...
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWltz4zay_jX0C8oumRpb9oMfKIpKlMiSRpTPnJwXFUS2SMQgwAFAX86v3wLAOyknW7tbtVMztgf9Ad0A-vI1ZCwlSRjAk3M3d-4WV7hQKRdPc2CcqDU-CfKzgOvg16sTjz-fXiRhCVIpoIizM0kKgRXhDJ0JBXQCyt8d10c4z-mnBkYUs-T6zEWGFVLcmXrOZOFMqq_3k_Kv_a87jeFMGKBFsFxtgqO_fX72Novjbr_1gzA8Hrz5OnDch4AVmeM-IufOtzMRQtoeqVB4CD5wllNAB59nGWax1jn1gv_drY_P3mpjd4mc6QI5s3l3Cf3Hmc3N8mbWL6A2OAPHfXDcR70xx3Vlyt8lSoHmjus6s0V3CWe2cKbz8e2ZrwJkQZVEhP07T0Jr_m84jHL6F6fwnpIoRUQifnojvJD0E70LzhJ0gggXEoxvUSyVtgalWKITAEMCMv4GsVarYZUTyuIk4WcBTKGIZzmh1hsVR2dM6E37iH3jikvrim8gpAYSiW5nN5Obe4s5DPx65bizDFmFRBqdZ04pfycs6XtzdXXNXzNyfX1tf1hjlhQ4AWfqIT_P7WCoMIux0DeDIsedO-7c7TiMF0Ug5TOPyZmA2J7PEpQGX38r5ZQkzDsrENsc2Fzg6NUCjKCF8TmTEBWKvIFnYj4DpmS9CYQChk8UjCX2jxIFlMJyhSznhfGitgztcLzNQWDFhTSzz5hKGFc9J2pJgMYG6EWCSxlkufpcEwZyfMoCIortfZhZLdH4hGes170MDWSEc4g38E6N1qmH1nBWLYTZDiuN7J3jQWBCCUt0SJUniDz6jj9r8yl_9yj1RFIYwJZt4EPpDXYPrgLusMAZKBBye27ttTutc6SUv4cpF2pOefQqt8wLCUsoVNgNvIHoY30sYY1PQIf40bV14P9N6LJgkbmdoSWcDdCrc6iwgvJo_o7pa5ydYtwFo0vLrznP_8JufVdzAfjVhM1CZ1qi7d-DKgQ7fOa17chxp2gR7PaB7x2CxfgCw2kD3BzOXMBzQZV2HQiVICyRfXeo4QfIcorVwPP_qENEKUFOhWpcvYrFa3Q8RjjHJ0KJ-myP5jozxHZkTtgOR6-1i3YtKaWNX_bFNoR9TjkLcxzZXIjmXKUlQuAIfgic5-00iZA5rtoR-2nESimWsklB_TxUgjhTgtPaj_ohWMLK2oW-XKty3jawnfg0Rtc9meMIWqDBQtvTn37rwgy0v1CoRBGprk2DhV5Yz5wRi4IPBYKZ-K-R7YWsw_lYRellbRYU6MjoXYWV2Lib8_jzCx0_UkL7IYbQisXAlPGD7m12UGFOiTLpv3cLLTUNZg8RF_GoKQ2oc1Utn62j9Tf8ho37eoxx1cRWy7BWyM4Jw-KzU902nDX1czih3rJfSMWzAcDnLIJc9UO7Z6rFHkAM1PeAusIZp-JipbMYpuT_y4it9GUZbk1YsRQEUZhFsCbSho6NqS7O5qg1USAw_Sc0t7V2JvmcFhlbk4wYpbcVzSnr6E7gJMNGkXMXOO6tM_WdmW9-XtY_U1KduSYjOFL1ffcvcdw865c_SKxMXHyrsYqwwtzGBUSe396au431qYXqk_Y8bAGCvJl6E7C4zIgtc6x4xwlTIAyPqBJXG0SkpmCWpPZkNUuyB9ylhYbC8IREmNqcYKd85CCI1oOpVyi-AAWRKrP70MQl-ahPs01u2hAuAhylI1VH24SjtBn4flxu94Hn_9oMzbfb8DAcXm73R2-9Hgwc_e2mLLkrFtEiBst3tE07ARJExepKsY8VJFwQ6Jq2hwQ-jF-5M-NOruM-UPqWOTNff7uOnJlvOtXq-3VkWpylnlA3RDtBuNA1tUlnbpWjuFA98aSZqAteCEwSQ0ONuJMFRyx8KB3emJookMqZ-Ummb3bmE0mdmf-n5Kyy8vGvDJ3-Bwy9cVzvr_TeNtIvVH-tt7zclXzGhHVOyn046JNxH53p0nG_1cZ0ZoS8EBF059U4Hepae-NYTUA3Ukube6Fgxb06PKjNLegvXPEvVtrtFkRApI-glb1_xTJto_p5qRzVVAviqoiaKO5vRoJQ7dYFyy5b1XUxjATJ1feCq6orwm8DsVa2ynIu-rTxd4C86eU8dUghVFio7XnseE0OMYI5JIT176YRB6ys-V3xR6PqwLVqDSoDsk5j9nhqPuZRagGaq1UsV3DFI07rYlgo3gJpC8aP3oibWr0BqSA2eEOcu7vVYE2VwXjITvAchI2DliPUILti37IWcgcMU_VpWU1DRqZeFVNtgF1tSYRUPm61mxfgZerX0vsRsVlnDVLqf51C3kZZ9mDEk8mIfKTDGZoTfOga56dY4Ki0V6_WX9BeD8Q_UqIa7tfFND3alq2U3L6zqjN069VGavMziWNanvkezpS_XyiMOruVaUf2-lgtMtGj_TCykdMEeIMxT6t9WriGDxLxROA8JVGJrd3INzTExwP3aCAlKdjwy5DqKn6Hz_eSXzd-a2GCFywuz-d7ganhHMa-BZxxQVULXNKT2ikvkNcWVqdY00uOmVhCuvTr8lJdtlevOgpuMeGvgTssgA04_QCwzatr-7JZlaN979Lyp-bp6nLvV6X5lq-Yh9l-D9YDV68cGovGwavzmP4L7e4bCMpxDPXb34VF9_CzIALkivkUF_JCD92DBh-5AClHO8IycjacmRJgDl-lIActQOuG9pglMMcS4iUXa87zr288_Flg28u9wjDWbWUxyuvK35eXfdDYY6Hbhq2YxxI6TBql0OcsNreGu68dA3UGqjBhINo92wju671VSuoXpjV5HbwyaXYfPK8ODTEE3dV1VxhpEr4fXzYvYfWOZkYOx33w_WW1D47_E-zD1XZjZQd86tfbFwkHfOqdU5PzawI5ojc87FebX1b_FzRDu92xP1o1KCMidI024TH8sVoejhvvuTXsLwfD9kVeCPy5PdsHn0L0X5lr8mL8ftjMtbbYCspG7e-_HVfL47P3xzxoE8HuQv3Lbd5zerwoJAnD2sqyEu56jOf6ti6BIIBF0CmSZWEorz_lomnK19X7-m3XB_V43ffDmXy0NvdMGMnsw13dPjzjj2qsskVzty8eP1oH2OYd2xxYnTCILCmFxdWVrbM7w4HNO3AISpkPnjiSPAOV6v9wlYJAKsWsZMuuj_zty3qBKOBYYwmLuNDMHkU8BmQ_DNULlUcCuU7i0CTohi233zTtlVQZskmlfY7fPECZmzeWv2PBSjomm03omYhIVDCp8ImC49bX3Fay45JUjlLxJgNr3tTqZDGw2mJ0LAy7Hm1t-RmMp4Ltsrub7kvKelmZlvE3CCEjUYcx_CvbbGpNLyy2hQIRRjy_0OCUNrc2Zc3rVaTGg8YNNG9dixI2ZmgVNQ0PMd5tlpSg9BqWmOifKCjUnVDyEkTU2HID1jJedPrXhzSu5p89xtDGrUar9PAteKsDqafEfr25KT_IvYqfpvHj9BFfwdPtbPJwP3l0p5Or9Mmd3kWzSXyaPU7v7-5cOM0eJvfT-_g8fTifZrf4ijy5E_fbxHXd2-m3yXRyM4FbfI8fYBbNZqczjpxvE8gwoTeUvmU3XCRXRMoCnh7c-9uHK2radvMbEq7b_p0Gx3Wdu8WVeDLvSKcikc63CSVSyWYhRRQ1v13RmXi3QLah0E6QmQRvswrJQCIQgjOwH4_bj74lOuHoVVIsU5Dtj8HHPvdGV4WgT6lSublXd-m4y4SotDjdRDxz3KV5_bLfrnPB_4RIOe7SbFk67tLs-h8BAAD__7wh70c">