Open
Description
Create a head file main.h
with deep nested braces (>= 6000 level), and open it with a code editor with clangd enabled.
#ifndef __riscv_vlsseg4e16_v_bf16mf4x4_tu
#define PUBLIC_H
#include "private.h"void pub() {...{
return (v128_t)(-(__f32x4)__a);
}...}
#endif
Select all the code and format it. Clangd will crash when handling textDocument/rangeFormatting
, with the following stack pattern.
#5 0x000000000facca5f clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3182:0
#6 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::getCurrentPrecedence() /src/clang/lib/Format/TokenAnnotator.cpp:3329:9
#7 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3228:31
#8 0x000000000fad05f0 clang::format::(anonymous namespace)::ExpressionParser::parseConditionalExpr() /src/clang/lib/Format/TokenAnnotator.cpp:3419:10
#9 0x000000000fad05f0 clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3196:7
#10 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::getCurrentPrecedence() /src/clang/lib/Format/TokenAnnotator.cpp:3329:9
#11 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3228:31
#12 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::getCurrentPrecedence() /src/clang/lib/Format/TokenAnnotator.cpp:3329:9
#13 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3228:31
#14 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::getCurrentPrecedence() /src/clang/lib/Format/TokenAnnotator.cpp:3329:9
#15 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3228:31
#16 0x000000000facf4cf clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3278:16
#17 0x000000000fad02c0 clang::format::(anonymous namespace)::ExpressionParser::parseUnaryOperator() /src/clang/lib/Format/TokenAnnotator.cpp:0:5
#18 0x000000000fad02c0 clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3203:7
#19 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::getCurrentPrecedence() /src/clang/lib/Format/TokenAnnotator.cpp:3329:9
#20 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3228:31
#21 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::getCurrentPrecedence() /src/clang/lib/Format/TokenAnnotator.cpp:3329:9
#22 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3228:31
#23 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::getCurrentPrecedence() /src/clang/lib/Format/TokenAnnotator.cpp:3329:9
#24 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3228:31
#25 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::getCurrentPrecedence() /src/clang/lib/Format/TokenAnnotator.cpp:3329:9
#26 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3228:31
#27 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::getCurrentPrecedence() /src/clang/lib/Format/TokenAnnotator.cpp:3329:9
#28 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3228:31
#29 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::getCurrentPrecedence() /src/clang/lib/Format/TokenAnnotator.cpp:3329:9
#30 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3228:31
#31 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::getCurrentPrecedence() /src/clang/lib/Format/TokenAnnotator.cpp:3329:9
#32 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3228:31
#33 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::getCurrentPrecedence() /src/clang/lib/Format/TokenAnnotator.cpp:3329:9
#34 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3228:31
#35 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::getCurrentPrecedence() /src/clang/lib/Format/TokenAnnotator.cpp:3329:9
#36 0x000000000face575 clang::format::(anonymous namespace)::ExpressionParser::parse(int) /src/clang/lib/Format/TokenAnnotator.cpp:3228:31
...
Thread T132 created by T0 here:
#0 0x585fd95 in pthread_create (/src/build/bin/clangd+0x585fd95) (BuildId: c3ce5beed26c9a8a)
#1 0x5dfe568 in llvm::llvm_execute_on_thread_impl(void* (*)(void*), void*, std::optional<unsigned int>) /src/llvm/lib/Support/Unix/Threading.inc:96:17
#2 0x92fa751 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 0x92fa751 in clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&, llvm::unique_function<void ()>) /src/clang-tools-extra/clangd/support/Threading.cpp:107:16
#4 0x8fc1cba in clang::clangd::TUScheduler::runWithSemaphore(llvm::StringRef, llvm::StringRef, llvm::unique_function<void ()>, clang::clangd::Semaphore&) /src/clang-tools-extra/clangd/TUScheduler.cpp:1733:18
#5 0x8fc286f in clang::clangd::TUScheduler::runQuick(llvm::StringRef, llvm::StringRef, llvm::unique_function<void ()>) /src/clang-tools-extra/clangd/TUScheduler.cpp:1719:3
#6 0x8a8f6a0 in clang::clangd::ClangdServer::formatFile(llvm::StringRef, std::optional<clang::clangd::Range>, llvm::unique_function<void (llvm::Expected<clang::tooling::Replacements>)>) /src/clang-tools-extra/clangd/ClangdServer.cpp:550:18
#7 0x89cad41 in clang::clangd::ClangdLSPServer::onDocumentRangeFormatting(clang::clangd::DocumentRangeFormattingParams const&, llvm::unique_function<void (llvm::Expected<std::vector<clang::clangd::TextEdit, std::allocator<clang::clangd::TextEdit>>>)>) /src/clang-tools-extra/clangd/ClangdLSPServer.cpp:957:11
#8 0x8a365e3 in void clang::clangd::LSPBinder::method<clang::clangd::DocumentRangeFormattingParams, std::vector<clang::clangd::TextEdit, std::allocator<clang::clangd::TextEdit>>, clang::clangd::ClangdLSPServer>(llvm::StringLiteral, clang::clangd::ClangdLSPServer*, void (clang::clangd::ClangdLSPServer::*)(clang::clangd::DocumentRangeFormattingParams const&, llvm::unique_function<void (llvm::Expected<std::vector<clang::clangd::TextEdit, std::allocator<clang::clangd::TextEdit>>>)>))::'lambda'(llvm::json::Value, llvm::unique_function<void (llvm::Expected<llvm::json::Value>)>)::operator()(llvm::json::Value, llvm::unique_function<void (llvm::Expected<llvm::json::Value>)>) const /src/clang-tools-extra/clangd/LSPBinder.h:141:5
#9 0x8a36175 in void llvm::detail::UniqueFunctionBase<void, llvm::json::Value, llvm::unique_function<void (llvm::Expected<llvm::json::Value>)>>::CallImpl<void clang::clangd::LSPBinder::method<clang::clangd::DocumentRangeFormattingParams, std::vector<clang::clangd::TextEdit, std::allocator<clang::clangd::TextEdit>>, clang::clangd::ClangdLSPServer>(llvm::StringLiteral, clang::clangd::ClangdLSPServer*, void (clang::clangd::ClangdLSPServer::*)(clang::clangd::DocumentRangeFormattingParams const&, llvm::unique_function<void (llvm::Expected<std::vector<clang::clangd::TextEdit, std::allocator<clang::clangd::TextEdit>>>)>))::'lambda'(llvm::json::Value, llvm::unique_function<void (llvm::Expected<llvm::json::Value>)>)>(void*, llvm::json::Value&, llvm::unique_function<void (llvm::Expected<llvm::json::Value>)>&) /src/llvm/include/llvm/ADT/FunctionExtras.h:222:12
#10 0x8a3e190 in llvm::unique_function<void (llvm::json::Value, llvm::unique_function<void (llvm::Expected<llvm::json::Value>)>)>::operator()(llvm::json::Value, llvm::unique_function<void (llvm::Expected<llvm::json::Value>)>) /src/llvm/include/llvm/ADT/FunctionExtras.h:387:12
#11 0x8a3e190 in clang::clangd::ClangdLSPServer::MessageHandler::onCall(llvm::StringRef, llvm::json::Value, llvm::json::Value) /src/clang-tools-extra/clangd/ClangdLSPServer.cpp:243:7
#12 0x8d76b3c in clang::clangd::(anonymous namespace)::JSONTransport::handleMessage(llvm::json::Value, clang::clangd::Transport::MessageHandler&) /src/clang-tools-extra/clangd/JSONTransport.cpp:194:20
#13 0x8d76b3c in clang::clangd::(anonymous namespace)::JSONTransport::loop(clang::clangd::Transport::MessageHandler&) /src/clang-tools-extra/clangd/JSONTransport.cpp:119:16
#14 0x8a47cd9 in clang::clangd::ClangdLSPServer::run() /src/clang-tools-extra/clangd/ClangdLSPServer.cpp:1741:25
#15 0x88915c9 in clang::clangd::clangdMain(int, char**) /src/clang-tools-extra/clangd/tool/ClangdMain.cpp:1049:28
#16 0x7f4f29f5f5cf in __libc_start_call_main (/lib64/libc.so.6+0x295cf) (BuildId: 7a40a22c9a82854f3d66767232ae364a99174860)