Skip to content

[clangd] Crash on textDocument/typeDefinition on throw #139886

Open
@henryhchchc

Description

@henryhchchc

For the following C++ code. A textDocument/typeDefinition request on the throw causes a crash.

struct gen {
  struct promise_type {
    gen get_return_object() noexcept {
      return gen{std::coroutine_handle<promise_type>::from_promise(*this)};
    }
    std::suspend_always initial_suspend() noexcept { return {}; }

    struct final_awaiter {
      ~final_awaiter() noexcept;
      bool await_ready() noexcept {
        return false;
      }
      void await_suspend(std::coroutine_handle<>) noexcept {}
      void await_resume() noexcept {}
    };

    final_awaiter final_suspend() noexcept {
      return {};
    }

    void unhandled_exception() {
      throw;
    }
    void return_void() {}
  };

  gen(std::coroutine_handle<promise_type> coro) noexcept
  : coro(coro)
  {
  }

  ~gen() noexcept {
    if (coro) {
      coro.destroy();
    }
  }

  gen(gen&& g) noexcept
  : coro(g.coro)
  {
    g.coro = {};
  }

  std::coroutine_handle<promise_type> coro;
} c;

The stack trace is as follows:

I[12:10:01.723] clangd version 20.1.4 (https://github.com/llvm/llvm-project.git ec28b8f9cc7f2ac187d8a617a6d08d5e56f9120e)
I[12:10:01.723] Features: linux+asan
I[12:10:01.723] PID: 1958
I[12:10:01.723] Working directory: /tmp/export/input_158
I[12:10:01.723] argv[0]: /src/build/bin/clangd
I[12:10:01.724] Starting LSP over stdin/stdout
I[12:10:01.725] <-- initialize(0)
I[12:10:01.803] --> reply:initialize(0) 78 ms
Content-Length: 2050

{"id":0,"jsonrpc":"2.0","result":{"capabilities":{"astProvider":true,"callHierarchyProvider":true,"clangdInlayHintsProvider":true,"codeActionProvider":true,"compilationDatabase":{"automaticReload":true},"completionProvider":{"resolveProvider":false,"triggerCharacters":[".","<",">",":","\"","/","*"]},"declarationProvider":true,"definitionProvider":true,"documentFormattingProvider":true,"documentHighlightProvider":true,"documentLinkProvider":{"resolveProvider":false},"documentOnTypeFormattingProvider":{"firstTriggerCharacter":"\n","moreTriggerCharacter":[]},"documentRangeFormattingProvider":true,"documentSymbolProvider":true,"executeCommandProvider":{"commands":["clangd.applyFix","clangd.applyRename","clangd.applyTweak"]},"foldingRangeProvider":true,"hoverProvider":true,"implementationProvider":true,"inactiveRegionsProvider":true,"inlayHintProvider":true,"memoryUsageProvider":true,"referencesProvider":true,"renameProvider":true,"selectionRangeProvider":true,"semanticTokensProvider":{"full":{"delta":true},"legend":{"tokenModifiers":["declaration","definition","deprecated","deduced","readonly","static","abstract","virtual","dependentName","defaultLibrary","usedAsMutableReference","usedAsMutablePointer","constructorOrDestructor","userDefined","functionScope","classScope","fileScope","globalScope"],"tokenTypes":["variable","variable","parameter","function","method","function","property","variable","class","interface","enum","enumMember","type","type","unknown","namespace","typeParameter","concept","type","macro","modifier","operator","bracket","label","comment"]},"range":false},"signatureHelpProvider":{"triggerCharacters":["(",")","{","}","<",">",","]},"standardTypeHierarchyProvider":true,"textDocumentSync":{"change":2,"openClose":true,"save":true},"typeDefinitionProvider":true,"typeHierarchyProvider":true,"workspaceSymbolProvider":true},"serverInfo":{"name":"clangd","version":"clangd version 20.1.4 (https://github.com/llvm/llvm-project.git ec28b8f9cc7f2ac187d8a617a6d08d5e56f9120e) linux+asan x86_64-unknown-linux-gnu"}}}I[12:10:01.804] <-- initialized
I[12:10:01.804] <-- textDocument/didOpen
I[12:10:01.806] <-- textDocument/typeDefinition(7)
E[12:10:01.806] Transport error: Input/output error
I[12:10:01.806] LSP finished, exiting with status 1
I[12:10:01.807] Failed to find compilation database for /tmp/export/input_158/workspace/main.cpp
I[12:10:01.807] ASTWorker building file /tmp/export/input_158/workspace/main.cpp version 1 with command clangd fallback
[/tmp/export/input_158/workspace]
/usr/bin/clang -resource-dir=/src/build/lib/clang/20 -- /tmp/export/input_158/workspace/main.cpp
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
 #0 0x000000000582426a ___interceptor_backtrace (/src/build/bin/clangd+0x582426a)
 #1 0x0000000005dfcc27 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /src/llvm/lib/Support/Unix/Signals.inc:799:13
 #2 0x0000000005dfbfec llvm::sys::RunSignalHandlers() /src/llvm/lib/Support/Signals.cpp:0:5
 #3 0x0000000005dfbfec SignalHandler(int) /src/llvm/lib/Support/Unix/Signals.inc:405:3
 #4 0x00007f173054b730 __restore_rt (/lib64/libc.so.6+0x3e730)
 #5 0x000000000904b67b clang::StmtVisitorBase<llvm::make_const_ptr, clang::clangd::typeForNode(clang::clangd::SelectionTree::Node const*)::Visitor, clang::QualType>::Visit(clang::Stmt const*) /src/build/tools/clang/include/clang/AST/StmtNodes.inc:0:0
 #6 0x0000000009048c07 clang::clangd::typeForNode(clang::clangd::SelectionTree::Node const*) /src/clang-tools-extra/clangd/XRefs.cpp:0:14
 #7 0x0000000009048c07 clang::clangd::findType(clang::clangd::ParsedAST&, clang::clangd::Position, clang::clangd::SymbolIndex const*)::$_0::operator()(clang::clangd::SelectionTree::Node const*) const /src/clang-tools-extra/clangd/XRefs.cpp:2073:48
 #8 0x0000000009048c07 clang::clangd::findType(clang::clangd::ParsedAST&, clang::clangd::Position, clang::clangd::SymbolIndex const*)::$_1::operator()(clang::clangd::SelectionTree) const /src/clang-tools-extra/clangd/XRefs.cpp:2081:40
 #9 0x0000000009048c07 bool llvm::function_ref<bool (clang::clangd::SelectionTree)>::callback_fn<clang::clangd::findType(clang::clangd::ParsedAST&, clang::clangd::Position, clang::clangd::SymbolIndex const*)::$_1>(long, clang::clangd::SelectionTree) /src/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#10 0x0000000008e2f2ed llvm::function_ref<bool (clang::clangd::SelectionTree)>::operator()(clang::clangd::SelectionTree) const /src/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
#11 0x0000000008e2f2ed clang::clangd::SelectionTree::createEach(clang::ASTContext&, clang::syntax::TokenBuffer const&, unsigned int, unsigned int, llvm::function_ref<bool (clang::clangd::SelectionTree)>) /src/clang-tools-extra/clangd/Selection.cpp:1062:9
#12 0x0000000009047bfc clang::clangd::findType(clang::clangd::ParsedAST&, clang::clangd::Position, clang::clangd::SymbolIndex const*) /src/clang-tools-extra/clangd/XRefs.cpp:2079:3
#13 0x0000000008a541e2 llvm::Expected<std::vector<clang::clangd::LocatedSymbol, std::allocator<clang::clangd::LocatedSymbol>>>::Expected<std::vector<clang::clangd::LocatedSymbol, std::allocator<clang::clangd::LocatedSymbol>>>(std::vector<clang::clangd::LocatedSymbol, std::allocator<clang::clangd::LocatedSymbol>>&&, std::enable_if<std::is_convertible_v<std::vector<clang::clangd::LocatedSymbol, std::allocator<clang::clangd::LocatedSymbol>>, std::vector<clang::clangd::LocatedSymbol, std::allocator<clang::clangd::LocatedSymbol>>>, void>::type*) /src/llvm/include/llvm/Support/Error.h:524:9
#14 0x0000000008a541e2 clang::clangd::ClangdServer::findType(llvm::StringRef, clang::clangd::Position, llvm::unique_function<void (llvm::Expected<std::vector<clang::clangd::LocatedSymbol, std::allocator<clang::clangd::LocatedSymbol>>>)>)::$_0::operator()(llvm::Expected<clang::clangd::InputsAndAST>) /src/clang-tools-extra/clangd/ClangdServer.cpp:977:8
#15 0x0000000008a541e2 void llvm::detail::UniqueFunctionBase<void, llvm::Expected<clang::clangd::InputsAndAST>>::CallImpl<clang::clangd::ClangdServer::findType(llvm::StringRef, clang::clangd::Position, llvm::unique_function<void (llvm::Expected<std::vector<clang::clangd::LocatedSymbol, std::allocator<clang::clangd::LocatedSymbol>>>)>)::$_0>(void*, llvm::Expected<clang::clangd::InputsAndAST>&) /src/llvm/include/llvm/ADT/FunctionExtras.h:222:12
#16 0x0000000008f9aa73 llvm::Expected<clang::clangd::InputsAndAST>::~Expected() /src/llvm/include/llvm/Support/Error.h:563:10
#17 0x0000000008f9aa73 clang::clangd::(anonymous namespace)::ASTWorker::runWithAST(llvm::StringRef, llvm::unique_function<void (llvm::Expected<clang::clangd::InputsAndAST>)>, clang::clangd::TUScheduler::ASTActionInvalidation)::$_0::operator()() /src/clang-tools-extra/clangd/TUScheduler.cpp:1013:5
#18 0x0000000008f9aa73 void llvm::detail::UniqueFunctionBase<void>::CallImpl<clang::clangd::(anonymous namespace)::ASTWorker::runWithAST(llvm::StringRef, llvm::unique_function<void (llvm::Expected<clang::clangd::InputsAndAST>)>, clang::clangd::TUScheduler::ASTActionInvalidation)::$_0>(void*) /src/llvm/include/llvm/ADT/FunctionExtras.h:222:12
#19 0x0000000008fa8a20 llvm::function_ref<void ()>::operator()() const /src/llvm/include/llvm/ADT/STLFunctionalExtras.h:0:12
#20 0x0000000008fa8a20 clang::clangd::(anonymous namespace)::ASTWorker::runTask(llvm::StringRef, llvm::function_ref<void ()>) /src/clang-tools-extra/clangd/TUScheduler.cpp:1328:3
#21 0x0000000008fb2991 clang::clangd::(anonymous namespace)::ASTWorker::run() /src/clang-tools-extra/clangd/TUScheduler.cpp:0:7
#22 0x0000000008fb2991 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&)::$_0::operator()() const /src/clang-tools-extra/clangd/TUScheduler.cpp:826:42
#23 0x0000000008fb2991 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&)::$_0>(void*) /src/llvm/include/llvm/ADT/FunctionExtras.h:222:12
#24 0x00000000092fc635 clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1::operator()() /src/clang-tools-extra/clangd/support/Threading.cpp:103:14
#25 0x00000000092fc635 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 /src/llvm/include/llvm/Support/thread.h:43:11
#26 0x00000000092fc635 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&) /opt/rh/gcc-toolset-13/root/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:61:14
#27 0x00000000092fc635 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&&...) /opt/rh/gcc-toolset-13/root/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:96:14
#28 0x00000000092fc635 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>) /opt/rh/gcc-toolset-13/root/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/tuple:2302:14
#29 0x00000000092fc635 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>&) /opt/rh/gcc-toolset-13/root/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/tuple:2313:14
#30 0x00000000092fc635 void llvm::thread::GenericThreadProxy<std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>>(void*) /src/llvm/include/llvm/Support/thread.h:41:5
#31 0x00000000092fc635 void* llvm::thread::ThreadProxy<std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>>(void*) /src/llvm/include/llvm/Support/thread.h:55:5
#32 0x000000000587695d asan_thread_start(void*) crtstuff.c:0:0
#33 0x00007f17305967fa start_thread (/lib64/libc.so.6+0x897fa)
#34 0x00007f173061b820 __GI___clone3 (/lib64/libc.so.6+0x10e820)
Signalled during AST worker action: FindType
  Filename: main.cpp
  Directory: /tmp/export/input_158/workspace
  Command Line: /usr/bin/clang -resource-dir=/src/build/lib/clang/20 -- /tmp/export/input_158/workspace/main.cpp
  Version: 1
AddressSanitizer:DEADLYSIGNAL
=================================================================
==1958==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000008 (pc 0x00000904b67b bp 0x7f1693170350 sp 0x7f1693170210 T130)
==1958==The signal is caused by a READ memory access.
==1958==Hint: address points to the zero page.
    #0 0x904b67b in clang::StmtVisitorBase<llvm::make_const_ptr, clang::clangd::typeForNode(clang::clangd::SelectionTree::Node const*)::Visitor, clang::QualType>::Visit(clang::Stmt const*) /src/build/tools/clang/include/clang/AST/StmtNodes.inc
    #1 0x9048c06 in clang::clangd::typeForNode(clang::clangd::SelectionTree::Node const*) /src/clang-tools-extra/clangd/XRefs.cpp:1999:14
    #2 0x9048c06 in clang::clangd::findType(clang::clangd::ParsedAST&, clang::clangd::Position, clang::clangd::SymbolIndex const*)::$_0::operator()(clang::clangd::SelectionTree::Node const*) const /src/clang-tools-extra/clangd/XRefs.cpp:2073:48
    #3 0x9048c06 in clang::clangd::findType(clang::clangd::ParsedAST&, clang::clangd::Position, clang::clangd::SymbolIndex const*)::$_1::operator()(clang::clangd::SelectionTree) const /src/clang-tools-extra/clangd/XRefs.cpp:2081:40
    #4 0x9048c06 in bool llvm::function_ref<bool (clang::clangd::SelectionTree)>::callback_fn<clang::clangd::findType(clang::clangd::ParsedAST&, clang::clangd::Position, clang::clangd::SymbolIndex const*)::$_1>(long, clang::clangd::SelectionTree) /src/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
    #5 0x8e2f2ec in llvm::function_ref<bool (clang::clangd::SelectionTree)>::operator()(clang::clangd::SelectionTree) const /src/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
    #6 0x8e2f2ec in clang::clangd::SelectionTree::createEach(clang::ASTContext&, clang::syntax::TokenBuffer const&, unsigned int, unsigned int, llvm::function_ref<bool (clang::clangd::SelectionTree)>) /src/clang-tools-extra/clangd/Selection.cpp:1062:9
    #7 0x9047bfb in clang::clangd::findType(clang::clangd::ParsedAST&, clang::clangd::Position, clang::clangd::SymbolIndex const*) /src/clang-tools-extra/clangd/XRefs.cpp:2079:3
    #8 0x8a541e1 in clang::clangd::ClangdServer::findType(llvm::StringRef, clang::clangd::Position, llvm::unique_function<void (llvm::Expected<std::vector<clang::clangd::LocatedSymbol, std::allocator<clang::clangd::LocatedSymbol>>>)>)::$_0::operator()(llvm::Expected<clang::clangd::InputsAndAST>) /src/clang-tools-extra/clangd/ClangdServer.cpp:977:8
    #9 0x8a541e1 in void llvm::detail::UniqueFunctionBase<void, llvm::Expected<clang::clangd::InputsAndAST>>::CallImpl<clang::clangd::ClangdServer::findType(llvm::StringRef, clang::clangd::Position, llvm::unique_function<void (llvm::Expected<std::vector<clang::clangd::LocatedSymbol, std::allocator<clang::clangd::LocatedSymbol>>>)>)::$_0>(void*, llvm::Expected<clang::clangd::InputsAndAST>&) /src/llvm/include/llvm/ADT/FunctionExtras.h:222:12
    #10 0x8f9aa72 in llvm::unique_function<void (llvm::Expected<clang::clangd::InputsAndAST>)>::operator()(llvm::Expected<clang::clangd::InputsAndAST>) /src/llvm/include/llvm/ADT/FunctionExtras.h:387:12
    #11 0x8f9aa72 in clang::clangd::(anonymous namespace)::ASTWorker::runWithAST(llvm::StringRef, llvm::unique_function<void (llvm::Expected<clang::clangd::InputsAndAST>)>, clang::clangd::TUScheduler::ASTActionInvalidation)::$_0::operator()() /src/clang-tools-extra/clangd/TUScheduler.cpp:1013:5
    #12 0x8f9aa72 in void llvm::detail::UniqueFunctionBase<void>::CallImpl<clang::clangd::(anonymous namespace)::ASTWorker::runWithAST(llvm::StringRef, llvm::unique_function<void (llvm::Expected<clang::clangd::InputsAndAST>)>, clang::clangd::TUScheduler::ASTActionInvalidation)::$_0>(void*) /src/llvm/include/llvm/ADT/FunctionExtras.h:222:12
    #13 0x8fa8a1f in llvm::function_ref<void ()>::operator()() const /src/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
    #14 0x8fa8a1f in clang::clangd::(anonymous namespace)::ASTWorker::runTask(llvm::StringRef, llvm::function_ref<void ()>) /src/clang-tools-extra/clangd/TUScheduler.cpp:1328:3
    #15 0x8fb2990 in clang::clangd::(anonymous namespace)::ASTWorker::run() /src/clang-tools-extra/clangd/TUScheduler.cpp:1462:7
    #16 0x8fb2990 in 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&)::$_0::operator()() const /src/clang-tools-extra/clangd/TUScheduler.cpp:826:42
    #17 0x8fb2990 in 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&)::$_0>(void*) /src/llvm/include/llvm/ADT/FunctionExtras.h:222:12
    #18 0x92fc634 in llvm::unique_function<void ()>::operator()() /src/llvm/include/llvm/ADT/FunctionExtras.h:387:12
    #19 0x92fc634 in clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1::operator()() /src/clang-tools-extra/clangd/support/Threading.cpp:101:5
    #20 0x92fc634 in 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 /src/llvm/include/llvm/Support/thread.h:43:11
    #21 0x92fc634 in 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&) /opt/rh/gcc-toolset-13/root/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:61:14
    #22 0x92fc634 in 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&&...) /opt/rh/gcc-toolset-13/root/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:96:14
    #23 0x92fc634 in 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>) /opt/rh/gcc-toolset-13/root/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/tuple:2302:14
    #24 0x92fc634 in 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>&) /opt/rh/gcc-toolset-13/root/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/tuple:2313:14
    #25 0x92fc634 in void llvm::thread::GenericThreadProxy<std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>>(void*) /src/llvm/include/llvm/Support/thread.h:41:5
    #26 0x92fc634 in void* llvm::thread::ThreadProxy<std::tuple<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>>(void*) /src/llvm/include/llvm/Support/thread.h:55:5
    #27 0x587695c in asan_thread_start(void*) crtstuff.c
    #28 0x7f17305967f9 in start_thread (/lib64/libc.so.6+0x897f9) (BuildId: fc46bc419367003d0e4e399cbe22aade4a1ee7be)
    #29 0x7f173061b81f in __GI___clone3 (/lib64/libc.so.6+0x10e81f) (BuildId: fc46bc419367003d0e4e399cbe22aade4a1ee7be)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /src/build/tools/clang/include/clang/AST/StmtNodes.inc in clang::StmtVisitorBase<llvm::make_const_ptr, clang::clangd::typeForNode(clang::clangd::SelectionTree::Node const*)::Visitor, clang::QualType>::Visit(clang::Stmt const*)
Thread T130 created by T0 here:
    #0 0x5860115 in pthread_create (/src/build/bin/clangd+0x5860115) (BuildId: 8b31158490359739)
    #1 0x5dfe9a8 in llvm::llvm_execute_on_thread_impl(void* (*)(void*), void*, std::optional<unsigned int>) /src/llvm/lib/Support/Unix/Threading.inc:96:17
    #2 0x92fc2d1 in llvm::thread::thread<clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1>(std::optional<unsigned int>, clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1&&) /src/llvm/include/llvm/Support/thread.h:131:12
    #3 0x92fc2d1 in clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>) /src/clang-tools-extra/clangd/support/Threading.cpp:107:16
    #4 0x8fbbadb in 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&) /src/clang-tools-extra/clangd/TUScheduler.cpp:825:12
    #5 0x8fbbadb in clang::clangd::TUScheduler::update(llvm::StringRef, clang::clangd::ParseInputs, clang::clangd::WantDiagnostics) /src/clang-tools-extra/clangd/TUScheduler.cpp:1681:30
    #6 0x8a87efe in clang::clangd::ClangdServer::addDocument(llvm::StringRef, llvm::StringRef, llvm::StringRef, clang::clangd::WantDiagnostics, bool) /src/clang-tools-extra/clangd/ClangdServer.cpp:316:33
    #7 0x89da572 in clang::clangd::ClangdLSPServer::onDocumentDidOpen(clang::clangd::DidOpenTextDocumentParams const&) /src/clang-tools-extra/clangd/ClangdLSPServer.cpp:726:11
    #8 0x8a1710f in void clang::clangd::LSPBinder::notification<clang::clangd::DidOpenTextDocumentParams, clang::clangd::ClangdLSPServer>(llvm::StringLiteral, clang::clangd::ClangdLSPServer*, void (clang::clangd::ClangdLSPServer::*)(clang::clangd::DidOpenTextDocumentParams const&))::'lambda'(llvm::json::Value)::operator()(llvm::json::Value) const /src/clang-tools-extra/clangd/LSPBinder.h:153:5
    #9 0x8a16efe in void llvm::detail::UniqueFunctionBase<void, llvm::json::Value>::CallImpl<void clang::clangd::LSPBinder::notification<clang::clangd::DidOpenTextDocumentParams, clang::clangd::ClangdLSPServer>(llvm::StringLiteral, clang::clangd::ClangdLSPServer*, void (clang::clangd::ClangdLSPServer::*)(clang::clangd::DidOpenTextDocumentParams const&))::'lambda'(llvm::json::Value)>(void*, llvm::json::Value&) /src/llvm/include/llvm/ADT/FunctionExtras.h:222:12
    #10 0x8a3e812 in llvm::unique_function<void (llvm::json::Value)>::operator()(llvm::json::Value) /src/llvm/include/llvm/ADT/FunctionExtras.h:387:12
    #11 0x8a3e812 in clang::clangd::ClangdLSPServer::MessageHandler::onNotify(llvm::StringRef, llvm::json::Value) /src/clang-tools-extra/clangd/ClangdLSPServer.cpp:219:7
    #12 0x8d78847 in clang::clangd::(anonymous namespace)::JSONTransport::handleMessage(llvm::json::Value, clang::clangd::Transport::MessageHandler&) /src/clang-tools-extra/clangd/JSONTransport.cpp:195:18
    #13 0x8d78847 in clang::clangd::(anonymous namespace)::JSONTransport::loop(clang::clangd::Transport::MessageHandler&) /src/clang-tools-extra/clangd/JSONTransport.cpp:119:16
    #14 0x8a49859 in clang::clangd::ClangdLSPServer::run() /src/clang-tools-extra/clangd/ClangdLSPServer.cpp:1741:25
    #15 0x8893149 in clang::clangd::clangdMain(int, char**) /src/clang-tools-extra/clangd/tool/ClangdMain.cpp:1049:28
    #16 0x7f17305365cf in __libc_start_call_main (/lib64/libc.so.6+0x295cf) (BuildId: fc46bc419367003d0e4e399cbe22aade4a1ee7be)

==1958==ABORTING

Metadata

Metadata

Assignees

No one assigned

    Labels

    clangdcrashPrefer [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