[clang-check][syntax] Crash in foldTemplateDeclaration: non-template function parameter auto misclassified as TemplateDecl
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
This input is generated by a fuzzer.
Seems to be a crash-on-valid?
```cxx
void f(auto);
```
```
clang-check --tokens-dump example.cpp -- -xc++ -std=c++23
```
```
clang-check: /home/ubuntu2404/llvm-project-196067/clang/lib/Tooling/Syntax/BuildTree.cpp:1659: clang::syntax::TemplateDeclaration* {anonymous}::BuildTreeVisitor::foldTemplateDeclaration(llvm::ArrayRef, const clang::syntax::Token*, llvm::ArrayRef, clang::Decl*): Assertion `TemplateKW && TemplateKW->kind() == tok::kw_template' failed.
#0 0x0000603dc3c181f1 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x96d1f1)
#1 0x0000603dc3c14dac llvm::sys::RunSignalHandlers() (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x969dac)
#2 0x0000603dc3c14f0c SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x00007c62f4845330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#4 0x00007c62f489eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x00007c62f489eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x00007c62f489eb2c pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x00007c62f484527e raise ./signal/../sysdeps/posix/raise.c:27:6
#8 0x00007c62f48288ff abort ./stdlib/abort.c:81:7
#9 0x00007c62f482881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007c62f483b517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#11 0x0000603dc3fa5075 (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xcfa075)
#12 0x0000603dc3fb4228 (anonymous namespace)::BuildTreeVisitor::WalkUpFromTemplateDecl(clang::TemplateDecl*) BuildTree.cpp:0:0
#13 0x0000603dc3fb7aea clang::RecursiveASTVisitor<(anonymous namespace)::BuildTreeVisitor>::TraverseDeclContextHelper(clang::DeclContext*) BuildTree.cpp:0:0
#14 0x0000603dc3fd083b clang::RecursiveASTVisitor<(anonymous namespace)::BuildTreeVisitor>::TraverseTranslationUnitDecl(clang::TranslationUnitDecl*) BuildTree.cpp:0:0
#15 0x0000603dc3fb7439 clang::syntax::buildSyntaxTree(clang::syntax::Arena&, clang::syntax::TokenBufferTokenManager&, clang::ASTContext&) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xd0c439)
#16 0x0000603dc36ab4af (anonymous namespace)::DumpSyntaxTree::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)::Consumer::HandleTranslationUnit(clang::ASTContext&) ClangCheck.cpp:0:0
#17 0x0000603dc54e1f9c clang::ParseAST(clang::Sema&, bool, bool) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x2236f9c)
#18 0x0000603dc3c6f271 clang::FrontendAction::Execute() (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x9c4271)
#19 0x0000603dc3cbb308 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xa10308)
#20 0x0000603dc3f97cb7 clang::tooling::FrontendActionFactory::runInvocation(std::shared_ptr, clang::FileManager*, std::shared_ptr, clang::DiagnosticConsumer*) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xceccb7)
#21 0x0000603dc3f91b2a 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 0x0000603dc3f941e2 clang::tooling::ToolInvocation::run() (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xce91e2)
#23 0x0000603dc3f95e19 clang::tooling::ClangTool::run(clang::tooling::ToolAction*) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xceae19)
#24 0x0000603dc3630405 main (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x385405)
#25 0x00007c62f482a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#26 0x00007c62f482a28b call_init ./csu/../csu/libc-start.c:128:20
#27 0x00007c62f482a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#28 0x0000603dc36aa045 _start (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x3ff045)
Aborted (core dumped)
```
Contributor guide
Research direction
Reproduce the crash with clang-check --tokens-dump on `void f(auto);` using `-xc++ -std=c++23`. Then inspect clang/lib/Tooling/Syntax/BuildTree.cpp around line 1659 and trace how the declaration is classified. Done means this valid input no longer triggers the TemplateKW 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
- Mostly clear
- Newbie friendliness
- 48/100