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

    <tr>
        <th>Summary</th>
        <td>
            [clangd] Crash when hover on the return value of an incomplete function call
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    Open the following C file in an editor with clangd enabled.
```c
res = FOO(bar,baz,,);
```

Hovering on `res` leads to a crash. The stack dump is as follows

```
    #0 0x6afe8d3 in (anonymous namespace)::StmtPrinter::VisitCharacterLiteral(clang::CharacterLiteral*) /src/clang/lib/AST/StmtPrinter.cpp:1399:62
    #1 0x6afe8d3 in clang::StmtVisitorBase<std::add_pointer, (anonymous namespace)::StmtPrinter, void>::Visit(clang::Stmt*) /src/build/tools/clang/include/clang/AST/StmtNodes.inc:524:1
    #2 0x6b4b8e4 in (anonymous namespace)::StmtPrinter::Visit(clang::Stmt*) /src/clang/lib/AST/StmtPrinter.cpp:150:38
    #3 0x6b4b8e4 in (anonymous namespace)::StmtPrinter::PrintExpr(clang::Expr*) /src/clang/lib/AST/StmtPrinter.cpp:136:9
    #4 0x6b4b8e4 in (anonymous namespace)::StmtPrinter::PrintCallArgs(clang::CallExpr*) /src/clang/lib/AST/StmtPrinter.cpp:1700:5
    #5 0x6b1a57e in (anonymous namespace)::StmtPrinter::VisitCallExpr(clang::CallExpr*) /src/clang/lib/AST/StmtPrinter.cpp:1707:3
    #6 0x6b03f8c in (anonymous namespace)::StmtPrinter::Visit(clang::Stmt*) /src/clang/lib/AST/StmtPrinter.cpp:150:38
    #7 0x6b03f8c in (anonymous namespace)::StmtPrinter::PrintExpr(clang::Expr*) /src/clang/lib/AST/StmtPrinter.cpp:136:9
    #8 0x6b03f8c in (anonymous namespace)::StmtPrinter::VisitRecoveryExpr(clang::RecoveryExpr*) /src/clang/lib/AST/StmtPrinter.cpp:2882:5
    #9 0x6afd7e9 in (anonymous namespace)::StmtPrinter::Visit(clang::Stmt*) /src/clang/lib/AST/StmtPrinter.cpp:150:38
    #10 0x6afd7e9 in clang::Stmt::printPretty(llvm::raw_ostream&, clang::PrinterHelper*, clang::PrintingPolicy const&, unsigned int, llvm::StringRef, clang::ASTContext const*) const /src/clang/lib/AST/StmtPrinter.cpp:2912:5
 #11 0x61f8e48 in (anonymous namespace)::DeclPrinter::VisitVarDecl(clang::VarDecl*) /src/clang/lib/AST/DeclPrinter.cpp:997:13
    #12 0x62075ab in clang::Decl::print(llvm::raw_ostream&, clang::PrintingPolicy const&, unsigned int, bool) const /src/clang/lib/AST/DeclPrinter.cpp:139:11
    #13 0x8ccd110 in clang::clangd::(anonymous namespace)::printDefinition[abi:cxx11](clang::Decl const*, clang::PrintingPolicy, clang::syntax::TokenBuffer const&) /src/clang-tools-extra/clangd/Hover.cpp:152:6
    #14 0x8ccd110 in clang::clangd::(anonymous namespace)::getHoverContents(clang::NamedDecl const*, clang::PrintingPolicy const&, clang::clangd::SymbolIndex const*, clang::syntax::TokenBuffer const&) /src/clang-tools-extra/clangd/Hover.cpp:674:19
    #15 0x8ccd110 in clang::clangd::getHover(clang::clangd::ParsedAST&, clang::clangd::Position, clang::format::FormatStyle const&, clang::clangd::SymbolIndex const*) /src/clang-tools-extra/clangd/Hover.cpp:1367:14
    #16 0x8a5a6b3 in clang::clangd::ClangdServer::findHover(llvm::StringRef, clang::clangd::Position, llvm::unique_function<void (llvm::Expected<std::optional<clang::clangd::HoverInfo>>)>)::$_0::operator()(llvm::Expected<clang::clangd::InputsAndAST>) /src/clang-tools-extra/clangd/ClangdServer.cpp:841:8
    #17 0x8a5a6b3 in void llvm::detail::UniqueFunctionBase<void, llvm::Expected<clang::clangd::InputsAndAST>>::CallImpl<clang::clangd::ClangdServer::findHover(llvm::StringRef, clang::clangd::Position, llvm::unique_function<void (llvm::Expected<std::optional<clang::clangd::HoverInfo>>)>)::$_0>(void*, llvm::Expected<clang::clangd::InputsAndAST>&) /src/llvm/include/llvm/ADT/FunctionExtras.h:222:12
    #18 0x8f98ef2 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
    #19 0x8f98ef2 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
    #20 0x8f98ef2 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
    #21 0x8fa6e9f in llvm::function_ref<void ()>::operator()() const /src/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
    #22 0x8fa6e9f in clang::clangd::(anonymous namespace)::ASTWorker::runTask(llvm::StringRef, llvm::function_ref<void ()>) /src/clang-tools-extra/clangd/TUScheduler.cpp:1328:3
    #23 0x8fb0e10 in clang::clangd::(anonymous namespace)::ASTWorker::run() /src/clang-tools-extra/clangd/TUScheduler.cpp:1462:7
    #24 0x8fb0e10 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
    #25 0x8fb0e10 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
    #26 0x92faab4 in llvm::unique_function<void ()>::operator()() /src/llvm/include/llvm/ADT/FunctionExtras.h:387:12
    #27 0x92faab4 in clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>)::$_1::operator()() /src/clang-tools-extra/clangd/support/Threading.cpp:101:5
    #28 0x92faab4 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
    #29 0x92faab4 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
 #30 0x92faab4 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
 #31 0x92faab4 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
 #32 0x92faab4 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
 #33 0x92faab4 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
    #34 0x92faab4 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
    #35 0x58765dc in asan_thread_start(void*) crtstuff.c
    #36 0x7f876b9bd7e1 in start_thread (/lib64/libc.so.6+0x897e1) (BuildId: 7a40a22c9a82854f3d66767232ae364a99174860)
    #37 0x7f876ba427ff in __GI___clone3 (/lib64/libc.so.6+0x10e7ff) (BuildId: 7a40a22c9a82854f3d66767232ae364a99174860)

```

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsW1lv47YW_jXMCxFDovaHPDhO3AYoOkGdto8GJR3ZvKFJlaQS-_76C1JeJGVzlmkzvcEEGUWUyO985zsLZZlqzRYC4AxF5yi6OKGNWUp1tgShNsvC_jvJZbk5-1aDwGYJuJKcy3smFniCK8YBM4GpwFAyIxW-Z2aJC07FosQgaM6hHCFvjGKv_SmQN1agMQou8PTbN0TSnCpEJjn9LyIT95Oh4Lx7iz32xj_LO1B2VSkwij0FGsUe5kBLjY3EFBeK6uUI3ywBa0OLW1w2qxozjaneYtbtTN2JMcYYkcDD3jqmFaRlYM1BJKVCis1KNhoLugJd0wIcsjEKxjOzMteKCQOqPfEH08xMllTRwoD6hRlQlCOSOh7aSx6OjhHJMCJTrQpEpu2lZMpZjsh0PLtBZNpZZ1TUNQrGfpBZDDE5QPf70DtL2tsdMqnOqQYUTLQp2yFalvNathaQyWvsJRN8J1mJgsuO6X1T7eVD8_KG8RKRqZGS6465TBS8KaFz5mD6r7IEPWKiQME4IqE1_2A2sWbnYZ5C-GaPvQz7SK9EHgrGQXpAF7wPnfvjcl2rPsL2zNt0E6NgnB0Ahh8AcEI5H6uFHgidcv4OoIlnuYwOSCOH1KdRAm8PzT2mD0WaWK8fkMYOqRdUafEJJZm8D933l2T6AfT9BoUtE5uHQPsjbwFM0pT0pZm1qbdMIPuEDve9PrzhMu6otpNcKzBmg0jK-d2qPa_o_Vxqo4CuEIlt1u_cvl35Z-A1tGQ-HGZicS05Kza4kEKb7SSNcM1GiZkw9u_DgjNji_tvUA0mG89uJlIYWJvdRI4dd_xqD2b-3oOWIFc6_SqFMD3CfxdQ8If--4MqO9B34_7ky57szLpFmWWJC4-OJ12xI14S0XzgSbfMwZOv9OFxTsql5Edy_tAaP7D0-Z3K7dvimBZF6fvewJq2b2yPX_CGM_cCKiaYYVKg6JzmzE6xXvs-ii76DrG4Ovp5honBoN4IQ9ft8Y28BXHeVBWoDl9D_566FucU1kbR3Tnb-bj-dR-sVodxh5PwIzhZgHGruIARZlCYf6UrKI8noieJJ_DMNqtc8itRwvqpSb8PgXHi2sFO9fCjoxjcUdSnpnvFNVUaSifn50y_lroVXv-SSqoV3ebWqTuemQ2Ht5P5JnkFsUshYYce25ykNKJxPtwmdDFM3PEM1N0uyVVMlDvGXs7WTzF0uLMR7K8G5lUjCjcYTOx2Avdmv1zXUBgouzsWWdvLKUfB5In1HMorUUm3N7l0UXG5jw1Ewrm3mwoUNdJaZIefWPmJVa5E3Rg9Fk4hbv4jHdSlduunNPTt746Xkr6XHDUHdCUYyrbp_nfH43RL43Z_53ZmPbpfb9BuY2e746tV_Qzh_3qxXCKStpSO38vqING5qbq73-2J8YWtojuvXloN6dHSti7EVgy_u--3_XJaZSlUxGrlzawdLfS9NL5bAL2aliBNhrRkfVreVknHs5s_pbrd6Vo14k9mlq4oPCXsv4f_pyPo5vdZsYSy4TvQ49nN2AG4EneUs5K28XVEPjw-qXUW3dUezw_6uyTi9T3ypqR2fFb68uwjyetjUw_xnUdpDFnVTz07ZuYKqg47zyaPR7YWz2Oc3fyyg0l5B2icDXGSPs6PUswN1bfHyOV5Nt4TZAFJ-8-eiNtUVbkH79lAPDT1vdkgjK14kg7Q8DsALRRQA69uOn7iMqd8Ilc14y6GLqihOdVHteuPReWEFkt45W0_Ay1tK-Kkro6YwW6pCivB3xohHnv-0ttUwIrWS6lei-qb66D0MUTYDRMTC5uZc1rc6rbXOa7KPPZI4Xh1pSRGwTjsRnzUV9enqjVfKv3cKv2eFdNuvzNSUZqHxzbrLxbNj2ybSdIHeKRXd2XCne8p--aeib5CX2Fz1zH-u5tU3dS1VMamkKUCWjKxODSrg1417dNAGyOHScS4SbaxCQIUK9p5r5Vcb7rbUNPUHJ7OHv8MmZdDoe9GE05XeUkRSWxaa4x0S7nVDn-NRqP9LQOXfC47bWm4fNGQYxvP2V5CrfddFIXB4Mk2yR5Rz14N8zkTd_IW5qytKbuHNV_yeiCv48vK36qlh66UZnl4J-LLiX0nxq_rEP4uV7Z1Q9Y2mtUSkemiKNrSAebUD-xZKe1go9X-461FYdPDOo3ncXiqoFxSc8qZaNaITN091ubhr87LLYicu5_24pwZ7catiNq9q79_YI9I4N5H6iSSh8JToBtuUDBpaW_pt8TvOgazqeHhfTt6vpT6A6SbF0rX5xNxFvdE7PdFXELBrSr3lmVdfdK65ptuafzS6FCjn93Kdgav4Y_J98cAv0fJhIEFqLmGvxoQhQW8fy2CS7HoWvrPh-KW0zEJPNILQXJ8CLoA_Iq9Hzf2ftCg-0zR4z66OkRP0I-ef3lkvHUXPHiE4l4tHrCGyPgJ4v4fGYuiAWMR9tZRmsRR6d58pZqKeXv9XBtqb-8uWiijTVNVo6IzRYy9dVKlSZxneZmA3-4aqDLbiVqrbPjEYft_MdJyFCNy7q3TLAG_tSc9bxgvryzPOKGhRwkpMpqSNAqroIzjJE5IQCgEcUizzE_CNPYsTwckyR4JDUlSuQ_e5vOfrubzecGlgOBZKL4HSVW9F8vgSx4n5VlQZkFGT-DMT8Iw9ogfpSfLs4CkPnhJWGVBQv0grMLIC_wiTSOoPBLHJ-yMeCTyQj_0gpAEySjLwrgqSBDRPAGfhij0YEUZH1mHj6RanDCtGzjzgyhK4xNOc-DafbWGEAH32I0iQlB0caLO7E2nebPQKPQ400YfpjHMcPednK3uows8UVQv8f0SBF7KO1BYtl_IUWAaJfAd5Q1gWWEqMBOFXNUcDOCdvHFBOT9pFD9bGlNrJ-upzaXMLJt8VMjVQbYOV63kf6Cw2nWgtUuXzqq7M_K_AAAA__9Y-NAk">