llvm / llvm/llvm-project

[clang-tidy]clang-tidy crash in readability-identifier-naming with forward-declared nested base class

Open
#213,948 6 comments 0 reactions 1 assignee Claimed by @Purna-Chandra-4706 View on GitHub
clang-tidy crash-on-invalid generated by fuzzer good first issue
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 valid?
```cxx
template
struct X {
struct B;
struct A : public B {
virtual void foo() { }
};
};
```

```
--checks='*'
```
```
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: /clang-tidy --checks=*
1. parser at end of file
2. ASTMatcher: Processing 'readability-identifier-naming' against:
TranslationUnitDecl : <>
No bound nodes
#0 0x0000000005029708 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/clang-tidy+0x5029708)
#1 0x00000000050267ad SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#2 0x0000733556045330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#3 0x0000000003af57e4 clang::CXXBasePaths::lookupInBases(clang::ASTContext&, clang::CXXRecordDecl const*, llvm::function_ref, bool) (/clang-tidy+0x3af57e4)
#4 0x0000000003af8021 clang::CXXRecordDecl::hasMemberName(clang::DeclarationName) const (/clang-tidy+0x3af8021)
#5 0x000000000142eccb clang::tidy::readability::IdentifierNamingCheck::findStyleKind(clang::NamedDecl const*, llvm::ArrayRef>, bool, bool) const (/clang-tidy+0x142eccb)
#6 0x000000000142f385 clang::tidy::readability::IdentifierNamingCheck::getDeclFailureInfo(clang::NamedDecl const*, clang::SourceManager const&) const (/clang-tidy+0x142f385)
#7 0x0000000001be050a clang::tidy::RenamerClangTidyCheck::addUsage(clang::NamedDecl const*, clang::SourceRange, clang::SourceManager const&) (/clang-tidy+0x1be050a)
#8 0x0000000001be0a45 clang::tidy::(anonymous namespace)::RenamerClangTidyVisitor::VisitNamedDecl(clang::NamedDecl*) (.isra.0) RenamerClangTidyCheck.cpp:0:0
#9 0x0000000001be2f1c clang::RecursiveASTVisitor::TraverseDecl(clang::Decl*) (.part.0) RenamerClangTidyCheck.cpp:0:0
#10 0x0000000001bf34ab clang::RecursiveASTVisitor::TraverseDeclContextHelper(clang::DeclContext*) (.part.0) RenamerClangTidyCheck.cpp:0:0
#11 0x0000000001be27c1 clang::RecursiveASTVisitor::TraverseDecl(clang::Decl*) (.part.0) RenamerClangTidyCheck.cpp:0:0
#12 0x0000000001bf34ab clang::RecursiveASTVisitor::TraverseDeclContextHelper(clang::DeclContext*) (.part.0) RenamerClangTidyCheck.cpp:0:0
#13 0x0000000001be27c1 clang::RecursiveASTVisitor::TraverseDecl(clang::Decl*) (.part.0) RenamerClangTidyCheck.cpp:0:0
#14 0x0000000001bf808c clang::RecursiveASTVisitor::TraverseClassTemplateDecl(clang::ClassTemplateDecl*) RenamerClangTidyCheck.cpp:0:0
#15 0x0000000001be1958 clang::RecursiveASTVisitor::TraverseDecl(clang::Decl*) (.part.0) RenamerClangTidyCheck.cpp:0:0
#16 0x0000000001bf34ab clang::RecursiveASTVisitor::TraverseDeclContextHelper(clang::DeclContext*) (.part.0) RenamerClangTidyCheck.cpp:0:0
#17 0x0000000001bf6236 clang::RecursiveASTVisitor::TraverseTranslationUnitDecl(clang::TranslationUnitDecl*) RenamerClangTidyCheck.cpp:0:0
#18 0x0000000001be22af clang::RecursiveASTVisitor::TraverseDecl(clang::Decl*) (.part.0) RenamerClangTidyCheck.cpp:0:0
#19 0x0000000001c00129 clang::tidy::RenamerClangTidyCheck::check(clang::ast_matchers::MatchFinder::MatchResult const&) (/clang-tidy+0x1c00129)
#20 0x000000000388a119 clang::ast_matchers::internal::(anonymous namespace)::MatchASTVisitor::MatchVisitor::visitMatch(clang::ast_matchers::BoundNodes const&) ASTMatchFinder.cpp:0:0
#21 0x00000000038e26ef clang::ast_matchers::internal::BoundNodesTreeBuilder::visitMatches(clang::ast_matchers::internal::BoundNodesTreeBuilder::Visitor*) (/clang-tidy+0x38e26ef)
#22 0x000000000388b89c clang::ast_matchers::internal::(anonymous namespace)::MatchASTVisitor::matchWithFilter(clang::DynTypedNode const&) ASTMatchFinder.cpp:0:0
#23 0x00000000038c27fd clang::ast_matchers::internal::(anonymous namespace)::MatchASTVisitor::TraverseDecl(clang::Decl*) ASTMatchFinder.cpp:0:0
#24 0x00000000038c2c9c clang::ast_matchers::MatchFinder::matchAST(clang::ASTContext&) (/clang-tidy+0x38c2c9c)
#25 0x0000000002749098 clang::MultiplexConsumer::HandleTranslationUnit(clang::ASTContext&) (/clang-tidy+0x2749098)
#26 0x000000000295123c clang::ParseAST(clang::Sema&, bool, bool) (/clang-tidy+0x295123c)
#27 0x0000000002704ed1 clang::FrontendAction::Execute() (/clang-tidy+0x2704ed1)
#28 0x0000000002695f65 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/clang-tidy+0x2695f65)
#29 0x0000000001c67867 clang::tooling::FrontendActionFactory::runInvocation(std::shared_ptr, clang::FileManager*, std::shared_ptr, clang::DiagnosticConsumer*) (/clang-tidy+0x1c67867)
#30 0x0000000001c10b07 clang::tidy::runClangTidy(clang::tidy::ClangTidyContext&, clang::tooling::CompilationDatabase const&, llvm::ArrayRef, std::allocator>>, llvm::IntrusiveRefCntPtr, bool, bool, llvm::StringRef, bool)::ActionFactory::runInvocation(std::shared_ptr, clang::FileManager*, std::shared_ptr, clang::DiagnosticConsumer*) ClangTidy.cpp:0:0
#31 0x0000000001c6019c clang::tooling::ToolInvocation::runInvocation(char const*, clang::driver::Compilation*, std::shared_ptr, std::shared_ptr) (/clang-tidy+0x1c6019c)
#32 0x0000000001c632f8 clang::tooling::ToolInvocation::run() (/clang-tidy+0x1c632f8)
#33 0x0000000001c65a4c clang::tooling::ClangTool::run(clang::tooling::ToolAction*) (/clang-tidy+0x1c65a4c)
#34 0x0000000001c121f1 clang::tidy::runClangTidy(clang::tidy::ClangTidyContext&, clang::tooling::CompilationDatabase const&, llvm::ArrayRef, std::allocator>>, llvm::IntrusiveRefCntPtr, bool, bool, llvm::StringRef, bool) (/clang-tidy+0x1c121f1)
#35 0x0000000000c38b38 clang::tidy::clangTidyMain(int, char const**) (/clang-tidy+0xc38b38)
#36 0x000073355602a1ca (/lib/x86_64-linux-gnu/libc.so.6+0x2a1ca)
#37 0x000073355602a28b __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28b)
#38 0x0000000000c2ae15 _start (/clang-tidy+0xc2ae15)
Program terminated with signal: SIGSEGV
```

https://godbolt.org/z/jx639YYse

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.