Issue |
135665
|
Summary |
[clang-tidy] 19.1.7 crash when overloading lambdas
|
Labels |
clang-tidy
|
Assignees |
|
Reporter |
DimitrijeDobrota
|
I have the following code that gets compiled with clang and runs correctly:
`include/based/template.hpp`
```c++
#pragma once
namespace based
{
template<typename... F>
struct overload : public F...
{
using F::operator()...;
};
template<typename... F>
overload(F&&...) -> overload<F...>;
} // namespace based
```
`example/template.cpp`
```c++
#include <iostream>
#include "based/template.hpp"
int main()
{
const auto l =
based::overload([](const int* i) { std::cout << "i=" << *i << '\n'; },
[](const double* d) { std::cout << "d=" << *d << '\n'; });
int i = 5;
l(&i);
double d = 7.3;
l(&d);
return 0;
}
```
but clang-tidy crashes with the following error:
```
Error running 'clang-tidy': PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: clang-tidy --header-filter=^project_root/ --extra-arg-before=--driver-mode=g++ project_root/example/template.cpp -- /usr/bin/c++ -DBASED_STATIC_DEFINE -Iproject_root/include -isystem project_root/build/dev/export -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS=1 -fstack-protector-strong -fcf-protection=full -fstack-clash-protection -Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion -Wcast-qual -Wformat=2 -Wundef -Werror=float-equal -Wshadow -Wcast-align -Wunused -Wnull-dereference -Wdouble-promotion -Wimplicit-fallthrough -Wextra-semi -Woverloaded-virtual -Wnon-virtual-dtor -Wold-style-cast -g -std=c++20 -MD -MT example/CMakeFiles/template.dir/template.cpp.o -MF CMakeFiles/template.dir/template.cpp.o.d -o CMakeFiles/template.dir/template.cpp.o -c project_root/example/template.cpp
1. <eof> parser at end of file
2. While analyzing stack:
#0 Calling main()
3. project_root/example/template.cpp:8:23: Error evaluating statement
4. project_root/example/template.cpp:8:23: Error evaluating statement
#0 0x000073095cc1a730 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /usr/src/debug/llvm/llvm-19.1.7.src/lib/Support/Unix/Signals.inc:723:22
#1 0x000073095cc176bd llvm::sys::RunSignalHandlers() /usr/src/debug/llvm/llvm-19.1.7.src/lib/Support/Signals.cpp:105:20
#2 0x000073095cc176bd SignalHandler /usr/src/debug/llvm/llvm-19.1.7.src/lib/Support/Unix/Signals.inc:403:31
#3 0x000073095be4bcd0 (/usr/lib/libc.so.6+0x3dcd0)
#4 0x00007309654afe66 clang::Decl::getTranslationUnitDecl() /usr/src/debug/clang/clang-19.1.7.src/lib/AST/DeclBase.cpp:515:10
#5 0x00007309654d8428 clang::Decl::getTranslationUnitDecl() /usr/src/debug/clang/clang-19.1.7.src/include/clang/AST/ASTContext.h:1645:36
#6 0x00007309654d8428 clang::Decl::getTranslationUnitDecl() const /usr/src/debug/clang/clang-19.1.7.src/include/clang/AST/DeclBase.h:483:59
#7 0x00007309654d8428 clang::Decl::getASTContext() const /usr/src/debug/clang/clang-19.1.7.src/lib/AST/DeclBase.cpp:524:49
#8 0x00007309654d8428 clang::CXXMethodDecl::getThisType(clang::FunctionProtoType const*, clang::CXXRecordDecl const*) /usr/src/debug/clang/clang-19.1.7.src/lib/AST/DeclCXX.cpp:2586:38
#9 0x0000730967236b2d clang::ento::SValBuilder::getCXXThis(clang::CXXMethodDecl const*, clang::StackFrameContext const*) /usr/src/debug/clang/clang-19.1.7.src/lib/StaticAnalyzer/Core/SValBuilder.cpp:319:42
#10 0x0000730967187ac5 llvm::detail::PunnedPointer<llvm::PointerUnion<clang::Type const*, clang::ExtQuals const*>>::PunnedPointer(long) /usr/include/llvm/ADT/PointerIntPair.h:37:60
#11 0x0000730967187ac5 llvm::PointerIntPair<llvm::PointerUnion<clang::Type const*, clang::ExtQuals const*>, 3u, unsigned int, llvm::PointerLikeTypeTraits<llvm::PointerUnion<clang::Type const*, clang::ExtQuals const*>>, llvm::PointerIntPairInfo<llvm::PointerUnion<clang::Type const*, clang::ExtQuals const*>, 3u, llvm::PointerLikeTypeTraits<llvm::PointerUnion<clang::Type const*, clang::ExtQuals const*>>>>::PointerIntPair() /usr/include/llvm/ADT/PointerIntPair.h:86:13
#12 0x0000730967187ac5 clang::QualType::QualType() /usr/src/debug/clang/clang-19.1.7.src/include/clang/AST/Type.h:964:3
#13 0x0000730967187ac5 clang::ento::ExprEngine::handleConstructor(clang::Expr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&) /usr/src/debug/clang/clang-19.1.7.src/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp:706:34
#14 0x00007309671909ba clang::ento::NodeBuilder::addNodes(clang::ento::ExplodedNodeSet const&) /usr/src/debug/clang/clang-19.1.7.src/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:339:60
#15 0x00007309671909ba clang::ento::ExprEngine::Visit(clang::Stmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&) /usr/src/debug/clang/clang-19.1.7.src/lib/StaticAnalyzer/Core/ExprEngine.cpp:2179:20
#16 0x0000730967192db0 clang::ento::ExplodedNodeSet::insert(clang::ento::ExplodedNodeSet const&) /usr/src/debug/clang/clang-19.1.7.src/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h:485:5
#17 0x0000730967192db0 clang::ento::ExprEngine::ProcessStmt(clang::Stmt const*, clang::ento::ExplodedNode*) /usr/src/debug/clang/clang-19.1.7.src/lib/StaticAnalyzer/Core/ExprEngine.cpp:1132:15
#18 0x0000730967193a45 clang::ento::ExprEngine::processCFGElement(clang::CFGElement, clang::ento::ExplodedNode*, unsigned int, clang::ento::NodeBuilderContext*) /usr/src/debug/clang/clang-19.1.7.src/lib/StaticAnalyzer/Core/ExprEngine.cpp:977:7
#19 0x0000730967128058 clang::ento::CoreEngine::dispatchWorkItem(clang::ento::ExplodedNode*, clang::ProgramPoint, clang::ento::WorkListUnit const&) /usr/src/debug/clang/clang-19.1.7.src/lib/StaticAnalyzer/Core/CoreEngine.cpp:223:0
#20 0x00007309671285f6 operator() /usr/src/debug/clang/clang-19.1.7.src/lib/StaticAnalyzer/Core/CoreEngine.cpp:159:0
#21 0x00007309671285f6 clang::ento::CoreEngine::ExecuteWorkList(clang::LocationContext const*, unsigned int, llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>) /usr/src/debug/clang/clang-19.1.7.src/lib/StaticAnalyzer/Core/CoreEngine.cpp:163:0
#22 0x0000730967552ad3 llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>::release() /usr/include/llvm/ADT/IntrusiveRefCntPtr.h:232:0
#23 0x0000730967552ad3 llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>::~IntrusiveRefCntPtr() /usr/include/llvm/ADT/IntrusiveRefCntPtr.h:196:0
#24 0x0000730967552ad3 clang::ento::ExprEngine::ExecuteWorkList(clang::LocationContext const*, unsigned int) /usr/src/debug/clang/clang-19.1.7.src/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h:192:0
#25 0x0000730967552ad3 RunPathSensitiveChecks /usr/src/debug/clang/clang-19.1.7.src/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:729:0
#26 0x0000730967552ad3 HandleCode /usr/src/debug/clang/clang-19.1.7.src/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:699:0
#27 0x00007309675567c7 llvm::DenseMapBase<llvm::DenseMap<clang::Decl const*, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<clang::Decl const*, void>, llvm::detail::DenseSetPair<clang::Decl const*>>, clang::Decl const*, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<clang::Decl const*, void>, llvm::detail::DenseSetPair<clang::Decl const*>>::begin() /usr/include/llvm/ADT/DenseMap.h:78:0
#28 0x00007309675567c7 llvm::detail::DenseSetImpl<clang::Decl const*, llvm::DenseMap<clang::Decl const*, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<clang::Decl const*, void>, llvm::detail::DenseSetPair<clang::Decl const*>>, llvm::DenseMapInfo<clang::Decl const*, void>>::begin() /usr/include/llvm/ADT/DenseSet.h:173:0
#29 0x00007309675567c7 HandleDeclsCallGraph /usr/src/debug/clang/clang-19.1.7.src/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:490:0
#30 0x00007309675567c7 runAnalysisOnTranslationUnit /usr/src/debug/clang/clang-19.1.7.src/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:558:0
#31 0x00007309675567c7 HandleTranslationUnit /usr/src/debug/clang/clang-19.1.7.src/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:613:0
#32 0x0000730966ed99f0 clang::MultiplexConsumer::HandleTranslationUnit(clang::ASTContext&) /usr/src/debug/clang/clang-19.1.7.src/lib/Frontend/MultiplexConsumer.cpp:326:25
#33 0x00007309651d9c86 __gnu_cxx::__normal_iterator<std::unique_ptr<clang::TemplateInstantiationCallback, std::default_delete<clang::TemplateInstantiationCallback>>*, std::vector<std::unique_ptr<clang::TemplateInstantiationCallback, std::default_delete<clang::TemplateInstantiationCallback>>, std::allocator<std::unique_ptr<clang::TemplateInstantiationCallback, std::default_delete<clang::TemplateInstantiationCallback>>>>>::__normal_iterator(std::unique_ptr<clang::TemplateInstantiationCallback, std::default_delete<clang::TemplateInstantiationCallback>>* const&) /usr/include/c++/14.2.1/bits/stl_iterator.h:1068:0
#34 0x00007309651d9c86 std::vector<std::unique_ptr<clang::TemplateInstantiationCallback, std::default_delete<clang::TemplateInstantiationCallback>>, std::allocator<std::unique_ptr<clang::TemplateInstantiationCallback, std::default_delete<clang::TemplateInstantiationCallback>>>>::begin() /usr/include/c++/14.2.1/bits/stl_vector.h:874:0
#35 0x00007309651d9c86 void clang::finalize<std::vector<std::unique_ptr<clang::TemplateInstantiationCallback, std::default_delete<clang::TemplateInstantiationCallback>>, std::allocator<std::unique_ptr<clang::TemplateInstantiationCallback, std::default_delete<clang::TemplateInstantiationCallback>>>>>(std::vector<std::unique_ptr<clang::TemplateInstantiationCallback, std::default_delete<clang::TemplateInstantiationCallback>>, std::allocator<std::unique_ptr<clang::TemplateInstantiationCallback, std::default_delete<clang::TemplateInstantiationCallback>>>>&, clang::Sema const&) /usr/src/debug/clang/clang-19.1.7.src/include/clang/Sema/TemplateInstCallback.h:54:0
#36 0x00007309651d9c86 clang::ParseAST(clang::Sema&, bool, bool) /usr/src/debug/clang/clang-19.1.7.src/lib/Parse/ParseAST.cpp:191:0
#37 0x0000730966efa221 clang::FrontendAction::Execute() /usr/src/debug/clang/clang-19.1.7.src/lib/Frontend/FrontendAction.cpp:1078:21
#38 0x0000730966e9008f llvm::Error::getPtr() const /usr/include/llvm/Support/Error.h:282:12
#39 0x0000730966e9008f llvm::Error::operator bool() /usr/include/llvm/Support/Error.h:242:22
#40 0x0000730966e9008f clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /usr/src/debug/clang/clang-19.1.7.src/lib/Frontend/CompilerInstance.cpp:1061:42
#41 0x000073096706143e std::__uniq_ptr_impl<clang::FileSystemStatCache, std::default_delete<clang::FileSystemStatCache>>::reset(clang::FileSystemStatCache*) /usr/include/c++/14.2.1/bits/unique_ptr.h:202:0
#42 0x000073096706143e std::unique_ptr<clang::FileSystemStatCache, std::default_delete<clang::FileSystemStatCache>>::reset(clang::FileSystemStatCache*) /usr/include/c++/14.2.1/bits/unique_ptr.h:503:0
#43 0x000073096706143e clang::FileManager::clearStatCache() /usr/src/debug/clang/clang-19.1.7.src/lib/Basic/FileManager.cpp:63:0
#44 0x000073096706143e clang::tooling::FrontendActionFactory::runInvocation(std::shared_ptr<clang::CompilerInvocation>, clang::FileManager*, std::shared_ptr<clang::PCHContainerOperations>, clang::DiagnosticConsumer*) /usr/src/debug/clang/clang-19.1.7.src/lib/Tooling/Tooling.cpp:467:0
#45 0x000064b5078bc47d std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/include/c++/14.2.1/bits/shared_ptr_base.h:1068:6
#46 0x000064b5078bc47d std::__shared_ptr<clang::CompilerInvocation, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/include/c++/14.2.1/bits/shared_ptr_base.h:1525:7
#47 0x000064b5078bc47d std::shared_ptr<clang::CompilerInvocation>::~shared_ptr() /usr/include/c++/14.2.1/bits/shared_ptr.h:175:11
#48 0x000064b5078bc47d runInvocation /usr/src/debug/clang/clang-19.1.7.src/tools/extra/clang-tidy/ClangTidy.cpp:581:50
#49 0x000073096705e591 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/include/c++/14.2.1/bits/shared_ptr_base.h:1068:6
#50 0x000073096705e591 std::__shared_ptr<clang::CompilerInvocation, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/include/c++/14.2.1/bits/shared_ptr_base.h:1525:7
#51 0x000073096705e591 std::shared_ptr<clang::CompilerInvocation>::~shared_ptr() /usr/include/c++/14.2.1/bits/shared_ptr.h:175:11
#52 0x000073096705e591 clang::tooling::ToolInvocation::runInvocation(char const*, clang::driver::Compilation*, std::shared_ptr<clang::CompilerInvocation>, std::shared_ptr<clang::PCHContainerOperations>) /usr/src/debug/clang/clang-19.1.7.src/lib/Tooling/Tooling.cpp:440:31
#53 0x0000730967060583 clang::tooling::ToolInvocation::run() /usr/src/debug/clang/clang-19.1.7.src/lib/Tooling/Tooling.cpp:425:23
#54 0x0000730967061e85 clang::tooling::ClangTool::run(clang::tooling::ToolAction*) /usr/src/debug/clang/clang-19.1.7.src/lib/Tooling/Tooling.cpp:623:0
#55 0x000064b5078c7a38 clang::tidy::runClangTidy(clang::tidy::ClangTidyContext&, clang::tooling::CompilationDatabase const&, llvm::ArrayRef<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, llvm::IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem>, bool, bool, llvm::StringRef) /usr/src/debug/clang/clang-19.1.7.src/tools/extra/clang-tidy/ClangTidy.cpp:603:28
#56 0x000064b5073f6c77 clang::tidy::clangTidyMain(int, char const**) /usr/src/debug/clang/clang-19.1.7.src/tools/extra/clang-tidy/tool/ClangTidyMain.cpp:687:63
#57 0x000073095be35488 __libc_start_call_main /usr/src/debug/glibc/glibc/csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#58 0x000073095be3554c call_init /usr/src/debug/glibc/glibc/csu/../csu/libc-start.c:128:20
#59 0x000073095be3554c __libc_start_main /usr/src/debug/glibc/glibc/csu/../csu/libc-start.c:347:5
#60 0x000064b5073ed1a5 _start (/usr/bin/clang-tidy+0xd61a5)
Segmentation fault
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs