Skip to content

[clangd] Clangd running with --experimental-modules-support crashes when the compilation database is unavailable. #132413

Open
@slavek-kucera

Description

@slavek-kucera

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    clang:modulesC++20 modules and Clang Header ModulesclangdcrashPrefer [crash-on-valid] or [crash-on-invalid]

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions