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

    <tr>
        <th>Summary</th>
        <td>
            clang crashes silently for code with bad (infinite?) template instantiation
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang:driver,
            clang:frontend,
            crash
      </td>
    </tr>

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

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

<pre>
    Consider [a.ii.gz](https://github.com/llvm/llvm-project/files/9860056/a.ii.gz): (from http://crbug.com/1377166)

```
$ build/bin/clang -target x86_64-unknown-linux-gnu -fsyntax-only -w -std=c++20 /tmp/a.ii
Segmentation fault
```

That's not very helpful. Usually clang would print a message about how to submit a crash report, a backtrace, etc.

It turns out that the cc1 invocation does print that:

```
$ build/bin/clang -cc1 -triple x86_64-unknown-linux-gnu -fsyntax-only -w -std=c++20 /tmp/a.ii
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.  Program arguments: build/bin/clang -cc1 -triple x86_64-unknown-linux-gnu -fsyntax-only -w -std=c++20 /tmp/a.ii
1.  ../../base/test/rectify_callback_unittest.cc:48:8651: current parser token ')'
2.  ../../base/test/rectify_callback_unittest.cc:19:1: parsing namespace 'base'
3.  ../../base/test/rectify_callback_unittest.cc:48:8598: parsing function body 'base::RectifyCallbackTest_OnceCallbackSignatureVoidNoArgsSameSignature_Test::TestBody'
4.  ../../base/test/rectify_callback_unittest.cc:48:8598: in compound statement ('{}')
5.  ../../base/test/rectify_callback.h:66:6: instantiating function definition 'base::RectifyCallback<void (), base::OnceCallback, void (), 0>'
6.  ../../base/test/rectify_callback.h:66:6: instantiating function definition 'base::RectifyCallback<base::OnceCallback<void ()>, base::OnceCallback, void (), 0>'
7.  ../../base/test/rectify_callback.h:66:6: instantiating function definition 'base::RectifyCallback<base::OnceCallback<base::OnceCallback<void ()>>, base::OnceCallback, void (), 0>'
8. [...]
362.  ../../base/test/rectify_callback.h:66:6: instantiating function definition 'base::RectifyCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<base::OnceCallback<void ()>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>, base::OnceCallback, void (), 0>'
363.  ../../base/test/rectify_callback.h:66:6: instantiating function definition 'base::RectifyCallback<malloc(): unaligned tcache chunk detected
```

So there are two bugs here:

1. Clang is crashing, presumably due to some resource exhaustion(?)
2. The driver is not relaying the crash message

Running with a lower template instantiation limit (e.g. `-ftemplate-depth 512` as opposed to the default which is 1024) avoids the crash and results in a long error instead. 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztW02P2zYQ_TXyhbAgS5YsH3zYT6BA0QbZtNcFRVISuxQp8GO9zq_vjOT1Om2TdjdB0gMBmpL4qJk3j0PCh1Fj-GF3ZbSTXFiSlJc0lTLtPibldZLXvfejS4qLJL-F1knfhyZlZoAHpR6fL8vRmj8E8_DYSiUcXLd1lWVlBXfP9vIt2CFgs7VmIGj4ZJfZJnRHs6tis1lVFU7PrpPs4thX2bHNj_maNEEqDi80UqMJRXVHlp7aTnjyVFf31XoZ9IM2e71UUoenZacDWbbuoD19WhqtDmS5J0vneVJcsyS_hJZnQPDWD-OR9-ztTnSDgLe8NJq0NCj_z6Sm_kNPQYeNI9p48ijsgfRCjW1QKfnNBarA7cx1b4LiZLRSe0LJIJyjnSC0McGT3uyJN8SFZpCIMktdT6wYjQXjVzDSUPbgLWUCH4Vn6TmHnzzxwWpH0JYHQtAJwtiKSP1o2BwIN8Id3eMUXIw3CI5Gl97KUYlvrPq7n28u7m5eNIAUOSqA0rw6MaVzYcpMQjUHHZgKXMy6TOJ-IugIjqxhsCaCE2eCnYfxTeqcYZJ6AGzQxDGI3R_Vv_NghPAwjCc1s5SQd9Z0lg4EcjNgIiHv763mCnikKQxNXUOdwEnCoTQWFJLt4Z5BdqIM90FLj1jKGFBd19DVVblC2ixYCyGQkVoH54U3D0KDvw3uV-gnX_nbfa3wkJgcoQMJmmgKW2OEdUEvs62jm-JrQyq39bmnNmg27YwGjsSTN1jI4uL9bO7qaO0DGLr_VTPxPHAnO01hy4nfjeS_mAvbuTvgfRq-xzdmU3h3CQ5OYay_URhSE8j_0QRIUgeHlcBUw_MWPW0uk831cZkmr-UrvKY92IcjGbrZEZjXHvbAJ6px0Upgh7df0i4prh5BpJnYFnfVy9RzSRH5y8QsKW5OslU_MIDPMP40MuT61uA2_8fg_mvUXxN4neJfkBTChr8f8y6vXnOc_HgxIhCBCEQgAhGIQAQiEIEIRCACEYhABCIQgQhEIAIRiEAEIhCBCEQgAhGIQAQiEIHvBPy9bie22GKL7V_bmwv8iuo1ZbvfupxvgFvDno-8CxI0VbLTghPPKMNa8D7oBzDo4VXBv1Dmf2ewdtwKQuHn9wbL0x3BEfR9NnGVkqupuFu6udIcqB9LzF0YaKMOhAcxVfubQRAYncrNiXjqaXAYFNItbk-Vu3lKPgBTbuWjsGgVPzSwQtEDivJS0H78ouCcy_ugNU7aS98TSpTZYwm3GEZFvThXF5RUEsvuwbdIu5RA9Mv2eeaSixEMlKschgl1xIyjwUp5P4mC64EfSZB9L1mPDFdZvgb-hGJmuDOOWFCPOijvsH4ZKQE9Ya2xEx1BeUoWYreqqmqTZVmxXvBdwbfFli689Ers5sL5yZpwxEkltAdJWzDADBdzqA2d8lHqKU_ErOZnAl8Eq3Zv_7qgrMttseh3Oc_KTNSUt4Wo1_W2yHlRc1Y27basakEXijZCuV1SXiZ5PkUB_uZFhQHMkLPx1hrtheZnCEaMj-X1Qu7yLM9BZFiRVVEWqcjLbb3a5qKuioxnbbLOxEClSpF1amy3sLspAExaAJV03r2A1DncFGIiB_Zp8L2xu48DCDosplB3U5x_AueTIoE">