microsoft / vscode-cpptools

Official repository for the Microsoft C/C++ extension for VS Code.
Other
5.5k stars 1.55k forks source link

Infinite loop in cpptools std::_Rb_tree_rebalance_for_erase tree.cc line 305 #12792

Open rafalborczuch opened 3 hours ago

rafalborczuch commented 3 hours ago

Environment

Bug Summary and Steps to Reproduce

Bug Summary: I don't have specific repro steps. After some time working on C++ workspace IntelliSense stops working. Autocompletion and code navigation doesn't work at all. C++ extension status in the bottom right corner doesn't show that processing is in-progress. image C/C++: Log Diagnostics command doesn't work as well when the cpptools process is stuck.

Top command shows single cpptools process that appears to be stuck in an infinite loop. image Profiling with the perf tool shows that CPU is spent inside the std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&) function: image image

This process never stops using 100% CPU, even after many hours. Manual killing of the cpptools process is a workaround to unblock C++ extension. However, after some time cpptools gets into the same bad state.

Attaching to the process with GDB shows that a thread is in an infinite loop at https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/src/c++98/tree.cc#L305 image Debug Console check that confirm that left child is the same as the node itself causing the infinite loop.

-exec p __y == __y._M_left
$4 = true

Not sure what is the root cause, possibly the tree gets corrupted somehow before this function is called.

Steps to reproduce: Unfortunately, I don't have specific repro steps.

Expected behavior: cpptools process should not get stuck in an infinite loop.

Configuration and Logs

c_cpp_properties.json:

{
    "configurations": [
        {
            "name": "Linux",
            "configurationProvider": "ms-vscode.cmake-tools"
        }
    ],
    "version": 4
}

C++ extension modified settings:

User:
"C_Cpp.clang_format_style": "file:/home/rafal/.clang-format"

Remote:
"C_Cpp.loggingLevel": "Debug"

Workspace:
"C_Cpp.default.compileCommands": "${workspaceFolder}/cmake_build/linux/${command:cmake.buildType}/compile_commands.json"
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools"
"C_Cpp.default.cppStandard": "c++11"
"C_Cpp.intelliSenseEngine": "default"
"C_Cpp.workspaceParsingPriority": "highest"
"C_Cpp.codeAnalysis.clangTidy.args": [
  "--extra-arg=-mno-sse2"
]
"C_Cpp.codeAnalysis.clangTidy.checks.disabled": [
  "misc-include-cleaner"
]
"C_Cpp.codeAnalysis.clangTidy.enabled": true
"C_Cpp.codeAnalysis.runAutomatically": true
"C_Cpp.loggingLevel": "Debug"

C/C++: Log Diagnostics command doesn't give any output when the cpptools process is stuck.

Last log files (no more log files are printed once the cpptools process is stuck) from C/C++ output (I can't include the whole log file as too much private data is there):

Update IntelliSense time (sec): 0.557
LSP: (received) cpptools/getDocumentSymbols: file:///path/to/fileA.cpp (id: 288)
LSP: (invoked) cpptools/getDocumentSymbols: file:///path/to/fileA.cpp (id: 288)
LSP: (received) cpptools/getFoldingRanges: file:///path/to/fileA.cpp (id: 289)
LSP: (invoked) cpptools/getFoldingRanges: file:///path/to/fileA.cpp (id: 289)
LSP: Sending response (id: 289)
LSP: (received) textDocument/didChange: file:///path/to/fileA.cpp
LSP: (invoked) textDocument/didChange: file:///path/to/fileA.cpp
LSP: (received) cpptools/didChangeTextEditorSelection
LSP: (invoked) cpptools/didChangeTextEditorSelection
LSP: (received) textDocument/documentHighlight: file:///path/to/fileA.cpp (id: 290)
LSP: (invoked) textDocument/documentHighlight: file:///path/to/fileA.cpp (id: 290)
sending 1 changes to server
LSP: $/cancelRequest (cpptools/getDocumentSymbols, id: 288)
tag parsing file: /path/to/fileA.cpp
LSP: Sending response (id: 287)
LSP: (received) textDocument/willSaveWaitUntil: file:///path/to/fileA.cpp (id: 291)
LSP: (invoked) textDocument/willSaveWaitUntil: file:///path/to/fileA.cpp (id: 291)
LSP: Sending response (id: 290)
LSP: (received) cpptools/getCodeActions: file:///path/to/fileA.cpp (id: 292)
LSP: (received) cpptools/getDocumentSymbols: file:///path/to/fileA.cpp (id: 293)
LSP: (received) cpptools/getFoldingRanges: file:///path/to/fileA.cpp (id: 294)
LSP: (received) cpptools/getDocumentSymbols: file:///path/to/fileA.cpp (id: 295)
LSP: (received) textDocument/didSave: file:///path/to/fileA.cpp
LSP: (received) cpptools/fileChanged: file:///path/to/fileA.cpp
LSP: (received) cpptools/resumeParsing
LSP: (received) cpptools/didChangeVisibleTextEditors
LSP: (received) cpptools/getCodeActions: file:///path/to/fileB.cpp (id: 296)
LSP: (received) cpptools/didChangeVisibleTextEditors
LSP: (received) cpptools/didChangeActiveEditor: file:///path/to/fileB.cpp
LSP: (received) cpptools/didChangeTextEditorSelection
LSP: (received) cpptools/resumeParsing
LSP: (received) textDocument/documentHighlight: file:///path/to/fileB.cpp (id: 297)
LSP: Message ignored due to no registered handler: $/setTrace

Other Extensions

No response

Additional context

GDB call stacks. Thread 12 (LWP 513289 "cpptools") is in the infinite loop :

Thread 18 (LWP 513677 "cpptools"):
#0  0x00007ff963bcab25 in __cp_end () from ./libc.so
#1  0x00007ff963bc7aa0 in __syscall_cp_c () from ./libc.so
#2  0x00007ff963bc7002 in __timedwait_cp () from ./libc.so
#3  0x00007ff963bc7ee0 in pthread_cond_timedwait () from ./libc.so
#4  0x00000000015d3a80 in __gthread_cond_wait (__mutex=<optimized out>, __cond=<optimized out>) at /mnt/vss/_work/1/s/src/musl-cross-make/build/local/x86_64-linux-musl/obj_gcc/x86_64-linux-musl/libstdc++-v3/include/x86_64-linux-musl/bits/gthr-default.h:865
#5  std::__condvar::wait (__m=..., this=<optimized out>) at /mnt/vss/_work/1/s/src/musl-cross-make/build/local/x86_64-linux-musl/obj_gcc/x86_64-linux-musl/libstdc++-v3/include/bits/std_mutex.h:155
#6  std::condition_variable::wait (this=<optimized out>, __lock=...) at ../../../../../src_gcc/libstdc++-v3/src/c++11/condition_variable.cc:41
#7  0x0000000000e0a5de in run_tag_parser() ()
#8  0x00000000012ceda1 in process_translation_unit(char const*, int, an_exported_template_file*) ()
#9  0x0000000000e63c49 in cfe_main(int, char**) ()
#10 0x00000000013130cd in cfe_main_exception_handler(int, char**) ()
#11 0x0000000000e63d4d in edg_main(int, char**) ()
#12 0x0000000000e0b605 in antlr_parse_routine() ()
#13 0x000000000159a7cc in msvc::thread_helper_t::thread_entry(void*) ()
#14 0x00007ff963bc85ef in start () from ./libc.so
#15 0x00007ff963bcaaf2 in __clone () from ./libc.so
#16 0x000000000159a7b0 in ?? ()
#17 0x00007ff95e381f20 in ?? ()
#18 0x0000000000000000 in ?? ()

Thread 17 (LWP 513532 "cpptools"):
#0  0x00007ff963bcab25 in __cp_end () from ./libc.so
#1  0x00007ff963bc7aa0 in __syscall_cp_c () from ./libc.so
#2  0x00007ff963bc7002 in __timedwait_cp () from ./libc.so
#3  0x00007ff963bc7ee0 in pthread_cond_timedwait () from ./libc.so
#4  0x00000000015ae91d in uv_cond_wait ()
#5  0x000000000159b9be in worker ()
#6  0x00007ff963bc85ef in start () from ./libc.so
#7  0x00007ff963bcaaf2 in __clone () from ./libc.so
#8  0x000000000159b7b0 in ?? ()
#9  0x00007ff963b5d7f0 in ?? ()
#10 0x0000000000000000 in ?? ()

Thread 16 (LWP 513531 "cpptools"):
#0  0x00007ff963bcab25 in __cp_end () from ./libc.so
#1  0x00007ff963bc7aa0 in __syscall_cp_c () from ./libc.so
#2  0x00007ff963bc7002 in __timedwait_cp () from ./libc.so
#3  0x00007ff963bc7ee0 in pthread_cond_timedwait () from ./libc.so
#4  0x00000000015ae91d in uv_cond_wait ()
#5  0x000000000159b9be in worker ()
#6  0x00007ff963bc85ef in start () from ./libc.so
#7  0x00007ff963bcaaf2 in __clone () from ./libc.so
#8  0x000000000159b7b0 in ?? ()
#9  0x00007ff963b5d7f0 in ?? ()
#10 0x0000000000000000 in ?? ()

Thread 15 (LWP 513530 "cpptools"):
#0  0x00007ff963bcab25 in __cp_end () from ./libc.so
#1  0x00007ff963bc7aa0 in __syscall_cp_c () from ./libc.so
#2  0x00007ff963bc7002 in __timedwait_cp () from ./libc.so
#3  0x00007ff963bc7ee0 in pthread_cond_timedwait () from ./libc.so
#4  0x00000000015ae91d in uv_cond_wait ()
#5  0x000000000159b9be in worker ()
#6  0x00007ff963bc85ef in start () from ./libc.so
#7  0x00007ff963bcaaf2 in __clone () from ./libc.so
#8  0x000000000159b7b0 in ?? ()
#9  0x00007ff963b5d7f0 in ?? ()
#10 0x0000000000000000 in ?? ()

Thread 14 (LWP 513529 "cpptools"):
#0  0x00007ff963bcab25 in __cp_end () from ./libc.so
#1  0x00007ff963bc7aa0 in __syscall_cp_c () from ./libc.so
#2  0x00007ff963bc7002 in __timedwait_cp () from ./libc.so
#3  0x00007ff963bc7ee0 in pthread_cond_timedwait () from ./libc.so
#4  0x00000000015ae91d in uv_cond_wait ()
#5  0x000000000159b9be in worker ()
#6  0x00007ff963bc85ef in start () from ./libc.so
#7  0x00007ff963bcaaf2 in __clone () from ./libc.so
#8  0x000000000159b7b0 in ?? ()
#9  0x00007ff963b5d7f0 in ?? ()
#10 0x0000000000000000 in ?? ()

Thread 13 (LWP 513291 "cpptools"):
#0  0x00007ff963bcab25 in __cp_end () from ./libc.so
#1  0x00007ff963bc7aa0 in __syscall_cp_c () from ./libc.so
#2  0x00007ff963bc7002 in __timedwait_cp () from ./libc.so
#3  0x00007ff963bc7ee0 in pthread_cond_timedwait () from ./libc.so
#4  0x00000000015d3a80 in __gthread_cond_wait (__mutex=<optimized out>, __cond=<optimized out>) at /mnt/vss/_work/1/s/src/musl-cross-make/build/local/x86_64-linux-musl/obj_gcc/x86_64-linux-musl/libstdc++-v3/include/x86_64-linux-musl/bits/gthr-default.h:865
#5  std::__condvar::wait (__m=..., this=<optimized out>) at /mnt/vss/_work/1/s/src/musl-cross-make/build/local/x86_64-linux-musl/obj_gcc/x86_64-linux-musl/libstdc++-v3/include/bits/std_mutex.h:155
#6  std::condition_variable::wait (this=<optimized out>, __lock=...) at ../../../../../src_gcc/libstdc++-v3/src/c++11/condition_variable.cc:41
#7  0x000000000158a1fb in msvc::thread_manager_t::do_work(unsigned int) ()
#8  0x000000000159a7cc in msvc::thread_helper_t::thread_entry(void*) ()
#9  0x00007ff963bc85ef in start () from ./libc.so
#10 0x00007ff963bcaaf2 in __clone () from ./libc.so
#11 0x000000000159a7b0 in ?? ()
#12 0x00007ff95d096cd0 in ?? ()
#13 0x0000000000000000 in ?? ()

Thread 12 (LWP 513289 "cpptools"):
#0  std::_Rb_tree_rebalance_for_erase (__z=0x7ff9627ea3e8, __header=...) at ../../../../../src_gcc/libstdc++-v3/src/c++98/tree.cc:305
#1  0x0000000000ad1e10 in code_analysis::process_async::cleanup() const ()
#2  0x000000000081868b in code_analysis::process_async::main() ()
#3  0x0000000000aca5a7 in code_analysis::process_async_work(unsigned int, file_uri const&, std::optional<file_uri>&&, std::shared_ptr<workspace_folder_context> const&, std::shared_ptr<intellisense_client_config> const&) ()
#4  0x000000000158a306 in msvc::thread_manager_t::do_work(unsigned int) ()
#5  0x000000000159a7cc in msvc::thread_helper_t::thread_entry(void*) ()
#6  0x00007ff963bc85ef in start () from ./libc.so
#7  0x00007ff963bcaaf2 in __clone () from ./libc.so
#8  0x000000000159a7b0 in ?? ()
#9  0x00007ff95d096c10 in ?? ()
#10 0x0000000000000000 in ?? ()

Thread 11 (LWP 513286 "cpptools"):
#0  0x00007ff963bc7a7f in __syscall_cp_c () from ./libc.so
#1  0x00007ff963bc7002 in __timedwait_cp () from ./libc.so
#2  0x00007ff963bc70ad in __timedwait () from ./libc.so
#3  0x00007ff963bc9486 in pthread_mutex_timedlock () from ./libc.so
#4  0x0000000000ad1be1 in code_analysis::process_async::cleanup() const ()
#5  0x000000000081868b in code_analysis::process_async::main() ()
#6  0x0000000000aca5a7 in code_analysis::process_async_work(unsigned int, file_uri const&, std::optional<file_uri>&&, std::shared_ptr<workspace_folder_context> const&, std::shared_ptr<intellisense_client_config> const&) ()
#7  0x000000000158a306 in msvc::thread_manager_t::do_work(unsigned int) ()
#8  0x000000000159a7cc in msvc::thread_helper_t::thread_entry(void*) ()
#9  0x00007ff963bc85ef in start () from ./libc.so
#10 0x00007ff963bcaaf2 in __clone () from ./libc.so
#11 0x000000000159a7b0 in ?? ()
#12 0x00007ff95e11aa60 in ?? ()
#13 0x0000000000000000 in ?? ()

Thread 10 (LWP 513284 "cpptools"):
#0  0x00007ff963bcab25 in __cp_end () from ./libc.so
#1  0x00007ff963bc7aa0 in __syscall_cp_c () from ./libc.so
#2  0x00007ff963bc7002 in __timedwait_cp () from ./libc.so
#3  0x00007ff963bc7ee0 in pthread_cond_timedwait () from ./libc.so
#4  0x00000000015d3a80 in __gthread_cond_wait (__mutex=<optimized out>, __cond=<optimized out>) at /mnt/vss/_work/1/s/src/musl-cross-make/build/local/x86_64-linux-musl/obj_gcc/x86_64-linux-musl/libstdc++-v3/include/x86_64-linux-musl/bits/gthr-default.h:865
#5  std::__condvar::wait (__m=..., this=<optimized out>) at /mnt/vss/_work/1/s/src/musl-cross-make/build/local/x86_64-linux-musl/obj_gcc/x86_64-linux-musl/libstdc++-v3/include/bits/std_mutex.h:155
#6  std::condition_variable::wait (this=<optimized out>, __lock=...) at ../../../../../src_gcc/libstdc++-v3/src/c++11/condition_variable.cc:41
#7  0x000000000158a1fb in msvc::thread_manager_t::do_work(unsigned int) ()
#8  0x000000000159a7cc in msvc::thread_helper_t::thread_entry(void*) ()
#9  0x00007ff963bc85ef in start () from ./libc.so
#10 0x00007ff963bcaaf2 in __clone () from ./libc.so
#11 0x000000000159a7b0 in ?? ()
#12 0x00007ff95d096dc0 in ?? ()
#13 0x0000000000000000 in ?? ()

Thread 9 (LWP 512972 "cpptools"):
#0  0x00007ff963bcab25 in __cp_end () from ./libc.so
#1  0x00007ff963bc7aa0 in __syscall_cp_c () from ./libc.so
#2  0x00007ff963bc7002 in __timedwait_cp () from ./libc.so
#3  0x00007ff963bc7ee0 in pthread_cond_timedwait () from ./libc.so
#4  0x000000000158af64 in msvc::thread_t::invoker_t<msvc::thread_manager_t::internal_initialize()::{lambda()#1}>::invoke() ()
#5  0x000000000159a7cc in msvc::thread_helper_t::thread_entry(void*) ()
#6  0x00007ff963bc85ef in start () from ./libc.so
#7  0x00007ff963bcaaf2 in __clone () from ./libc.so
#8  0x000000000159a7b0 in ?? ()
#9  0x00007ff96392a670 in ?? ()
#10 0x0000000000000000 in ?? ()

Thread 8 (LWP 512971 "cpptools"):
#0  0x00007ff963bc7a7f in __syscall_cp_c () from ./libc.so
#1  0x00007ff963bc7002 in __timedwait_cp () from ./libc.so
#2  0x00007ff963bc70ad in __timedwait () from ./libc.so
#3  0x00007ff963bc9486 in pthread_mutex_timedlock () from ./libc.so
#4  0x0000000000ac7940 in code_analysis::cancel_until_save_and_delay(file_uri, bool, std::function<void ()>&&) ()
#5  0x000000000092e64b in cpptools_context::textDocument_willSaveWaitUntil(WillSaveTextDocumentParams&&, std::function<void ()>&&) const ()
#6  0x000000000092eb0b in std::_Function_handler<void (lsp_manager::client_message&&), lsp_manager::register_request<WillSaveTextDocumentParams, void, cpptools_context::cpptools_context()::{lambda(lsp_request<WillSaveTextDocumentParams, void>&&)#17}>(std::basic_string_view<char, std::char_traits<char> >, cpptools_context::cpptools_context()::{lambda(lsp_request<WillSaveTextDocumentParams, void>&&)#17}&&, int, lsp_handler_options_e)::{lambda(lsp_manager::client_message&&)#1}>::_M_invoke(std::_Any_data const&, lsp_manager::client_message&&) ()
#7  0x0000000000a043f5 in msvc::thread_manager_t::queue_item<lsp_manager::deploy_task(msvc::locked_object<lsp_manager::state, std::recursive_mutex, std::unique_lock> const&, int, bool)::{lambda()#1}>::operator()() ()
#8  0x000000000158a306 in msvc::thread_manager_t::do_work(unsigned int) ()
#9  0x000000000159a7cc in msvc::thread_helper_t::thread_entry(void*) ()
#10 0x00007ff963bc85ef in start () from ./libc.so
#11 0x00007ff963bcaaf2 in __clone () from ./libc.so
#12 0x000000000159a7b0 in ?? ()
#13 0x00007ff96392ab50 in ?? ()
#14 0x0000000000000000 in ?? ()

Thread 7 (LWP 512970 "cpptools"):
#0  0x00007ff963bcab25 in __cp_end () from ./libc.so
#1  0x00007ff963bc7aa0 in __syscall_cp_c () from ./libc.so
#2  0x00007ff963bc7002 in __timedwait_cp () from ./libc.so
#3  0x00007ff963bc7ee0 in pthread_cond_timedwait () from ./libc.so
#4  0x00000000015d3a80 in __gthread_cond_wait (__mutex=<optimized out>, __cond=<optimized out>) at /mnt/vss/_work/1/s/src/musl-cross-make/build/local/x86_64-linux-musl/obj_gcc/x86_64-linux-musl/libstdc++-v3/include/x86_64-linux-musl/bits/gthr-default.h:865
#5  std::__condvar::wait (__m=..., this=<optimized out>) at /mnt/vss/_work/1/s/src/musl-cross-make/build/local/x86_64-linux-musl/obj_gcc/x86_64-linux-musl/libstdc++-v3/include/bits/std_mutex.h:155
#6  std::condition_variable::wait (this=<optimized out>, __lock=...) at ../../../../../src_gcc/libstdc++-v3/src/c++11/condition_variable.cc:41
#7  0x000000000158a1fb in msvc::thread_manager_t::do_work(unsigned int) ()
#8  0x000000000159a7cc in msvc::thread_helper_t::thread_entry(void*) ()
#9  0x00007ff963bc85ef in start () from ./libc.so
#10 0x00007ff963bcaaf2 in __clone () from ./libc.so
#11 0x000000000159a7b0 in ?? ()
#12 0x00007ff96392aaf0 in ?? ()
#13 0x0000000000000000 in ?? ()

Thread 6 (LWP 512968 "cpptools"):
#0  0x00007ff963bc7a7f in __syscall_cp_c () from ./libc.so
#1  0x00007ff963bc7002 in __timedwait_cp () from ./libc.so
#2  0x00007ff963bc70ad in __timedwait () from ./libc.so
#3  0x00007ff963bc9486 in pthread_mutex_timedlock () from ./libc.so
#4  0x0000000000ad1be1 in code_analysis::process_async::cleanup() const ()
#5  0x000000000081868b in code_analysis::process_async::main() ()
#6  0x0000000000aca5a7 in code_analysis::process_async_work(unsigned int, file_uri const&, std::optional<file_uri>&&, std::shared_ptr<workspace_folder_context> const&, std::shared_ptr<intellisense_client_config> const&) ()
#7  0x000000000158a306 in msvc::thread_manager_t::do_work(unsigned int) ()
#8  0x000000000159a7cc in msvc::thread_helper_t::thread_entry(void*) ()
#9  0x00007ff963bc85ef in start () from ./libc.so
#10 0x00007ff963bcaaf2 in __clone () from ./libc.so
#11 0x000000000159a7b0 in ?? ()
#12 0x00007ff96392aa30 in ?? ()
#13 0x0000000000000000 in ?? ()

Thread 5 (LWP 512964 "cpptools"):
#0  0x00007ff963bc7a7f in __syscall_cp_c () from ./libc.so
#1  0x00007ff963bc7002 in __timedwait_cp () from ./libc.so
#2  0x00007ff963bc70ad in __timedwait () from ./libc.so
#3  0x00007ff963bc9486 in pthread_mutex_timedlock () from ./libc.so
#4  0x0000000000ad236a in code_analysis::work_scheduler::process_input() ()
#5  0x0000000000adb843 in code_analysis::work_scheduler::process_work() ()
#6  0x0000000000817aa3 in code_analysis::work_scheduler::main() ()
#7  0x0000000000ac4af0 in msvc::thread_manager_t::queue_item<code_analysis::run(std::vector<file_uri, std::allocator<file_uri> >&&, std::shared_ptr<workspace_folder_context> const&, bool, bool, bool)::{lambda()#1}::operator()() const::{lambda()#1}>::operator()() ()
#8  0x000000000158a306 in msvc::thread_manager_t::do_work(unsigned int) ()
#9  0x000000000159a7cc in msvc::thread_helper_t::thread_entry(void*) ()
#10 0x00007ff963bc85ef in start () from ./libc.so
#11 0x00007ff963bcaaf2 in __clone () from ./libc.so
#12 0x000000000159a7b0 in ?? ()
#13 0x00007ff96392e2a0 in ?? ()
#14 0x0000000000000000 in ?? ()

Thread 4 (LWP 512963 "cpptools"):
#0  0x00007ff963bcab25 in __cp_end () from ./libc.so
#1  0x00007ff963bc7aa0 in __syscall_cp_c () from ./libc.so
#2  0x00007ff963bc7002 in __timedwait_cp () from ./libc.so
#3  0x00007ff963bc7ee0 in pthread_cond_timedwait () from ./libc.so
#4  0x000000000158d862 in msvc::thread_t::invoker_t<msvc::timer_queue_t::timer_queue_t(std::function<void (std::function<void ()>&&)>&&)::{lambda()#1}>::invoke() ()
#5  0x000000000159a7cc in msvc::thread_helper_t::thread_entry(void*) ()
#6  0x00007ff963bc85ef in start () from ./libc.so
#7  0x00007ff963bcaaf2 in __clone () from ./libc.so
#8  0x000000000159a7b0 in ?? ()
#9  0x0000000001ea8dc0 in ?? ()
#10 0x0000000000000000 in ?? ()

Thread 3 (LWP 512962 "cpptools"):
#0  0x00007ff963bcab25 in __cp_end () from ./libc.so
#1  0x00007ff963bc7aa0 in __syscall_cp_c () from ./libc.so
#2  0x00007ff963b948de in epoll_pwait () from ./libc.so
#3  0x00000000015a4718 in uv.io_poll ()
#4  0x000000000159fdbf in uv_run ()
#5  0x00000000015592f3 in msvc::loop_t::run_loop() ()
#6  0x00000000015598a8 in msvc::thread_t::invoker_t<void (*)(std::shared_ptr<msvc::loop_t>), std::shared_ptr<msvc::loop_t>&>::invoke() ()
#7  0x000000000159a7cc in msvc::thread_helper_t::thread_entry(void*) ()
#8  0x00007ff963bc85ef in start () from ./libc.so
#9  0x00007ff963bcaaf2 in __clone () from ./libc.so
#10 0x000000000159a7b0 in ?? ()
#11 0x00007ff963b6b290 in ?? ()
#12 0x0000000000000000 in ?? ()

Thread 2 (LWP 512961 "iou-sqp-532608"):
#0  0x0000000000000000 in ?? ()
Backtrace stopped: Cannot access memory at address 0x0

Thread 1 (LWP 512959 "cpptools"):
#0  0x00007ff963bbdc01 in __stdio_read () from ./libc.so
#1  0x00007ff963bbde83 in __uflow () from ./libc.so
#2  0x00007ff963bbfd43 in locking_getc () from ./libc.so
#3  0x0000000001603e81 in __gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char> >::syncgetc (this=0x1ea5580 <__gnu_internal::buf_cin_sync>) at /mnt/vss/_work/1/s/src/musl-cross-make/build/local/x86_64-linux-musl/obj_gcc/x86_64-linux-musl/libstdc++-v3/include/ext/stdio_sync_filebuf.h:224
#4  __gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char> >::underflow (this=0x1ea5580 <__gnu_internal::buf_cin_sync>) at /mnt/vss/_work/1/s/src/musl-cross-make/build/local/x86_64-linux-musl/obj_gcc/x86_64-linux-musl/libstdc++-v3/include/ext/stdio_sync_filebuf.h:132
#5  0x00000000015cbcea in std::basic_streambuf<char, std::char_traits<char> >::sgetc (this=0x1ea5580 <__gnu_internal::buf_cin_sync>) at /mnt/vss/_work/1/s/src/musl-cross-make/build/local/x86_64-linux-musl/obj_gcc/x86_64-linux-musl/libstdc++-v3/include/streambuf:343
#6  std::basic_streambuf<char, std::char_traits<char> >::sgetc (this=0x1ea5580 <__gnu_internal::buf_cin_sync>) at /mnt/vss/_work/1/s/src/musl-cross-make/build/local/x86_64-linux-musl/obj_gcc/x86_64-linux-musl/libstdc++-v3/include/streambuf:343
#7  std::getline<char, std::char_traits<char>, std::allocator<char> > (__in=..., __str=..., __delim=10 '\n') at ../../../../../src_gcc/libstdc++-v3/src/c++98/istream-string.cc:145
#8  0x00000000009ffa48 in lsp_manager::read_message(lsp_manager::client_message&) ()
#9  0x0000000000a05c9f in lsp_manager::process_messages(std::function<void ()> const&, std::function<void (int)> const&) ()
#10 0x0000000000920933 in cpptools_context::run() ()
#11 0x000000000081506e in main ()
sean-mcmanus commented 2 hours ago

@rafalborczuch You may want to try 1.22.6+ (pre-release) to see if it's fixed there. Or as a workaround, set C_Cpp.codeAnalysis.clangTidy.enabled to false.