llvm / llvm/llvm-project

[clang-check][Syntax] Crash in TreeBuilder::getRange: assertion `First.isValid()` fails when dumping syntax tree for invalid declarator

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

```c
[][](a)
```

use
```
clang-check example.c -- -xc -std=c11
```

```
clang-check: /home/ubuntu2404/llvm-project-196067/clang/lib/Tooling/Syntax/BuildTree.cpp:464: llvm::ArrayRef clang::syntax::TreeBuilder::getRange(clang::SourceLocation, clang::SourceLocation) const: Assertion `First.isValid()' failed.
#0 0x00005be1a19641f1 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x96d1f1)
#1 0x00005be1a1960dac llvm::sys::RunSignalHandlers() (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x969dac)
#2 0x00005be1a1960f0c SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x000077d10c645330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#4 0x000077d10c69eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x000077d10c69eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x000077d10c69eb2c pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x000077d10c64527e raise ./signal/../sysdeps/posix/raise.c:27:6
#8 0x000077d10c6288ff abort ./stdlib/abort.c:81:7
#9 0x000077d10c62881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x000077d10c63b517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#11 0x00005be1a1cf8cbd clang::syntax::TreeBuilder::getRange(clang::SourceLocation, clang::SourceLocation) const (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xd01cbd)
#12 0x00005be1a1d04b9f clang::RecursiveASTVisitor<(anonymous namespace)::BuildTreeVisitor>::TraverseTypeLoc(clang::TypeLoc, bool) (.constprop.0) BuildTree.cpp:0:0
#13 0x00005be1a1d1bd25 clang::RecursiveASTVisitor<(anonymous namespace)::BuildTreeVisitor>::TraverseVarDecl(clang::VarDecl*) BuildTree.cpp:0:0
#14 0x00005be1a1d03aea clang::RecursiveASTVisitor<(anonymous namespace)::BuildTreeVisitor>::TraverseDeclContextHelper(clang::DeclContext*) BuildTree.cpp:0:0
#15 0x00005be1a1d1c83b clang::RecursiveASTVisitor<(anonymous namespace)::BuildTreeVisitor>::TraverseTranslationUnitDecl(clang::TranslationUnitDecl*) BuildTree.cpp:0:0
#16 0x00005be1a1d03439 clang::syntax::buildSyntaxTree(clang::syntax::Arena&, clang::syntax::TokenBufferTokenManager&, clang::ASTContext&) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xd0c439)
#17 0x00005be1a13f74af (anonymous namespace)::DumpSyntaxTree::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)::Consumer::HandleTranslationUnit(clang::ASTContext&) ClangCheck.cpp:0:0
#18 0x00005be1a322df9c clang::ParseAST(clang::Sema&, bool, bool) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x2236f9c)
#19 0x00005be1a19bb271 clang::FrontendAction::Execute() (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x9c4271)
#20 0x00005be1a1a07308 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xa10308)
#21 0x00005be1a1ce3cb7 clang::tooling::FrontendActionFactory::runInvocation(std::shared_ptr, clang::FileManager*, std::shared_ptr, clang::DiagnosticConsumer*) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xceccb7)
#22 0x00005be1a1cddb2a clang::tooling::ToolInvocation::runInvocation(char const*, clang::driver::Compilation*, std::shared_ptr, std::shared_ptr) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xce6b2a)
#23 0x00005be1a1ce01e2 clang::tooling::ToolInvocation::run() (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xce91e2)
#24 0x00005be1a1ce1e19 clang::tooling::ClangTool::run(clang::tooling::ToolAction*) (/home/ubuntu2404/build-196067-assert/bin/clang-check+0xceae19)
#25 0x00005be1a137c405 main (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x385405)
#26 0x000077d10c62a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#27 0x000077d10c62a28b call_init ./csu/../csu/libc-start.c:128:20
#28 0x000077d10c62a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#29 0x00005be1a13f6045 _start (/home/ubuntu2404/build-196067-assert/bin/clang-check+0x3ff045)
```

Contributor guide

Open the contributing guide

Research direction

Reproduce the failure with clang-check on the shown example.c input and -xc -std=c11 options. Then inspect clang/lib/Tooling/Syntax/BuildTree.cpp, especially TreeBuilder::getRange and the syntax-tree traversal shown in the stack trace. Done means dumping the syntax tree for this invalid declarator no longer hits the First.isValid() assertion.

Written by the indexing model from the issue text.

Assessment

Tech stack
c
Domain
compilers
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
72/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.