<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/131157>131157</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang-format] crashes upon expanding function macros with missing closing paren
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang-format
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          zeule
      </td>
    </tr>
</table>

<pre>
    Given the input:

```C++
MACRO_A(

#endif
```
and config:
```yaml
Macros:
  - MACRO_A=void func_a
 ```

clang-format 20.1.0 crashes:
```
Assertion failed: PreviousOriginalWhitespaceEndOffset <= OriginalWhitespaceStartOffset, file C:\develop\src\alien\llvm-project\clang\lib\Format\WhitespaceManager.cpp, line 145
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: C:\\develop\\build\\alien\\llvm\\vs\\Debug\\bin\\clang-format.exe C:\\develop\\src\\Software\\test2.cpp
Exception Code: 0x80000003
 #0 0x00007ff7de83e66c HandleAbort C:\develop\src\alien\llvm-project\llvm\lib\Support\Windows\Signals.inc:429:0
 #1 0x00007ffad5109ea7 (C:\WINDOWS\SYSTEM32\ucrtbased.dll+0x99ea7)
 #2 0x00007ffad510bae9 (C:\WINDOWS\SYSTEM32\ucrtbased.dll+0x9bae9)
 #3 0x00007ffad5111745 (C:\WINDOWS\SYSTEM32\ucrtbased.dll+0xa1745)
 #4 0x00007ffad51113b7 (C:\WINDOWS\SYSTEM32\ucrtbased.dll+0xa13b7)
 #5 0x00007ffad510f381 (C:\WINDOWS\SYSTEM32\ucrtbased.dll+0x9f381)
 #6 0x00007ffad5111caf (C:\WINDOWS\SYSTEM32\ucrtbased.dll+0xa1caf)
 #7 0x00007ff7dea3f32b clang::format::WhitespaceManager::calculateLineBreakInformation(void) C:\develop\src\alien\llvm-project\clang\lib\Format\WhitespaceManager.cpp:144:0
 #8 0x00007ff7dea3ecfc clang::format::WhitespaceManager::generateReplacements(void) C:\develop\src\alien\llvm-project\clang\lib\Format\WhitespaceManager.cpp:109:0
 #9 0x00007ff7de98db6e clang::format::`anonymous namespace'::Formatter::analyze C:\develop\src\alien\llvm-project\clang\lib\Format\Format.cpp:2535:0
#10 0x00007ff7dea2fffc clang::format::TokenAnalyzer::process(bool) C:\develop\src\alien\llvm-project\clang\lib\Format\TokenAnalyzer.cpp:129:0
#11 0x00007ff7de99891b `clang::format::internal::reformat'::`2'::<lambda_11>::operator() C:\develop\src\alien\llvm-project\clang\lib\Format\Format.cpp:3840:0
#12 0x00007ff7de781798 std::invoke<`clang::format::internal::reformat'::`2'::<lambda_11> &,clang::format::Environment const &> C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.43.34808\include\type_traits:1706:0
#13 0x00007ff7de99b48f std::_Func_impl_no_alloc<`clang::format::internal::reformat'::`2'::<lambda_11>,std::pair<clang::tooling::Replacements,unsigned int>,clang::format::Environment const &>::_Do_call C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.43.34808\include\functional:881:0
#14 0x00007ff7de7ca7de std::_Func_class<struct std::pair<class clang::tooling::Replacements, unsigned int>, class clang::format::Environment const &>::operator()(class clang::format::Environment const &) const C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.43.34808\include\functional:925:0
#15 0x00007ff7de99763d clang::format::internal::reformat(struct clang::format::FormatStyle const &, class llvm::StringRef, class llvm::ArrayRef<class clang::tooling::Range>, unsigned int, unsigned int, unsigned int, class llvm::StringRef, struct clang::format::FormattingAttemptStatus *) C:\develop\src\alien\llvm-project\clang\lib\Format\Format.cpp:3854:0
#16 0x00007ff7de9885d9 clang::format::reformat(struct clang::format::FormatStyle const &, class llvm::StringRef, class llvm::ArrayRef<class clang::tooling::Range>, class llvm::StringRef, struct clang::format::FormattingAttemptStatus *) C:\develop\src\alien\llvm-project\clang\lib\Format\Format.cpp:3898:0
#17 0x00007ff7de6d479f clang::format::format C:\develop\src\alien\llvm-project\clang\tools\clang-format\ClangFormat.cpp:509:0
#18 0x00007ff7de6d6b7f main C:\develop\src\alien\llvm-project\clang\tools\clang-format\ClangFormat.cpp:738:0
#19 0x00007ff7ded7e3f9 invoke_main D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:79:0
#20 0x00007ff7ded7e2e2 __scrt_common_main_seh D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288:0
#21 0x00007ff7ded7e19e __scrt_common_main D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:331:0
#22 0x00007ff7ded7e48e mainCRTStartup D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp:17:0
#23 0x00007ffb3750e8d7 (C:\WINDOWS\System32\KERNEL32.DLL+0x2e8d7)
#24 0x00007ffb37a9bf2c (C:\WINDOWS\SYSTEM32\ntdll.dll+0xbbf2c)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUWFGPozgS_jXOi7UR2BDgIQ8MSd-trmdn1Bnt6J4iY4rE18ZGtsl0768_GUgHMpPbmdb0rTaKFBy7Pn_1lV2UzawVBwWwRvE7FG8WrHNHbdZ_QCdhUerqef0PcQKF3RGwUG3nEM1R0H9XwfAtEHnnv0H-Pi8ePuxzRNJxCKGgKlFPR6MgZ6rCXKtaHEawc98za6SHYdxoO_Rh_As-w9LNSYsK153ie-b7pqAoyLlk6vBLrU3DHCbBMlwGmBtmj2CvJkJBnlsLxgmtcM2EhArRHH80cBK6sx-MOAjF5OejcGBbxmGrqg91bcFhRAtEN_jrITvHjBsGIVLgWkjAhZ83Lio4gdQtigtrOIoLJgUoFBdSnppfWqP_A9yhuOj5-79FieLirvcDxcVlivdMsQOYJW9bP4UUCnAYxSjIP95v890W265shMMMl90BG2i1cdhpfHSu7SUgd4jcHYQ7duWS6waRO09h_HlhQu6EtR1YRO6wj5VQXHYV9Gug1xOXjD86wzgsUZDvHOOPuOqadlA5WOL-89Hog2ENZubQNaCcZ3BWZCYKiouyE7IaHs_ijPoMTyc7_G6g7A6jiRhHTcO-hCe4NcegPYqLna7dF2ZgaDmwjvSSBvn2iUPbL4pCV-D5Bk9p0H9ov-AIDXDw5NtJXScVpBRWK47_yVQlIS-93j8W89HFIeS7rvUh8zEXqtJfvNM7cVBM2qVQHNE8IhmieTByCS9cWBWHQQYswYikI4XPv_62-fB550H-vfu0fU8JiouOG1cyC9WykhKRd8FT5s0QyUZQcgVaMsheAerNLqB0DhqGSRT_OCjzZhfQ6BqUlq9wn3mzC2h85X5N0_AV7nuzC-jqmiln9WuYclZfQJPZSmS0pqTEQw6hOaL5sCOG569yyPA3Z5J3kjm4FwreGWCPv6rBTGiFSOrzLSLZW-YxmodRNFnT6ZVXwGv-g14dQIFhDh6glYzDkHv-X84E0w2azZzJ0qpcwS1n0CpgSqvnRncWK9YM6IgkQ_cwszv7yBSTz3_8pDfM8DB6QGIajy74FDPPd4zU9e14fNKPoPKB2cizNZqD9fKXWsufJv9sprP0L7nR8w7n0mdpFpa-YLhBXSgHRjE5tAyMfWf10SoglwYtJGvKiu3DENHt8Kdu_ZrTxhc_P8vLWVxoGgUT_8jMvyQNkyzF1lVnd076EXyt8hYeY0RWiBQ3gLfqJIxWftv5Ms-6fjjdnjU51wV3QoJ_w70XvtzTtcO_C9sxiXeuq4RGcUECQgaDGqwV2rONi9-LfgFo2Rvv-mYYLSO6pFEapCguxoLFv9yfW9g7w0RffYRJsJpISK-WSBml9UXC_Z2vM0XTyr3Seyal5m-lJyLFy7QtEwbRqbZOaynOjXlOKzrVl---RnMD0A8GZfR1o_ecSflXhMiX824wpHmahpMARfM1zllSwXWAuGTWIlpYZzru8Dd0tBZ_p5r4aznxVwDfr-o8JSCSvgKLZGPjr45MRqZvhfhq6yQrWt1y7NbGSMeQ3TAbkt_OPUuY6nGOSF849wN3zgh1eID6W525MezZ9_3pUmDqAGPMZ8vgO9r_k9H3eOmEOuTOQdO6nWOusxiR_K1eI3E0CeTqqkJJ4yq7xfXvELq_VyiydBKKeT2_qqIkq29xHS85XsfJjdt_enBGcVH45oxgHEwrqvSK36pMatwwod6aRkKnMs1r6ioBWmd4qHf2PZvNwIahuNh_0ebRZzjP6YXXib9M3R-2T9w6Zlx3YX5pwxPsuW4arZZC-RSWTCQhwTUXAgTv95YbN1r1lPYWjm9Mi6QTjUh4zSvM4Bu83pgTpZOXOSHXnKIU-uVTPHzaDSA_n4_HPx8PkgmZSelX0iQOIK1uXB08WwdNfyD_1_bht-09JcvN_X1_HifeajiPe8xohsmysib8zw75ylVSvhzwS28yAp6vKhfVmlYZzdgC1mEShWmSRUm4OK7TFAgPaUBJVUWcU1pxDjHjdbwKaMD5QqxJQOKAhjSMSUTDJV3FYUKCNC6rivKYoCiAhgm59Bt0qc1h0d_7rUMahnGykKwEafuLYUJmm9QXFpuFWfcbu-wOFkWBFNbZC5ITTvaXyvPdvTlfyOKu1QrDU8tUJdQBn2sN3PSXv_iLcEfcCGt9J5e6_22ZAbXojFy__kZzdO60Jv8NAAD__4CkEgo">