<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/80564>80564</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang-tidy with no checks segfaults on variant overload code snippet
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-tidy
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tonyelewis
</td>
</tr>
</table>
<pre>
Running `clang-tidy a.cpp -checks= -- -x c++ -std=c++20` with up to date build (987087df90026605fc8d03ebda5a1cd31b71e609, 2024-01-23) on:
~~~cpp
template <class... Ts> struct overload : Ts... {};
template <class... Ts> overload( Ts... ) -> overload<Ts...>;
auto f() {
return overload([] () {});
}
~~~
…(which I think is valid code and which is accepted by `clang++`) segfaults:
~~~
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /the-llvm-dir/bin/clang-tidy a.cpp -checks= -- -x c++ -std=c++20
1. <eof> parser at end of file
2. While analyzing stack:
#0 Calling f()
3. /tmp/a.cpp:6:18: Error evaluating statement
4. /tmp/a.cpp:6:18: Error evaluating statement
#0 0x00005630cc668740 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/the-llvm-dir/bin/clang-tidy+0x4435740)
#1 0x00005630cc665d0e SignalHandler(int) Signals.cpp:0:0
#2 0x00007fc45fa42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#3 0x00005630cb53a873 clang::Decl::getTranslationUnitDecl() (.part.0) DeclBase.cpp:0:0
#4 0x00005630cb540255 clang::Decl::getASTContext() const (/the-llvm-dir/bin/clang-tidy+0x330d255)
#5 0x00005630cb54bfe4 clang::CXXMethodDecl::getThisType() const (/the-llvm-dir/bin/clang-tidy+0x3318fe4)
#6 0x00005630ca05b259 clang::ento::SValBuilder::getCXXThis(clang::CXXMethodDecl const*, clang::StackFrameContext const*) (/the-llvm-dir/bin/clang-tidy+0x1e28259)
#7 0x00005630c9fa1367 clang::ento::ExprEngine::handleConstructor(clang::Expr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&) (/the-llvm-dir/bin/clang-tidy+0x1d6e367)
#8 0x00005630c9f7cc46 clang::ento::ExprEngine::Visit(clang::Stmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&) (/the-llvm-dir/bin/clang-tidy+0x1d49c46)
#9 0x00005630c9f7df0b clang::ento::ExprEngine::ProcessStmt(clang::Stmt const*, clang::ento::ExplodedNode*) (/the-llvm-dir/bin/clang-tidy+0x1d4af0b)
#10 0x00005630c9f8c7bc clang::ento::ExprEngine::processCFGElement(clang::CFGElement, clang::ento::ExplodedNode*, unsigned int, clang::ento::NodeBuilderContext*) (/the-llvm-dir/bin/clang-tidy+0x1d597bc)
#11 0x00005630c9f388c1 clang::ento::CoreEngine::dispatchWorkItem(clang::ento::ExplodedNode*, clang::ProgramPoint, clang::ento::WorkListUnit const&) (/the-llvm-dir/bin/clang-tidy+0x1d058c1)
#12 0x00005630c9f38b2e clang::ento::CoreEngine::ExecuteWorkList(clang::LocationContext const*, unsigned int, llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>) (/the-llvm-dir/bin/clang-tidy+0x1d05b2e)
#13 0x00005630c9a8b3c6 (anonymous namespace)::AnalysisConsumer::HandleCode(clang::Decl*, unsigned int, clang::ento::ExprEngine::InliningModes, llvm::DenseSet<clang::Decl const*, llvm::DenseMapInfo<clang::Decl const*, void>>*) AnalysisConsumer.cpp:0:0
#14 0x00005630c9a9ce8c (anonymous namespace)::AnalysisConsumer::HandleTranslationUnit(clang::ASTContext&) AnalysisConsumer.cpp:0:0
#15 0x00005630ca264020 clang::MultiplexConsumer::HandleTranslationUnit(clang::ASTContext&) (/the-llvm-dir/bin/clang-tidy+0x2031020)
#16 0x00005630ca4ca409 clang::ParseAST(clang::Sema&, bool, bool) (/the-llvm-dir/bin/clang-tidy+0x2297409)
#17 0x00005630ca225671 clang::FrontendAction::Execute() (/the-llvm-dir/bin/clang-tidy+0x1ff2671)
#18 0x00005630ca19b999 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/the-llvm-dir/bin/clang-tidy+0x1f68999)
#19 0x00005630c9a799f4 clang::tooling::FrontendActionFactory::runInvocation(std::shared_ptr<clang::CompilerInvocation>, clang::FileManager*, std::shared_ptr<clang::PCHContainerOperations>, clang::DiagnosticConsumer*) (/the-llvm-dir/bin/clang-tidy+0x18469f4)
#20 0x00005630c9a1a41e 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)::ActionFactory::runInvocation(std::shared_ptr<clang::CompilerInvocation>, clang::FileManager*, std::shared_ptr<clang::PCHContainerOperations>, clang::DiagnosticConsumer*) ClangTidy.cpp:0:0
#21 0x00005630c9a72ec5 clang::tooling::ToolInvocation::runInvocation(char const*, clang::driver::Compilation*, std::shared_ptr<clang::CompilerInvocation>, std::shared_ptr<clang::PCHContainerOperations>) (/the-llvm-dir/bin/clang-tidy+0x183fec5)
#22 0x00005630c9a755eb clang::tooling::ToolInvocation::run() (/the-llvm-dir/bin/clang-tidy+0x18425eb)
#23 0x00005630c9a7777f clang::tooling::ClangTool::run(clang::tooling::ToolAction*) (/the-llvm-dir/bin/clang-tidy+0x184477f)
#24 0x00005630c9a239ca 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) (/the-llvm-dir/bin/clang-tidy+0x17f09ca)
#25 0x00005630c8d55c5f clang::tidy::clangTidyMain(int, char const**) (/the-llvm-dir/bin/clang-tidy+0xb22c5f)
#26 0x00007fc45fa29d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#27 0x00007fc45fa29e40 call_init ./csu/../csu/libc-start.c:128:20
#28 0x00007fc45fa29e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#29 0x00005630c8d4cb35 _start (/the-llvm-dir/bin/clang-tidy+0xb19b35)
~~~
Note that the source line containing a deduction guide isn't necessary to trigger the crash on trunk, but on slightly older versions it prevents a report of a deduction error from masking the segfault.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWV1vIykW_TXkBdmioD4f8uA48U6kyUw0yc70W0RRlM0GQwkod7wP89tXUGWncJLueHqlXa02UnfKhrqcc-4Hl0CtFWvF-SXIrkB2fUF7t9Hm0mm155J_Ffai1s3-8rdeKaHWEOSISarWMyeaPaRz1nVwxjacPVtAruFsBmcvkAF8BfAVnFnXAHI9fsQI5Ah-FW4D-w46DRvqOKx7IRsIcFmVBSqLpq0QwnmOspaVDSK8bmhGE9aQpC4SnqMK4CXECKczlMwwAbiCWgGyAOgaoPH_P__8k3Xd8Oz4tpN-IUCWTFJr5_M5fLSA3EDrTM8c1DtupKYNBGQBH8M4KK5AcQ3I1dTqNywdTABcHizgCs6iIbIMI4DcnNilvdOwBbj07_iVx7HKcNcbNTU--AhO5hbXAFevBovrowLTJcANBiUCixzg8utGsA28hW4j1DMUFu6oFA1kuuGQqgYO48JCyhjvHG9gvT-6ffAkyJFf3_J1S3vp7Fv5h4f7n28WDzfQ9vVWOEhh3a-h4Z02zrt_41wXXsUrgFdr4TZ9PWd6C_BKyt3h16wz-h-cOYBXwtqeW4BXAadQTPYNh27DITPUbmBN2bMzlPH5sPyDo-wZNv22OwJEcxh-7o1eG7qF1Kz7LVeBAgR45TZ8FlZthAF4VQsF8OoHAj4smoyLArLkuvVB0VFjuYHUQa4aqFvYCsmHyXic_MdGSO8QKvf_9IlnPZmAMkyD4w_ABMElldLPGYNomEEOq-KV23YArwJ2QBY5IIuk9KZujNEG8h2VPXXjIo57PQYT6Y-bGACiF4QQynKCGMvzskgRDC4mC0AWdm-Hh3sjlAtOe_ReBLh8nWTo1ydtneF0C3Dua4BQLiSBp_w9vwF8hV7SlGRFio4CeWjJCbSsQRw-iLWi8ieqGskNwOW40vC1HSVA4d_REB4NFS1Ls5amOMNoxCZFDfDqpcyf8nQmhepfZmvVDwNsbvU8H-D5VyJwZAquzggtCwKHNAyaXHMmh6c1d4-GKiupE1r9XQkXxsYygct5R42bh6T1A1fU8vdppPGSKcJZ9uGSi4fHpVaOv7hxJaaVdWd4hBDU4CyLSGcnCOqWp1MEyy9f7rjb6CZmvxH2cd_xvwwkKVueRkDyKRCKshpn1RQIV04PTw-_U3nltzFujoCWX754TACXH2EfQAK88ME8mRQSYGXolo_iTiaeE-4JxyXOqohTMeVUtTQhefE-p5uXztyotVB8-LwJ2bD0SPymqU3MzE__iFBkVOqGN7_ohn923gN3IeHPot7knORFRL2MqReMpfnnqP8urHAx3Qe3df9NdNOKpXlEtzqh27So_hzde6MZt9ZT_LeQPpMJbVF9ZOIrNIqZlKyo2eeYdAOT5epvN3LYkuJsnHz_eQ_2KvTLzbD_fPCenz9WhGOFPFuKrCpqFkmRxFKQsmTJ-wCW2vCpFI2wHXVs84c2z7eOb2MlPhuyY9d0r7_F3S_xs7DO70KHcDk7oFFWsiTijk-515h_jvvNC2e94wdcMfWfNQt75tta-9bVr93IrXKmt2LHf-PtUrl7Z4YzwVswo2QPvisajZOb89WoMY_UiFqDipY1Ybk3SZVW-63uLVR0y20X2qhqgLLwvaQV1hfxfnvYq34aC7v3d3m6058R8qfJd6uk8CfGO934nn2q3jVXNhS6SLM3e-LJC3e0u1Wt_s5LOy2acMS6GTPulPXbvsfrmcZ6VoyX7Ef0POnGYmmnfVP-eYxRZ0RxniKMpr6466UTneQvPw7o88GJEUnQpG_1QOPOKWU0RVHndO9PP4uHx5PthW_p2NrXWsvX32fBwVWRoiqCU8S64Swvoqq5Mp67ahbMqxPVjNcO-rO52rY4L-LKFXUeNKnqqorkWOptJyQ3t8o6qlhctUZQkVIngM-urm1eVlWsUdwu0KKq2qjrdlr7E-Z766-obwf34zGtV7dqN9ZUgMtwHg6HvA01vHnqTivlK_njWz51oyKzEpLfUUXX_jQWsvy7Zu-XP_mIpkJx82vHTbBs35q-FnSttHWCHZPm7I26TPOqTady4rhnoQlNk2izCi8fBFv67x-DufLdOccJ0yRdfuieQdLA-Jo6WlPLJ_vwtK4ujKH733gLyPKo6NMTe3lJkuFDTa1gT9aZYHzJNtRE8vsvnpyhwtnD8CDxcQaV0vtVm8n4WJ6_u6G-Du_a8U8Ev-64kXTvI-Jhb30jM1iKK8bU8kMA70ke6_b_cNgeQ-XdLQQnJ2mOOcs-jKNHreWU33tCeZd-dCZojNgdNqFJTH5Wiw8l_hEVz0ts0nKWRYmNTwTMMl6fK-D5m0qZ4oxHpyJ80gAWRVG0H1eEEBU-NSYYvoX6sLOcXwrTomgjoCedFSYVo_8vhf_xUniOV4sWVYxGXo160bLJMpa173uVHTx2R73x8nCGiAvHmYFWY8yyOM7y-A-wuGoqBJ-epKi916hxT4xK-bSlQsG5t2h7gFdz_2j3tuGdBXilOifHP8yevjTfALLISkAWSf66anG6Kk8RDO8If_w9WWh49NZnwfqceXPYG8WTKl2-ZzSi8h6Ld42Twm962avtKnZcymqSwcHqOfonVU1eK-PJbdMv2nHoNtSFuxmre8M4lEKF3PNlWag1pLDhTR_qDFz3ouFQWAVw4aDijFtLzR46DZ0R6zU3k1seraAzvXoOMd47_9lKsd44uYdaNtzAHTfWV3woHOwM33HlLKSHmyfdRmvzcIHRGr2FW2qfPbSAerzbml80l6SpSEUv-GVSoLyqsrLAF5tLnBFatUWDSJOxkrA8y5O6YIgyUjRZTi7EJUbYH9IITkiS4DmmaY0QbRAtaZq3JUgR31Ih517uuTbri3DDdVmiLE8vJK25tOFaFuOp_hhk1xfmMvio7tcWpEgK6-yrGSec5JeTa6tw6ao0HO6tXi_uvHg7agRVk2vQcBNoleg67i56Iy__-kVdYPKvAAAA__9YQTfI">