<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">