llvm / llvm/llvm-project

[clang-check][syntax] Crash in foldTemplateDeclaration: non-template function parameter auto misclassified as TemplateDecl

Open
#207,648 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.
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.