llvm / llvm/llvm-project

[clang-check][syntax]Crash in TreeBuilder::getDeclarationRange: dyn_cast<TagDecl> Assertion `detail::isPresent(Val) && "dyn_cast on a non-existent value"'` failed.

Open
#207,635 0 comments 0 reactions 0 assignees View on GitHub
clang-tools-extra crash generated by fuzzer
Dominant language
LLVM
Stars
40.5k
Forks
18.7k
PR merge metrics
PR metrics pending

Description

This input is generated by a fuzzer.
```cxx
template
concept X = x;
```

```
clang-check --tokens-dump example.cpp -- -xc++ -std=c++23
```

stacktrace
```
clang-check: /home/ubuntu2404/llvm-project-196067/llvm/include/llvm/Support/Casting.h:656: decltype(auto) llvm::dyn_cast(From*) [with To = clang::TagDecl; From = clang::Decl]: Assertion `detail::isPresent(Val) && "dyn_cast on a non-existent value"' failed.
#0 0x00005a384ee801f1 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x96d1f1)
#1 0x00005a384ee7cdac llvm::sys::RunSignalHandlers() (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x969dac)
#2 0x00005a384ee7cf0c SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x00007a955ac45330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#4 0x00007a955ac9eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x00007a955ac9eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x00007a955ac9eb2c pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x00007a955ac4527e raise ./signal/../sysdeps/posix/raise.c:27:6
#8 0x00007a955ac288ff abort ./stdlib/abort.c:81:7
#9 0x00007a955ac2881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007a955ac3b517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#11 0x00005a384f215181 clang::syntax::TreeBuilder::getDeclarationRange(clang::Decl*) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xd02181)
#12 0x00005a384f21c0a0 (anonymous namespace)::BuildTreeVisitor::WalkUpFromTemplateDecl(clang::TemplateDecl*) BuildTree.cpp:0:0
#13 0x00005a384f21faea clang::RecursiveASTVisitor<(anonymous namespace)::BuildTreeVisitor>::TraverseDeclContextHelper(clang::DeclContext*) BuildTree.cpp:0:0
#14 0x00005a384f23883b clang::RecursiveASTVisitor<(anonymous namespace)::BuildTreeVisitor>::TraverseTranslationUnitDecl(clang::TranslationUnitDecl*) BuildTree.cpp:0:0
#15 0x00005a384f21f439 clang::syntax::buildSyntaxTree(clang::syntax::Arena&, clang::syntax::TokenBufferTokenManager&, clang::ASTContext&) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xd0c439)
#16 0x00005a384e9134af (anonymous namespace)::DumpSyntaxTree::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)::Consumer::HandleTranslationUnit(clang::ASTContext&) ClangCheck.cpp:0:0
#17 0x00005a3850749f9c clang::ParseAST(clang::Sema&, bool, bool) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x2236f9c)
#18 0x00005a384eed7271 clang::FrontendAction::Execute() (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x9c4271)
#19 0x00005a384ef23308 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xa10308)
#20 0x00005a384f1ffcb7 clang::tooling::FrontendActionFactory::runInvocation(std::shared_ptr, clang::FileManager*, std::shared_ptr, clang::DiagnosticConsumer*) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xceccb7)
#21 0x00005a384f1f9b2a clang::tooling::ToolInvocation::runInvocation(char const*, clang::driver::Compilation*, std::shared_ptr, std::shared_ptr) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xce6b2a)
#22 0x00005a384f1fc1e2 clang::tooling::ToolInvocation::run() (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xce91e2)
#23 0x00005a384f1fde19 clang::tooling::ClangTool::run(clang::tooling::ToolAction*) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xceae19)
#24 0x00005a384e898405 main (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x385405)
#25 0x00007a955ac2a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#26 0x00007a955ac2a28b call_init ./csu/../csu/libc-start.c:128:20
#27 0x00007a955ac2a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#28 0x00005a384e912045 _start (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x3ff045)
Aborted (core dumped)
```

Contributor guide

Open the contributing guide

Research direction

Start with clang-tools-extra/clang-check and the syntax tree code in BuildTree.cpp, focusing on TreeBuilder::getDeclarationRange as shown in the stack trace. Run clang-check --tokens-dump on the provided example.cpp with -xc++ -std=c++23, then confirm the fuzzer input no longer triggers the assertion or aborts.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
compilers
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
58/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.