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

    <tr>
        <th>Summary</th>
        <td>
            [clang-format] Segmentation fault when formatting nested namespaces
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    When formatting this part of the code:
```
namespace ns1 { namespace ns2 { namespace ns3 {

void func_in_ns() {
    int res{ 0 };
// block for debug mode
#ifndef NDEBUG

#endif
}

}}}
```

with the following style settings:
```
---
Language:        Cpp
BasedOnStyle: LLVM

CompactNamespaces: true
NamespaceIndentation: Inner
```
clang-format crashes with an error segmentation fault. As I found out, this is due to the overflow of the Level value for the comment line.  Overflow occurs in line 393 of the file clang/lib/Format/UnwrappedLineFormatter.cpp:
```
    ...
 if (!(*CompactedLine)->InPPDirective)
 (*CompactedLine)->Level -= OutdentBy;
    ...
```
OutdentBy turns out to be greater than the value (*CompactedLine)->Level, which causes an overflow.
I see the following way to solve the problem:
```
 ...
            if (!(*CompactedLine)->InPPDirective)
 (*CompactedLine)->Level -= std:min(OutdentBy, (*CompactedLine)->Level);
 ...
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0lV-PmzgQwD-N8zIKAhOS8MDDZmlOkXJtpap3j5UxA_jO2Mh_Eu23P9mQTbrbVZ8OISeescczvxkPzFrRK8SKFAdS1Cvm3aBN1aaKZ0PqVo1uX6q_B1TQaTMy54TqwQ3CwsSMA92BGxC4bpHkTyStSfpEtunyxqliI9qJcQRlMyC7AzxK6DtJHiSLpThetGih84r_EOqHsoTuCS3viwAAhHJg0AZTKZBdTfKbBXok9AiN1PzfEAG02PgexuDvsiAXnWqxg8_1p8P3Px4PJjRH1Ypume3qn5S7enl_FfQ8XoUbIp9OS6mvAZ11LxLBYgRpP2K2Xq_nP2emes_6ABeW53maZt2BWWy_qG_BYtCfz3_9-Xj6sx4nxt3nG9twGjjjl8hf5SfVonLMCa3CipNSaH7pFZdM9eu5DoAbZge0EGNkCtAYbcBiP96MQce8dAk8WThBp71qQXtH6PNcP8JC6xGcjoT0BU0n9fVWUWe8oIQLkx5j3uYqG4NxkEJhAvDldQvn3lgQKmogL_OblU5IhOg2oUcpGkKPx-g-ocfv6mrYNGF7FgpnqUOT8Gn6KCuBfpIky0R0EEsxi-ON9myO0HJN8k8n9fVrLQxyJy5Btuz8eMMc9ZrkNXzxLqTl8PJayz8d_8a119XgvFE2gA5kG4TeIHMYADIVmcxMf-NDyNJ1EHwAzrxFGzJ8S9HiwQks4pvqvrKXcKzV8jKrJqMbieOHRO84H57_max1LcmfRqEI3d8p0-ffMynvuXifiFVb5W2Zl2yFVbYtaVpud_v9aqi2PNvgdl-kmzRrmizb5FnBMpaVlBV50-YrUdGU5uk-K7K0yNN9ku94lxYlLTZNm252nGxSHJmQiZSXMdGmXwlrPVbbzS7NVpI1KG1s4JQqvEJUEkpDPzdV2LNufG_JJpXCOnu34oSTsfM_3mxS1PDt3TWG65tvgELrsL13brvyRlaDc1PsarHv9sINvkm4HsP1k5fbz3oy-h_k4RZGXy2hxxjLfwEAAP__Mpn5Yg">