<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/135977>135977</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang-format-20 issue with breaking after cast
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-format
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
rjarry
</td>
</tr>
</table>
<pre>
Given the following configuration:
<details>
<summary>.clang-format</summary>
```yaml
---
AccessModifierOffset: -4
AlignAfterOpenBracket: BlockIndent
AlignArrayOfStructures: None
AlignConsecutiveAssignments: None
AlignConsecutiveBitFields: None
AlignConsecutiveDeclarations: None
AlignConsecutiveMacros: None
AlignEscapedNewlines: Right
AlignOperands: DontAlign
AlignTrailingComments: false
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: Empty
AllowShortCaseLabelsOnASingleLine: false
AllowShortEnumsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: Never
AllowShortLambdasOnASingleLine: None
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: MultiLine
AttributeMacros:
- __capability
BinPackArguments: false
BinPackParameters: false
BitFieldColonSpacing: Both
BraceWrapping:
AfterCaseLabel: false
AfterClass: false
AfterControlStatement: Never
AfterEnum: false
AfterExternBlock: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
BeforeCatch: false
BeforeElse: false
BeforeLambdaBody: false
BeforeWhile: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyNamespace: true
SplitEmptyRecord: true
BreakBeforeBinaryOperators: All
BreakBeforeBraces: Custom
BreakBeforeConceptDeclarations: false
BreakBeforeTernaryOperators: false
BreakConstructorInitializers: BeforeComma
BreakConstructorInitializersBeforeComma: false
BreakInheritanceList: BeforeColon
BreakStringLiterals: true
ColumnLimit: 100
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 8
ContinuationIndentWidth: 8
Cpp11BracedListStyle: true
DeriveLineEnding: true
DerivePointerAlignment: false
DisableFormat: false
EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: LogicalBlock
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: false
ForEachMacros:
- LIST_FOREACH
- LIST_FOREACH_SAFE
- RTE_ETH_FOREACH_DEV
- RTE_LCORE_FOREACH
- SLIST_FOREACH
- SLIST_FOREACH_SAFE
- STAILQ_FOREACH
- STAILQ_FOREACH_SAFE
- TAILQ_FOREACH
- TAILQ_FOREACH_SAFE
- rte_graph_foreach_node
- gr_vec_foreach
- gr_vec_foreach_ref
- gr_nh_flags_foreach
IfMacros:
- KJ_IF_MAYBE
IncludeBlocks: Regroup
IncludeCategories:
- Regex: '^".*'
Priority: -1
- Regex: '^<(gr_|gr\.)'
Priority: 100
- Regex: '^<(rte_|event|ecoli|numa.h|libsmartcols.h)'
Priority: 500
- Regex: '^<cmocka'
Priority: 100000
- Regex: '^<'
Priority: 10000
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
IndentAccessModifiers: false
IndentCaseBlocks: false
IndentCaseLabels: false
IndentExternBlock: AfterExternBlock
IndentGotoLabels: false
IndentPPDirectives: None
IndentRequires: false
IndentWidth: 8
IndentWrappedFunctionNames: false
InsertTrailingCommas: Wrapped
KeepEmptyLinesAtTheStartOfBlocks: false
LambdaBodyIndentation: Signature
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: Inner
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 4
ObjCBreakBeforeNestedBlockParam: true
ObjCSpaceAfterProperty: true
ObjCSpaceBeforeProtocolList: true
PPIndentWidth: -1
PackConstructorInitializers: BinPack
PenaltyBreakAssignment: 100000000
PenaltyBreakBeforeFirstCallParameter: 0
PenaltyBreakComment: 20
PenaltyBreakFirstLessLess: 120
PenaltyBreakOpenParenthesis: 400
PenaltyBreakString: 100
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 100000
PenaltyIndentedWhitespace: 1000
PenaltyReturnTypeOnItsOwnLine: 100
PointerAlignment: Right
QualifierAlignment: Leave
ReferenceAlignment: Pointer
ReflowComments: false
RemoveBracesLLVM: false
SeparateDefinitionBlocks: Leave
ShortNamespaceLines: 1
SortIncludes: CaseSensitive
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceAroundPointerQualifiers: Default
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeCpp11BracedList: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeParensOptions:
AfterControlStatements: true
AfterForeachMacros: true
AfterFunctionDeclarationName: false
AfterFunctionDefinitionName: false
AfterIfMacros: true
BeforeNonEmptyParentheses: false
SpaceBeforeRangeBasedForLoopColon: true
SpaceBeforeSquareBrackets: false
SpaceInEmptyBlock: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: Never
SpacesInCStyleCastParentheses: false
SpacesInConditionalStatement: false
SpacesInContainerLiterals: true
SpacesInLineCommentPrefix:
Minimum: 1
Maximum: -1
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: c++20
StatementAttributeLikeMacros:
- Q_EMIT
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 8
UseCRLF: false
UseTab: Always
WhitespaceSensitiveMacros:
- BOOST_PP_STRINGIZE
- CF_SWIFT_NAME
- NS_SWIFT_NAME
- PP_STRINGIZE
- STRINGIZE
...
```
</details>
And this example file (formatted with clang-format 19):
```c
#include <stddef.h>
#include <stdint.h>
#define ICMP6_ERR_DEST_UNREACH 2
struct rte_mbuf;
struct icmp6_err_dest_unreach {
int foo;
};
char *rte_pktmbuf_prepend(struct rte_mbuf *m, uint16_t len);
void test(struct rte_mbuf *mbuf, int icmp_type);
void test(struct rte_mbuf *mbuf, int icmp_type) {
struct icmp6_err_dest_unreach *du;
if (mbuf != NULL) {
switch (icmp_type) {
case ICMP6_ERR_DEST_UNREACH:
du = (struct icmp6_err_dest_unreach *)
rte_pktmbuf_prepend(mbuf, sizeof(*du));
break;
}
}
}
```
When formatting it with clang-format 20 (same configuration), I get a different result:
```diff
--- clang-format-19.c
+++ clang-format-20.c
@@ -17,8 +17,8 @@ void test(struct rte_mbuf *mbuf, int icm
if (mbuf != NULL) {
switch (icmp_type) {
case ICMP6_ERR_DEST_UNREACH:
- du = (struct icmp6_err_dest_unreach *)
- rte_pktmbuf_prepend(mbuf, sizeof(*du));
+ du = (struct icmp6_err_dest_unreach *
+ )rte_pktmbuf_prepend(mbuf, sizeof(*du));
break;
}
}
```
Maybe I missed a new option but, this looks like a bug/regression.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysWV9z6rYS_zTOiyaMMSSQhzwYAy23JHCA9Ezvi0fYi1EjS64kJ6Gf_o4k_8fJaXvLcE6w9rer1Wp3tStjKUnCAB6du5lzN7_BuTpz8Sh-x0Jcbo48vjz-RN6AIXUGdOKU8nfCEhRxdiJJLrAinDkj33HNdxTEoDCh0hkt7LPM0xSLizNaDCKKWXJ74iLFyhkFjresiQX_vWu_F5xSx_Vvb28d1_ejCKR84jE5ERCb00mCckY-uh1rIiUJ808KxCYDNhM4erXUGeXR64rFwFQFEwJfNqe9EnmkcgFS4545gxIQcCYhyhV5A9_YJQWmvkLNiFoSoPFXmDlEFFtDfQV7wpHgV4CFjHAG8TO8U8KswjuSnKslbTIQmNn555wpM1gSDwITSlgS8LRayAlTaaVT_u5T6oskN8QNe4YPtSYMNEyJvInaYoFTUCDk5tRYT5unJXp_5kKZPZAb5u8JSyiUwEWaqUsLGGAJa3wEeg2-lrpgefpXcMucRcbqf0GB1WmvsILCEh34M7yBaMHXOD3GuAdZbl0F5Dz7Std3fJEzAfjVuPAcToQRrfMOVC7Y4ZK1xbbhPwLN4MQFPOVUaTeAvRKEJfITBQ6QZhSrK3c17EZx1_eVEuSYq9pZHddH6BaFYYQzfCSUGLvOCNvi6LXyreaUBa32qDbRxlPAKWf7DEeEJSaYuTprssARfBc4y-y4md2YonKgprSCRLFsTVKycKYEp9W-N3e6gGhPuxa4-FAgmPHtHrGl1_WQnnEKMsMRXMvcHH8PGpbvYbZZq4fwwroMdt8DrKJzG28JC_3YM26desbjS4-072dCO1w2uZo96dh3n1GiTJA1rVHklAa1ZZCS3KDvIOIibhAbbj0jDIuLyX-KWy_yKe1gKt2CXCqetqkBZxFkquvwlS_WyAOIq8laMJ3Hzf5wsdIBjCn5s3Dtcq40xT9AN5HdCVbsDIIozCJYE6magilnJcpG-JooEJjKht0CTvOUrUlKDOvQdc2gORa2AicpNmjHmzh3C7T6_tsLysywDjJvYsEZjlS1Yy0b9C_Ip3TDNsxkvY3YMNiC6GbAfk7rWd9JrIwDTy1QEZabbeojZ9lwaLY71vbZqwttOtUcBHkziixYXOSUFmnLCVNa5eLQb-o4JxIfKSyLwqUmGB_VQk0ctsuUZjapcHbLroFrnpAIU5tSXH_xkYEgWg1M_VzxOSiIVJE4C-1LHZbko9qTvnN-ycUCR-duwl6v9odwudkt_ODnnqFw7y8XxfjusAgXh58r0nzxa4OyDja7RUfSvkf6_jPx-4O_Wn_roluDTXgf-lOwUBAmAmfnUNsdR-eQ8RgKYiLCN4hKSu9gKOBUE9g5PFGcyAbL6tQy7C365T_hahk--b_NtA4rFtE8BlsGmdoNEsHzrCYFWEHCBYHG3uwggY86HB3PGzheEYYIIbQVhAt90I7Mo_7cDru89aeQogvuaSJCZxIkwrkLBo73UMjsEWgzRJ82Ro42rDMJ4E2HyiSAiFPiTAKWp3hwdiYBJUeZYqEiTuXgXM_Ur_3d9WQ96kcpj17xl4KGrv58ofiPeOuNWcknTFhLhjc9gFR6MaOl442ttBZ8z3MRQZvJgnTCasd9K0otQBcxta9c02yFfE3rFCRXRUqJ-4kr_pmM7XZOBES6E2k2IZa4gz9yIqCHrZWEiyFdn0FcnvwmO7UZJQjV7E3s4VPwOa7_C0BW5Uzpq8MZ9goLtTldW6cuWuzsVfm0JwnDustzXN8EqeGdQUJYa29q2oLFHcpHrcWBa63M4em4fpVyO5OuGDMZX5dzZaEruOIRp-WxrRN6iahb1MqO45JWVx_PIBXEBmyq5sbhpZG6TLYn0FbwDIT16i7AiuoqU6C2244WJp9o7b8qbOz6NBAYpupiG5Oqby4KDbeMySbKarMkQqoAN9pLzdPFFqeaJnldmpGwBin1PzPhFWSTAdtiAUydQRIDGl_pYwunujRq0noaIwuscYsPHdnBGQscFasYdpZtDQzx9zNRdc07bGHqfm7DVkpu3llZLhVa9RQp5W3AtxxTk1da1DXgN73BOziBABZBi1rIs3TK3_vqhx2k_K0opNfrX5-atD1k2iBQt611fJYzmy64Cpd1eYmh_Wuv-26bPm2NjiXsgUmik1BBf5GEJd0KvfDa2vEDU-8FWLbKs5pe1FfP_BN6ucW_wOW93XBYjOA5iwtrVYa2dy5wwjlVJbIo8KoYaHUMTZFliyaLAr6rVkFvV7WfCGnHZiXvGtloIr5AmWCxG9LpkGUfcJOV-1J33Fd8zfbOdsm2hKovvUpyq4dubLx2oS-67doFr4AG1yjUak2K9MqZSfNVkmgfV40F7zBLYIYlxEsu1pxnX1hx_0eObQP6Cupa4MrOWZ3ZTQGrH-tT9Ip9F3zDCrNiPktocZwXrUhJqSPmy2lWLOAsNnbF7ZuSHpzChOkO76r7LDE6-qumE07ko3CaJ8JIam9abB37hD_Kgdvmen6g6xc2V5jF2EZ25Hgzx5uZg6JaUnWztSavV7db38LF0-rQhF8jXp5f9ot5-XgId4tvL6vdIvx1sduvNs-O6x_wsVUtvUgIdutlU80XCQd8tFcZ7_ii460-L6rU2J18ttnsD-F2G-4Pu9XzT6v_lu1PsAz331fLQ_jsP5Vjz_vrsR7W5vNgMGjezdt7fcdbtq_6Xd9nMVJnIhF84DSjgE6EAnK8qb3yVxCjd6LOqPkeAA0fTEHtd14ARPrBGxF7PCBnFEgVx3AanIvpujTCVEUz5FhnBECr4Gl7Hy52u3C-2B_Cl2fTJCLP4mxtY_rE9JifnNGsHiRRmt2HIEQYg1RhzkzGQs5kZngfCFPoxLnlcSbz4ofrR2cskOP5Wmr2qrTgMBOQAYsdb9qZUgNTxwtQTpga3ocKUWDGJIW0N05ipEzj0cur1fYCpLXRGofqksG_wF-v8wfm8Pw4Lyd7IFrmtJA9dEZz9PyyXrfEaYnvRBnWac-MqPOJsPxsF0u3ebDfOEd6xnqdn6usDdTgdNyH_s0qrSPJn8BPjje1y_UeKgujo64RKwPo72Re_LY_7P_N6NFRDQwVYUFYgojqCQ3PNWvBKXRet-npA7RCCSiEUUxOprhTSIDUtchVMGmEfZvWmuB2-DCwcTaz3zbVcy117DpjF90OJ44XTJHjzcpflvD3_KuxwT_yla4j_Ltec9vlKD5_24nsLdM_cR1t8f9fia_kON4_9-tPPg13v5rNeDrqdXj0hC9HQCuUEikhRhgxeEfc1I7omCutjDk7KOevElHyCgijY5443lJAIkBKwtngJn4cxQ-jB3wDj8PJeDwdTu7H45vzo3f_MD1Gw2gycccuxtiLcfTgxaN4Mo3ceDK9IY-e69254-H98G40dseDh_v4fjidTKfTu5E3iSfO2IUUEzqg9C0dcJHcEClzeByO7h4mkxtq7k3MW3LPa73J9jznbn4jHjXf7TFPpDN2KZFK1pIUURQeO9GFjHwb98aqOhFgXaxq71U3uaCPZ6Uyc9J7S8dbJkSd8-Mg4qnjLbXw4s9tJvjvECnHWxqZ0vGWhdpvj97_AgAA__8tyGDP">