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

    <tr>
        <th>Summary</th>
        <td>
            [Clang] [Serialization] Crash when the number of chained PCHs exceeds 6
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          16bit-ykiko
      </td>
    </tr>
</table>

<pre>
    I am trying to use [Chained precompiled headers](https://clang.llvm.org/docs/PCHInternals.html#chained-precompiled-headers) to reduce the granularity of incremental compilation in the IDE. But once the number of chained PCHs exceeds 6, the clang compiler will crash.

```shell
Running command: clang++-19 -x c++-header ./header0.cxx -Xclang -emit-pch -o ./header0.pch
Running command: clang++-19 -x c++-header ./header1.cxx -Xclang -emit-pch -o ./header1.pch -include-pch ./header0.pch
Running command: clang++-19 -x c++-header ./header2.cxx -Xclang -emit-pch -o ./header2.pch -include-pch ./header1.pch
Running command: clang++-19 -x c++-header ./header3.cxx -Xclang -emit-pch -o ./header3.pch -include-pch ./header2.pch
Running command: clang++-19 -x c++-header ./header4.cxx -Xclang -emit-pch -o ./header4.pch -include-pch ./header3.pch
Running command: clang++-19 -x c++-header ./header5.cxx -Xclang -emit-pch -o ./header5.pch -include-pch ./header4.pch
Running command: clang++-19 -x c++-header ./header6.cxx -Xclang -emit-pch -o ./header6.pch -include-pch ./header5.pch
Running command: clang++-19 -x c++-header ./header7.cxx -Xclang -emit-pch -o ./header7.pch -include-pch ./header6.pch
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: clang++-19 -x c++-header ./header7.cxx -Xclang -emit-pch -o ./header7.pch -include-pch ./header6.pch
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  libLLVM.so.19.1      0x00007fbbfc1c842f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 63
1  libLLVM.so.19.1      0x00007fbbfc1c6139 llvm::sys::RunSignalHandlers() + 89
2  libLLVM.so.19.1      0x00007fbbfc10f227
3  libc.so.6            0x00007fbbfad9f330
4  libclang-cpp.so.19.1 0x00007fbc059ac289 clang::ASTReader::getLocalModuleFile(clang::serialization::ModuleFile&, unsigned int) const + 313
5  libclang-cpp.so.19.1 0x00007fbc05a2ddcb
6  libclang-cpp.so.19.1 0x00007fbc05a2c9ba clang::ASTReader::loadDeclUpdateRecords(clang::ASTReader::PendingUpdateRecord&) + 1594
7  libclang-cpp.so.19.1 0x00007fbc059df986 clang::ASTReader::finishPendingActions() + 2454
8  libclang-cpp.so.19.1 0x00007fbc059e337b clang::ASTReader::FinishedDeserializing() + 59
9  libclang-cpp.so.19.1 0x00007fbc059c7999 clang::ASTReader::ReadAST(llvm::StringRef, clang::serialization::ModuleKind, clang::SourceLocation, unsigned int, clang::serialization::ModuleFile**) + 537
10 libclang-cpp.so.19.1 0x00007fbc05b8e1ce clang::CompilerInstance::createPCHExternalASTSource(llvm::StringRef, llvm::StringRef, clang::DisableValidationForModuleKind, bool, clang::Preprocessor&, clang::InMemoryModuleCache&, clang::ASTContext&, clang::PCHContainerReader const&, llvm::ArrayRef<std::shared_ptr<clang::ModuleFileExtension>>, llvm::ArrayRef<std::shared_ptr<clang::DependencyCollector>>, void*, bool, bool, bool) + 574
11 libclang-cpp.so.19.1 0x00007fbc05b8df1c clang::CompilerInstance::createPCHExternalASTSource(llvm::StringRef, clang::DisableValidationForModuleKind, bool, void*, bool) + 316
12 libclang-cpp.so.19.1 0x00007fbc05c1bab7 clang::FrontendAction::BeginSourceFile(clang::CompilerInstance&, clang::FrontendInputFile const&) + 10343
13 libclang-cpp.so.19.1 0x00007fbc05b909e5 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 981
14 libclang-cpp.so.19.1 0x00007fbc05c9cd2c clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 700
15 clang++-19           0x000055878448f1d2 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 5586
16 clang++-19           0x000055878448c1a4
17 libclang-cpp.so.19.1 0x00007fbc0581f272
18 libLLVM.so.19.1      0x00007fbbfc10ef77 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) + 151
19 libclang-cpp.so.19.1 0x00007fbc0581eb06 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const + 406
20 libclang-cpp.so.19.1 0x00007fbc057e3f89 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const + 921
21 libclang-cpp.so.19.1 0x00007fbc057e41ff clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const + 159
22 libclang-cpp.so.19.1 0x00007fbc058014d0 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) + 352
23 clang++-19           0x000055878448bbcb clang_main(int, char**, llvm::ToolContext const&) + 6699
24 clang++-19           0x0000558784499703 main + 131
25 libc.so.6            0x00007fbbfad841ca
26 libc.so.6            0x00007fbbfad8428b __libc_start_main + 139
27 clang++-19           0x0000558784489da5 _start + 37
clang++-19: error: clang frontend command failed with exit code 139 (use -v to see invocation)
Ubuntu clang version 19.1.7 (++20250114103332+cd708029e0b2-1~exp1~20250114103446.78)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-19/bin
clang++-19: error: unable to execute command: Segmentation fault (core dumped)
clang++-19: note: diagnostic msg: Error generating preprocessed source(s).
Error compiling ./header7.cxx: Command '['clang++-19', '-x', 'c++-header', './header7.cxx', '-Xclang', '-emit-pch', '-o', './header7.pch', '-include-pch', './header6.pch']' returned non-zero exit status 1.
```

It also crash on windows

```shell
Running command: clang++ -x c++-header ./header0.cxx -Xclang -emit-pch -o ./header0.pch
Running command: clang++ -x c++-header ./header1.cxx -Xclang -emit-pch -o ./header1.pch -include-pch ./header0.pch
Running command: clang++ -x c++-header ./header2.cxx -Xclang -emit-pch -o ./header2.pch -include-pch ./header1.pch
Running command: clang++ -x c++-header ./header3.cxx -Xclang -emit-pch -o ./header3.pch -include-pch ./header2.pch
Running command: clang++ -x c++-header ./header4.cxx -Xclang -emit-pch -o ./header4.pch -include-pch ./header3.pch
Running command: clang++ -x c++-header ./header5.cxx -Xclang -emit-pch -o ./header5.pch -include-pch ./header4.pch
Running command: clang++ -x c++-header ./header6.cxx -Xclang -emit-pch -o ./header6.pch -include-pch ./header5.pch
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: clang++ -x c++-header ./header6.cxx -Xclang -emit-pch -o ./header6.pch -include-pch ./header5.pch
Exception Code: 0xC0000005
 #0 0x00007ff6a800d7a6 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x23cd7a6)
 #1 0x00007ff6a8c355d5 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x2ff55d5)
 #2 0x00007ff6a8c343db (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x2ff43db)
 #3 0x00007ff6a8038ed3 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x23f8ed3)
 #4 0x00007ff6a803c157 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x23fc157)
 #5 0x00007ff6a8024c91 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x23e4c91)
 #6 0x00007ff6a7ae14cd (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x1ea14cd)
 #7 0x00007ff6a7ae122a (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x1ea122a)
 #8 0x00007ff6a6217c89 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x5d7c89)
 #9 0x00007ff6a62035e3 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x5c35e3)
#10 0x00007ff6a6200366 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x5c0366)
#11 0x00007ff6a61fd325 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x5bd325)
#12 0x00007ff6a61fbcbe (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x5bbcbe)
#13 0x00007ff6a69155cd (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0xcd55cd)
#14 0x00007ff6a6384175 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x744175)
#15 0x00007ff6a6383f68 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x743f68)
#16 0x00007ff6a608c0c8 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x44c0c8)
#17 0x00007ff6a608b44e (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x44b44e)
#18 0x00007ff6a608afc7 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x44afc7)
#19 0x00007ff6a6082756 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x442756)
#20 0x00007ff6a607fed3 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x43fed3)
#21 0x00007ff6a7842bc8 (C:\Users\13511\scoop\apps\llvm\current\bin\clang++.exe+0x1c02bc8)
#22 0x00007ff97a0ce8d7 (C:\WINDOWS\System32\KERNEL32.DLL+0x2e8d7)
#23 0x00007ff97bb9bf6c (C:\WINDOWS\SYSTEM32\ntdll.dll+0xbbf6c)
clang++: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 19.1.7
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Users\13511\scoop\apps\llvm\19.1.7\bin
clang++: note: diagnostic msg: Error generating preprocessed source(s).
Error compiling ./header6.cxx: Command '['clang++', '-x', 'c++-header', './header6.cxx', '-Xclang', '-emit-pch', '-o', './header6.pch', '-include-pch', './header5.pch']' returned non-zero exit status 1.
```

But sadly I cannot reproduce it on [godbolt](https://godbolt.org/z/8os1G5j7d), it works well. I sent the test code to others—some experienced crashes while others didn't—so this might be quite a tricky issue. Moreover, chained PCH doesn't seem to have been widely used, and related test cases might be rather scarce.

Test sources:

[test.zip](https://github.com/user-attachments/files/19260652/test.zip)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkWt1y2zqSfhr6BiUVCf5f-EKWrY1nnBlX5HNmZm9cINCUcEIBWgC0pVycZ98CSImk_BMmJ8qmal2qskQ2vq-70egGGyRa85UAuPTiKy--viC1WUt1GSQFN5P9Z_5ZXhSS7S9vEdkgo_ZcrJCRqNaAvPhqviZcAENbBVRutrwChtZAGCjtxdceztbGbLUXzjy88PCCVkSsplX1tJlKtfLwgkmqPby4n3-4FQaUIJWers2m8nBIG-hJD3pygMa51UEBqykgswa0UkTUFVHc7JEsERdUwQaEIRVqBhPDpUBcOOnb65spuqoNkqIdL-pNAcoObWnR_fyDRrCjAEyjxMNzJ-cMaCFBoWdeVYgqotdTz5_ZT-I3H72GqvL82adaCN4M2RDBvHDWYHj4ysNXkyBHkx2i7a_GPDT18KL56k_pbocm_25oJ7DhZrKlazSRA6EtXf9lqmAMVTB1l7igVc3A3f_ReuAxeuD39Ah-iB7hGD3C9_TAP0SPaIwe0Xt6hD9Ej3iMHvF7ekQ_RI9kjB7Je3rEP0SPdIwe6Xt6JK0e93c3s-UN0nWx4QYRVNQrpGArlbFJbphAV9ys62JK5cbDC5tH23-TrZJ_ADUeXnCta7BJFRHBUEvdJC-bqFBB6GejCAWb07YKtkpS0BoY0rJWzWU7kmgtKScGGFK1QJoqvjU2zS0NoZ8Rqzdbq5Y_86fI_d0ruVJkg4ha1Tb36v8zj3Yaomdu1rI2SO83hayQIBvQyMMZCF0rQHtZozV5AuSc2AjxL6BspdjLWqH72cMHJBXSYJwPQTxxJYW1Dz0RhbzEv7v7_ePj8j8fr_55d_vfN58e7RAv8e3kbSUXbha58XDeuguhihd20FTLaZBPg8Z9_s73fT8ti6KkAc0iXDql7KBwpve6-XKvuDDOvodmDrNOSJHnR6mNArLxsCtZXFhe5OErlISePwtGcSdBmL_G_akWS74SpPpABKtcHc4O8Fnu-TM8Bt4vMU49fxY6YWolE9T76wkTlpdh6Hv-LGqEbWRM6HZ7hD8KUz_OCcVZ3kacU3i2fPjkAqP5uQJzJympPkpWV7DglXVfT1yD4qTiX9xeobnUF3UerYXbLrGDa6kU2jgPhIH1cDxCUYIZo4Xnz5JRwjQvyDtWVZKwa6DVb1tGDHwCKhXTQ8NORtyDYFys-gOcdc1MBnEeef4sHeNxVuZZ8o5uJRdcr1u-GbV-7QcNjmJLlY2hgjBMi3eoFo4K2DUcppHbxHPkim2A5mOYaJrn74WR_T5bPgyW3tIoLlafoLQxMiak_s4FO5FduvRrI9QJvwi2ccBNrM7cp7U8tMst8L9uepFBQKFPM293urdCGyIoNFepAmLgfv7hZtds2mfLh2VbPN5yytd9dc01KSr4nVScObMWUg2dVUhZnQy6PxYwqdol2rt7Kz7CRqp9AzMndA0vhWbLh7kUBnbm5b37-Qd7zz4SqCYGmhXfSnZGzZQie2tTONeGtXO0JgrY49YoL5z3QLuJsv4T2s3gjf18N-Q1bEEwEHQ_l1UF1EjVQT5Jzlw8dB4c_m_jJLWLMQjGxAkrA3qeOPmugHhhYd6m5MRahL9uEQ0KUqR98oWyMSFYk7Waa1ew4qIx4GX1eOGCF8F0gLwV29pYgF4stbnXDyNXp8MRk5D7OcRfn4SbHdDaQGvHQOUTGzs98iywWkQjHJdThgeh0PJ1yjwdM9r77jomrNS3JT-ITzePp3uEOM7SLIqyMmAYURo8bggXg8jqLSG6Jse1O2sXxvBaP47aFRFnLoCSsZrQgLg1lH7dcVlQ4hRb4WzMpgnKNO3lhrndytvS_QRqf8hex00aKaHaDxxR1sLN8aNyzrB2oqY4OlccKr-b9XyM8lD4g8LPFH86FMj5PJgfn6m6iHhrZo7JTW6tiqTywvlryeGYz44DHh_pbhcEzY-CaE4ftRNv53sgbC88GkW4fTBpbp_AkaqyoSpV774V6eWV2XDPF_k2PvCI0ppCWA43pwOPdT2q00Xk3DhYOScDrcCgKI0TnbXSh3zZGZVjGwZ4RB1IIQrK8luN-pss9NsW_U0Wd1ybN8rsckOq6ndX324326ofPVvC7cS93Cq964R2it9wReB2jXhEAcn8IGL-W7TXve-D_PhKYnzLhT_RFW31jG16wuHY5FcUtN2gHxLxQQG3FGftQuoseJCyanPXi0qYJLlzfTSSPc9TP0SWt5m40MVwPOIRM4sCSqxwMkoYZwV6fLSSj9oQZR57nE7jdKy_ckZi1IA0_rbb9OFYL5whUMpmpLaVgsq2Zh_aVqgkruv-zM0awY5bVzKwytgEX2tAkydkJNIAiPdqsdX1t6IWpm6Bn0DZnSiyoT1Nm-pg1cA-jv0giAI_DEPs4SvKUj_zcQ5-gSfBn7DbBn_2hKIomaZZQ_BA1ApsYUK7LHlMosmWTiou6t1kJWp7f62AMLSRDCortZWa7zx_5jYFVQXsmjvTPbyotfLwouLFoeMV5B5eFFy877Ra2C2kdQA0667f7lvCyh0SuLOBktSVnYiMSgWueQSsseIlvJDG7q4Q42QlpDacoo22awzdWGK0AgGKGC5Wr3fYMu3hfOr5s0a8OU-w0ifdMIt4WKceTr34ysPpiTo4tavKw-lk130fNtm666f43eB_t7DHC4f-W--SfB1oKNRrzb0mnhzE42sPp0iBqZV9xBVSTL6Akk0Ma0NMrVEw7Z-pNEcstwaRSsu2mykFeuaCyWf9XQcwP-v05Zc4evklzl1-iUOXX-LE5Zc4bvlJZy3_X844fpI7b3YU3MMSmkvmKpG_m_vuL_Z8Wy9D_7hxKROS-T5LSWKr29waFM9_0-6Ifh6EcRB48VxTKbdePCfbrb3s3B7Paa0UCOPFc1to43nP0inswMNX_g6H1GI3pdIyBwNmGsYxi8_DXJYWu2PGJ8xRyIpzMVvsjjkcejvMgIVn8nZpsTvm6ISZBnF6LmaL3THHQ2Yc0Tw4EzNY7I456TOnBIKIsrMwB0AsdsecnjJjTM7GjDHpmLM-c4KDlGb5WZhjZqE74nxI7IcxnCe0Y2qhG2KbRvwTYj9MzpPBYmqhO-JBAkuCkoX4PAksLix0R4xPiAtawJmILXRHPEhfSR7E8ZkWFGUWuiMeZK8kzKIgPY-r08hCd8TxCXFYJtmZiC10RzzIXYmfUZ-ehziKLHRHnJ4QF1F0nuCKIgvdEWcnxKSk56lQUWShO-L8hBin8XkSSBRZ6CMxHmYuPy3PtRuIwvK4GbDEg8yVZhEuzhRcAfUtdsfcS115SnwKGetP8r9u_3H9z38tvXi-3GsDmxB78fzvN5_-cXMX4un13V1T6O2oDjPsYxZFXpQJfR3zP8uHm48OUxhWVVNWVQ6wsENeNHG-oavGatc70u61l6831F7rpL3RBmu7FpONfqLf0An7pplsFWgm8oULfkITKxnTxPreDlbyozpYybd1sOK_2sG6qg3ShFV7dIsoEUIa5Pzr3mbmBkmBvPhqJVkhK_Paa9TtrfYd6i8eXmRSB_8V_5G60ornFuVZqs8aPUNVTdEt0iCaF9gM6LZFbCSSZm3j6AZ7me_lkZYbQLDbguIgKLDmaRo0el7zClppxDgTHk5Nbxgya67Rhq_WBhWA_qfmBhBBRnH6eY_c0_oUfZQK5BOo9kjg8JY1YhK0A7RLauP6AeQJUAEg0DNnUO1RrYEdntkVVO6BvTGEaOgRK2JVRJoSRaF9JfvByjUxq5uHefuJr-z46Re-fdXB_RZErUFNiDGErptHfrwoeeXaD0GOEz-JsYcXRzicX7DLkOVhTi7gMkgj7IdhGGUX68s0xH6cJTlO05RkBQ18EpVhkWcRjRIM-QW_dI30MIgD38_9bBoRRohf0CArcQAk9SIfNoRXx3foL5xzL4MwiKLsoiIFVNq9yo9xuxywF19fqEvXQSnqlfYiv-La6A7CcFO59__nbkR8bcNvOXjBKL5G7sgZPa9BjHpj_qJW1eX3N3Zag54u8f8GAAD__0TVuXk">