Skip to content

[clang-format] clang-format fail on Assertion Left.isNot(tok::l_square)' failed. #199010

@hongtaihu

Description

@hongtaihu

This was originally found while running clang-format through clangd's textDocument/formatting path over LLVM test files, but it reproduces directly with clang-format.
version:clang23.0.0
Source code

[[[a]]
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
Stack dump:
0.      Program arguments: tmp/build-assert-clangd-main-20260506/bin/clang-format --style=LLVM tmp/format_reduce/TokenAnnotator_6567/repro.ll
 #0 0x000058a3f775e812 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) <REPO_ROOT>/tmp/llvm-project-main-20260504/llvm/lib/Support/Unix/Signals.inc:884:3
 #1 0x000058a3f775b57c llvm::sys::RunSignalHandlers() <REPO_ROOT>/tmp/llvm-project-main-20260504/llvm/lib/Support/Signals.cpp:108:20
 #2 0x000058a3f775bdf1 SignalHandler(int, siginfo_t*, void*) <REPO_ROOT>/tmp/llvm-project-main-20260504/llvm/lib/Support/Unix/Signals.inc:448:14
 #3 0x0000714099e45330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
 #4 0x0000714099e9eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x0000714099e9eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x0000714099e9eb2c pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x0000714099e4527e raise ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x0000714099e288ff abort ./stdlib/abort.c:81:7
 #9 0x0000714099e2881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x0000714099e3b517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#11 0x000058a3f77df6d1 bool clang::format::FormatToken::isNoneOf<clang::tok::TokenKind, clang::tok::TokenKind, clang::tok::TokenKind, clang::tok::TokenKind, clang::tok::TokenKind, clang::tok::TokenKind>(clang::tok::TokenKind, clang::tok::TokenKind, clang::tok::TokenKind, clang::tok::TokenKind, clang::tok::TokenKind, clang::tok::TokenKind) const <REPO_ROOT>/tmp/llvm-project-main-20260504/clang/lib/Format/FormatToken.h:668:34
#12 0x000058a3f77df6d1 clang::format::TokenAnnotator::canBreakBefore(clang::format::AnnotatedLine const&, clang::format::FormatToken const&) const <REPO_ROOT>/tmp/llvm-project-main-20260504/clang/lib/Format/TokenAnnotator.cpp:6559:26
#13 0x000058a3f77f24e8 clang::format::TokenAnnotator::calculateFormattingInformation(clang::format::AnnotatedLine&) const (.part.0) <REPO_ROOT>/tmp/llvm-project-main-20260504/clang/lib/Format/TokenAnnotator.cpp:4234:29
#14 0x000058a3f779f1cf clang::format::(anonymous namespace)::Formatter::analyze(clang::format::TokenAnnotator&, llvm::SmallVectorImpl<clang::format::AnnotatedLine*>&, clang::format::FormatTokenLexer&) <REPO_ROOT>/tmp/llvm-project-main-20260504/clang/lib/Format/Format.cpp:2934:32
#15 0x000058a3f77d6cc9 clang::format::TokenAnalyzer::process(bool) <REPO_ROOT>/tmp/llvm-project-main-20260504/clang/lib/Format/TokenAnalyzer.cpp:129:5
#16 0x000058a3f77ac5b6 ~Formatter <REPO_ROOT>/tmp/llvm-project-main-20260504/clang/lib/Format/Format.cpp:2921:7
#17 0x000058a3f77ac5b6 clang::format::internal::reformat(clang::format::FormatStyle const&, llvm::StringRef, llvm::ArrayRef<clang::tooling::Range>, unsigned int, unsigned int, unsigned int, llvm::StringRef, clang::format::FormattingAttemptStatus*)::'lambda11'(clang::format::Environment const&)::operator()(clang::format::Environment const&) const (.isra.0) <REPO_ROOT>/tmp/llvm-project-main-20260504/clang/lib/Format/Format.cpp:4327:12
#18 0x000058a3f77ac61b std::_Function_handler<std::pair<clang::tooling::Replacements, unsigned int> (clang::format::Environment const&), clang::format::internal::reformat(clang::format::FormatStyle const&, llvm::StringRef, llvm::ArrayRef<clang::tooling::Range>, unsigned int, unsigned int, unsigned int, llvm::StringRef, clang::format::FormattingAttemptStatus*)::'lambda11'(clang::format::Environment const&)>::_M_invoke(std::_Any_data const&, clang::format::Environment const&) /usr/include/c++/13/bits/std_function.h:292:7
#19 0x000058a3f77aa661 clang::format::internal::reformat(clang::format::FormatStyle const&, llvm::StringRef, llvm::ArrayRef<clang::tooling::Range>, unsigned int, unsigned int, unsigned int, llvm::StringRef, clang::format::FormattingAttemptStatus*) <REPO_ROOT>/tmp/llvm-project-main-20260504/clang/lib/Format/Format.cpp:4343:70
#20 0x000058a3f77ac49c std::_Rb_tree_header::_Rb_tree_header(std::_Rb_tree_header&&) /usr/include/c++/13/bits/stl_tree.h:182:25
#21 0x000058a3f77ac49c std::_Rb_tree<clang::tooling::Replacement, clang::tooling::Replacement, std::_Identity<clang::tooling::Replacement>, std::less<clang::tooling::Replacement>, std::allocator<clang::tooling::Replacement>>::_Rb_tree_impl<std::less<clang::tooling::Replacement>, true>::_Rb_tree_impl(std::_Rb_tree<clang::tooling::Replacement, clang::tooling::Replacement, std::_Identity<clang::tooling::Replacement>, std::less<clang::tooling::Replacement>, std::allocator<clang::tooling::Replacement>>::_Rb_tree_impl<std::less<clang::tooling::Replacement>, true>&&) /usr/include/c++/13/bits/stl_tree.h:687:4
#22 0x000058a3f77ac49c std::_Rb_tree<clang::tooling::Replacement, clang::tooling::Replacement, std::_Identity<clang::tooling::Replacement>, std::less<clang::tooling::Replacement>, std::allocator<clang::tooling::Replacement>>::_Rb_tree(std::_Rb_tree<clang::tooling::Replacement, clang::tooling::Replacement, std::_Identity<clang::tooling::Replacement>, std::less<clang::tooling::Replacement>, std::allocator<clang::tooling::Replacement>>&&) /usr/include/c++/13/bits/stl_tree.h:956:7
#23 0x000058a3f77ac49c std::set<clang::tooling::Replacement, std::less<clang::tooling::Replacement>, std::allocator<clang::tooling::Replacement>>::set(std::set<clang::tooling::Replacement, std::less<clang::tooling::Replacement>, std::allocator<clang::tooling::Replacement>>&&) /usr/include/c++/13/bits/stl_set.h:233:7
#24 0x000058a3f77ac49c clang::tooling::Replacements::Replacements(clang::tooling::Replacements&&) <REPO_ROOT>/tmp/llvm-project-main-20260504/clang/include/clang/Tooling/Core/Replacement.h:212:7
#25 0x000058a3f77ac49c clang::format::reformat(clang::format::FormatStyle const&, llvm::StringRef, llvm::ArrayRef<clang::tooling::Range>, llvm::StringRef, clang::format::FormattingAttemptStatus*) <REPO_ROOT>/tmp/llvm-project-main-20260504/clang/lib/Format/Format.cpp:4389:8
#26 0x000058a3f76fc080 clang::format::format(llvm::StringRef, bool) <REPO_ROOT>/tmp/llvm-project-main-20260504/clang/tools/clang-format/ClangFormat.cpp:504:28
#27 0x000058a3f76e2108 main <REPO_ROOT>/tmp/llvm-project-main-20260504/clang/tools/clang-format/ClangFormat.cpp:738:11
#28 0x0000714099e2a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#29 0x0000714099e2a28b call_init ./csu/../csu/libc-start.c:128:20
#30 0x0000714099e2a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#31 0x000058a3f76f41c5 _start (tmp/build-assert-clangd-main-20260506/bin/clang-format+0x331c5)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions