<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/132413>132413</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clangd] Clangd running with `--experimental-modules-support` crashes when the compilation database is unavailable.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
slavek-kucera
</td>
</tr>
</table>
<pre>
Version: llvmorg-20.1.1
Clangd running with `--experimental-modules-support` crashes if I open an arbitrary C++ file and the `compile_commands.json` is not available.
Stacktrace:
```
#0 0x0000560f7676338a ___interceptor_backtrace (/tmp/llvm/build/bin/clangd+0x3a7538a)
#1 0x0000560f76acda11 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /tmp/llvm/llvm/lib/Support/Unix/Signals.inc:799:13
#2 0x0000560f76ac94b8 llvm::sys::RunSignalHandlers() /tmp/llvm/llvm/lib/Support/Signals.cpp:0:5
#3 0x0000560f76aceb33 SignalHandler(int) /tmp/llvm/llvm/lib/Support/Unix/Signals.inc:0:3
#4 0x00007f73ba21b330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#5 0x0000560f7994e29e clang::clangd::OverlayCDB::getProjectModules(llvm::StringRef) const /tmp/llvm/clang-tools-extra/clangd/GlobalCompilationDatabase.cpp:836:8
#6 0x0000560f79a171e5 clang::clangd::ModulesBuilder::buildPrerequisiteModulesFor(llvm::StringRef, clang::clangd::ThreadsafeFS const&) /tmp/llvm/clang-tools-extra/clangd/ModulesBuilder.cpp:0:56
#7 0x0000560f79aabe73 clang::clangd::buildPreamble(llvm::StringRef, clang::CompilerInvocation, clang::clangd::ParseInputs const&, bool, std::function<void (clang::clangd::CapturedASTCtx, std::shared_ptr<clang::include_cleaner::PragmaIncludes const>)>, clang::clangd::PreambleBuildStats*) /tmp/llvm/clang-tools-extra/clangd/Preamble.cpp:0:34
#8 0x0000560f79c447a0 clang::clangd::(anonymous namespace)::PreambleThread::build(clang::clangd::(anonymous namespace)::PreambleThread::Request) /tmp/llvm/clang-tools-extra/clangd/TUScheduler.cpp:1089:17
#9 0x0000560f79c42e64 clang::clangd::(anonymous namespace)::PreambleThread::run() /tmp/llvm/clang-tools-extra/clangd/TUScheduler.cpp:513:9
#10 0x0000560f79c42e64 clang::clangd::(anonymous namespace)::ASTWorker::create(llvm::StringRef, clang::clangd::GlobalCompilationDatabase const&, clang::clangd::TUScheduler::ASTCache&, clang::clangd::TUScheduler::HeaderIncluderCache&, clang::clangd::AsyncTaskRunner*, clang::clangd::Semaphore&, clang::clangd::TUScheduler::Options const&, clang::clangd::ParsingCallbacks&)::$_1::operator()() const /tmp/llvm/clang-tools-extra/clangd/TUScheduler.cpp:828:55
#11 0x0000560f79c42e64 void llvm::detail::UniqueFunctionBase<void>::CallImpl<clang::clangd::(anonymous namespace)::ASTWorker::create(llvm::StringRef, clang::clangd::GlobalCompilationDatabase const&, clang::clangd::TUScheduler::ASTCache&, clang::clangd::TUScheduler::HeaderIncluderCache&, clang::clangd::AsyncTaskRunner*, clang::clangd::Semaphore&, clang::clangd::TUScheduler::Options const&, clang::clangd::ParsingCallbacks&)::$_1>(void*) /tmp/llvm/llvm/include/llvm/ADT/FunctionExtras.h:222:12
#12 0x0000560f79faafa9 clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1::operator()() /tmp/llvm/clang-tools-extra/clangd/support/Threading.cpp:103:14
#13 0x0000560f79faafa9 auto void llvm::thread::GenericThreadProxy<std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>>(void*)::'lambda'(auto&&, auto&&...)::operator()<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1&>(auto&&, auto&&...) const /tmp/llvm/llvm/include/llvm/Support/thread.h:43:11
#14 0x0000560f79faafa9 auto std::__invoke_impl<void, void llvm::thread::GenericThreadProxy<std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>>(void*)::'lambda'(auto&&, auto&&...), clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1&>(std::__invoke_other, void llvm::thread::GenericThreadProxy<std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>>(void*)::'lambda'(auto&&, auto&&...)&&, clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1&) /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:61:14
#15 0x0000560f79faafa9 std::__invoke_result<auto, auto...>::type std::__invoke<void llvm::thread::GenericThreadProxy<std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>>(void*)::'lambda'(auto&&, auto&&...), clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1&>(auto&&, auto&&...) /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:96:14
#16 0x0000560f79faafa9 decltype(auto) std::__apply_impl<void llvm::thread::GenericThreadProxy<std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>>(void*)::'lambda'(auto&&, auto&&...), std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>&, 0ul>(auto&&, std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>&, std::integer_sequence<unsigned long, 0ul>) /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/tuple:2921:14
#17 0x0000560f79faafa9 decltype(auto) std::apply<void llvm::thread::GenericThreadProxy<std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>>(void*)::'lambda'(auto&&, auto&&...), std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>&>(auto&&, std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>&) /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/tuple:2936:14
#18 0x0000560f79faafa9 void llvm::thread::GenericThreadProxy<std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>>(void*) /tmp/llvm/llvm/include/llvm/Support/thread.h:41:5
#19 0x0000560f79faafa9 void* llvm::thread::ThreadProxy<std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>>(void*) /tmp/llvm/llvm/include/llvm/Support/thread.h:55:5
#20 0x0000560f767b9b3b asan_thread_start(void*) asan_interceptors.cpp.o:0:0
#21 0x00007f73ba272aa4 start_thread ./nptl/pthread_create.c:447:8
#22 0x00007f73ba2ffc3c clone3 ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:80:0
Signalled while building preamble
Filename: test.cpp
Directory: /tmp
Command Line: /usr/bin/clang -resource-dir=/tmp/llvm/build/lib/clang/20 -- /tmp/test.cpp
Version: 0
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWkFv4zjS_TXMhbAhkZJlHXxwnPZMgO_DBJ307tEoSWWbE5pUk1QS__sFKSm2Ers3mentnZ4NEMSyKBWrXr1XJYsEa8VGIc5IeknSqwto3FabmZXwgPej-6ZEAxeFrvazf6CxQivC51TKh502mxGLxvE4JtGcRPOFBLWpqGmUEmpDH4XbUjKJRiN8qtGIHSoHcrTTVSPRjmxT19o4MoloacBu0VKxptdU16goKAqmEM6A2dMFYZeEXdK1kEhBVdRt0Rsu9a4WElel3u1AVXb8u9XK2xOWKu0oPICQUEgct_7dOijvnYESCfffySTq_qI5JYxHNHqKoihKJ9E6m2QTzqdAV6uVUA5NibXTZlX0JihhU8KWblcTtvRoELYsGiEr_ykUYcsywEHYZfTEIUv5FAjLu6niwVRQVhDHAVPvGZ_bvW0PboxQLvh9F_xm08NFBh5X2jqDsCNsQtiCCuUIy-lLt_oPURC2vO1gZ8svSjz5E2KjQNqxUCXh8yzPCZ_HvPOTvfAzT4rpKT8_N6q18yuoSqKxAZ03u9L7UNY14fOI8HnaOcBfOIAF53QwFWHT7xC3n7MPOunmzNYZL4DFBedRl-7W1tN0spokIylU8zTaqKYdKMdWjych30nKeXTIdnocRJ4nyHKkgR4teh1TwvFvD2gk7BdXl-33Dbobo3_H0v1_K5wBB26dEWrzGdc-_lIr616hEIyPnNbSjvDJGTii5vIXqQuQiyAkcEKrK3BQgMUuFVM-8f-7OCaDOCDOYkzPxdF5e-klgaY9F_RxY9Dg10ZY4bC7aKnNuagW5-zfbQ1CZWGNy9s28iCC1yz4ZvxDL4_5N-lizoYxQ4EZP-dTHx_sColviqhFHs21etBlSMA3Qr4BY_Fa1Y2zRxEvaKG19J_WdReuG1UGW3zxoEXluXvG5AJq1xis5rd3C_c0MGK3YLBa1c4Qvji6XahSNhWuSomg-szeGNjs4Lod6r3jn7wE_P_zIXVghQTcOnCWsPm7s9hbOcofT7r8TQf5K5Mkg-icN4RNQWm13-nGUgU7tHUouvnQ2ZZ6Ryk_j-8fsPgZvzZoTxa0b4Jw9-W23KKnc8_jOJqGYp51UOQvoGA4Sb4jFKZRZ6r-O_1OY0743BdP3ymj7-f1_Pbun9rc96QtDYJ7m06PJzlbMweiPFe2DtE--7SAcovvvO1XhMqXjSA48wYLc7tX5R3Y-8-N8rL1Mjt78S3uoN5q816vfqs9HvYtQPhiJtRmAVL6ZyrbVu8-jckqbg91jQZc6A9-uOXXH2h0r1k2ZVPPtbSjWXyKZqF6HthRoQMh2-MvSnxtcNlV2kuw2FVbX_C62irl9a6Ww_L5Qde_K10_ETYNBDjdwbqPrn0eTsyv7ghb9kT65Ilrx1vC54wxX71ZR9DBo3i-BlhD_lb0-voczg8YdPco1JAJh7EmUHx14mmi7-tv1Ou7lGqfH9Tb5iLU5rmf-b4QJx0g_BQg0Dj9UrbuqEn9ggqNKFvTN0Y_7QlfPD_zuKaWeF6v_x1YP72kVj-aSdgVFRCW-ULSOB2mCrMdvo3H4-dbXiTnrxUnm7RxfjuQM7X_nLgOv_paEgRhJYFGcUej5CyNnmmxWgn1oO9xJdpy3qZi8cGz1zx7e0X_oaR6nUrttr6tfCTxVBIn72vOPyqVbStprHl-E7Mpy9PvY-KEsKWP5uW_Q4ko29eK_cWF8D8-ly09Qp2YxMftJj1VJ17zyqBtpCN80aLaoutx7R8L3b7G1_f10X8Q8SeoJv-mRf1IjuaTY45OTnG0wlJ60j07PqAt1LXcHze2Dwq-pOBfPcrWQtTIU-z8OZx_9lIohxs0K4tfG1Sld7hRYX2qolKrzXGk_0mldWjNWc4GXSB7r8KCvj6k9fNK6yfV1I8RBx-0n-kpcfzNif8nf4rG3Vqnhy8_Bx9h8zMI_g9Dl6YH6NiLpfsiL3hBwYJatXesrANv4Hj2MHy0th-Wn8e6W0CKOsvxcDE4YwAJDdY609RLRdVOErasu9naV7Xj0mc4yboVVG-NDa2t1yUvaSm1Qh7s7IQte_nZva2w9s97Tbtibff2IchZNU_PUg6vzvz941s_T-96u7otsaKPWyGRhnUqoTa07pcnozmlSyFRwc5rmTq0Lrxo8wNXwmDptNn7kS5N_vyi3WpB_08o7IbaGnO05YGODFrdmBJHlTCEX53bJtHWpZajbMkiOhodKHHsztG-k-h438ZFNeNVznO4wFmcJSzNGMv4xXYWV1UexyzCbMqSImEZq3g6gbTKqjzNUrgQMxaxNOIsjtM0jvkYqrxYV5hAsuZxBQVJItyBkGPv81ibzYWwtsFZzFkS8wsJBUobdswwpvCRhlHCGEmvLszM3zQqmo0lSSSFdfZgxgknw1abTpDpFf3T-2Yet6jCppjy8JafVv1rfmFpow57YS4aI2db5-qwdYMtfWsQbtsU41Lvhloc1e3OA69JH5_nYgfAw4z9KwAA__96Ef6v">