<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/86054>86054</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang] Crash when using deducing this and references in lambda captures
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Link1J
</td>
</tr>
</table>
<pre>
Compiling the following code using `clang -std=c++23` crashes the compiler. [Godbolt link](https://godbolt.org/z/9bEzeKr1a)
Both GCC and MSVC accept the code, so it should be valid code.
```c++
template<typename M>
struct unique_lock {
unique_lock(M&) {}
};
int main() {
struct mutex {} cursor_guard;
[&cursor_guard](this auto self) {
unique_lock a(cursor_guard);
}();
}
```
```
Stack dump:
0. Program arguments: /usr/bin/clang-18 -cc1 -triple x86_64-redhat-linux-gnu -emit-obj -mrelax-all -dumpdir a- -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name test.cpp -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/home/link1j/Repos/awning -fcoverage-compilation-dir=/home/link1j/Repos/awning -resource-dir /usr/bin/../lib/clang/18 -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14 -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward -internal-isystem /usr/bin/../lib/clang/18/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -std=c++23 -fdeprecated-macro -ferror-limit 19 -fgnuc-version=4.2.1 -fno-implicit-modules -fskip-odr-check-in-gmf -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/test-a127ed.o -x c++ ./test.cpp
1. <eof> parser at end of file
2. Per-file LLVM IR generation
3. ./test.cpp:7:5: Generating code for declaration 'main()::(anonymous class)::operator()'
#0 0x00007fb2fe00915a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lib64/libLLVM.so.18.1+0x60915a)
#1 0x00007fb2fe006904 llvm::sys::RunSignalHandlers() (/lib64/libLLVM.so.18.1+0x606904)
#2 0x00007fb2fe0099eb (/lib64/libLLVM.so.18.1+0x6099eb)
#3 0x00007fb2fd453710 __restore_rt (/lib64/libc.so.6+0x40710)
#4 0x00007fb305e3e735 clang::ASTContext::getTypeInfoImpl(clang::Type const*) const (/lib64/libclang-cpp.so.18.1+0x123e735)
#5 0x00007fb305e3f5d4 clang::ASTContext::getTypeInfo(clang::Type const*) const (/lib64/libclang-cpp.so.18.1+0x123f5d4)
#6 0x00007fb305e3e740 clang::ASTContext::getTypeInfoImpl(clang::Type const*) const (/lib64/libclang-cpp.so.18.1+0x123e740)
#7 0x00007fb305e3f5d4 clang::ASTContext::getTypeInfo(clang::Type const*) const (/lib64/libclang-cpp.so.18.1+0x123f5d4)
#8 0x00007fb305e3efd2 clang::ASTContext::getPreferredTypeAlign(clang::Type const*) const (/lib64/libclang-cpp.so.18.1+0x123efd2)
#9 0x00007fb305e3dde1 clang::ASTContext::getDeclAlign(clang::Decl const*, bool) const (/lib64/libclang-cpp.so.18.1+0x123dde1)
#10 0x00007fb306f9147d clang::CodeGen::CodeGenFunction::EmitAutoVarAlloca(clang::VarDecl const&) (/lib64/libclang-cpp.so.18.1+0x239147d)
#11 0x00007fb306f8e14e clang::CodeGen::CodeGenFunction::EmitVarDecl(clang::VarDecl const&) (/lib64/libclang-cpp.so.18.1+0x238e14e)
#12 0x00007fb306f8dcf0 clang::CodeGen::CodeGenFunction::EmitDecl(clang::Decl const&) (/lib64/libclang-cpp.so.18.1+0x238dcf0)
#13 0x00007fb30710b60b clang::CodeGen::CodeGenFunction::EmitSimpleStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (/lib64/libclang-cpp.so.18.1+0x250b60b)
#14 0x00007fb30710aab3 clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (/lib64/libclang-cpp.so.18.1+0x250aab3)
#15 0x00007fb307116a7c clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) (/lib64/libclang-cpp.so.18.1+0x2516a7c)
#16 0x00007fb307173ca3 clang::CodeGen::CodeGenFunction::EmitFunctionBody(clang::Stmt const*) (/lib64/libclang-cpp.so.18.1+0x2573ca3)
#17 0x00007fb30717494c clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) (/lib64/libclang-cpp.so.18.1+0x257494c)
#18 0x00007fb30719632c clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/lib64/libclang-cpp.so.18.1+0x259632c)
#19 0x00007fb30718f966 clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/lib64/libclang-cpp.so.18.1+0x258f966)
#20 0x00007fb307182683 clang::CodeGen::CodeGenModule::EmitDeferred() (/lib64/libclang-cpp.so.18.1+0x2582683)
#21 0x00007fb30718021e clang::CodeGen::CodeGenModule::Release() (/lib64/libclang-cpp.so.18.1+0x258021e)
#22 0x00007fb30722e5bc (/lib64/libclang-cpp.so.18.1+0x262e5bc)
#23 0x00007fb307164744 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/lib64/libclang-cpp.so.18.1+0x2564744)
#24 0x00007fb305d540b6 clang::ParseAST(clang::Sema&, bool, bool) (/lib64/libclang-cpp.so.18.1+0x11540b6)
#25 0x00007fb307bf4879 clang::FrontendAction::Execute() (/lib64/libclang-cpp.so.18.1+0x2ff4879)
#26 0x00007fb307b6d544 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/lib64/libclang-cpp.so.18.1+0x2f6d544)
#27 0x00007fb307c72132 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/lib64/libclang-cpp.so.18.1+0x3072132)
#28 0x0000000000214c42 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/bin/clang-18+0x214c42)
#29 0x0000000000211915 (/usr/bin/clang-18+0x211915)
#30 0x0000000000210a74 clang_main(int, char**, llvm::ToolContext const&) (/usr/bin/clang-18+0x210a74)
#31 0x000000000021ffba main (/usr/bin/clang-18+0x21ffba)
#32 0x00007fb2fd43d088 __libc_start_call_main (/lib64/libc.so.6+0x2a088)
#33 0x00007fb2fd43d14b __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x2a14b)
#34 0x000000000020e335 _start (/usr/bin/clang-18+0x20e335)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMmU9v2zoSwD8NcyFoSJQs2YccHLvO624LFE2372hQ1EjmK0VqSSpN3qdfkJIT03WbuFtsNwgSmxrO_IZ_ZkYks1a0CuAazW_QfHPFBrfX5vqdUF_Sf1xVun68XuuuF1KoFrs94EZLqb_6b1zXgAfrP6Ii4ZKpFhPrapRtOKI3iN7QDBUJ5obZPdjQmwddYGYYzW9udV1p6bAU6guabxBd7J3rLcpWiG4R3bbj85k2LaLbvxHdLqs3f8M_TcoQXaJkg5LVjXZ7fLteY6Zq_P7u8xozzqF3k7UaEF1jq7Fw2O71IGtcAb5nUtTh6WzUgopk_J3Ax1YHXS-ZA5St3WMPinWA36PszfjUOjNwhwcl_j3ATmr-BaNy6okxPn6A6OI9ogWiyyBSbiar5QZlUw-hHO6YUIguDmJPmiZL3eDgYVKA-WCsNrt2YKZ-UuKF_TzSInochtbthcVscBpbkM1kA0_9jp1giC6i7nSJsidJb6HcjJRPdp89Oozj9PVc451j_Auuh673Ex2akhkOPx-Mbg3rMDPt0IFyfilgRLeDNYhuKz8627DOSLrAhPMUE2dELwE_LIpdkRMD9Z45IoUaHkirBkygE47o6i9MOgOSPRAmJSbeei0MZgSTWlhWSSCNAcCES2CGMOtIBY02QCrGv4Cqn-WkvO_IPRjRCDChmTNTk3smByB-jVhM_EySRsixATuwbsb7foTQnDmhFel0DRJbx5zgmHSNYR2QXgvlwKBsE0Cbjrk9AWOUxqRpesK1coZxh7KNVpg0ShOjB1UL1RIvi0nHtRpXjDaEScGsJ2oG9VWomjjvg0XZhmLimGnBEd4PfvxIkWPiBgWhoQUFxnPVUA1tC8Y_EqpF2aatK0ya0E7G_Tz6UwuPjeh2rztAdOu3dfoXotuP0GuL6JZ99Rowabi-B8Na-LnuBqweDAff43R1zGahZ3VYKIhu_VIJY6qYJMI-WgfdD7q1nCO6PbOevKr8IHvyRyguBx9rtocA4oV_l93zen4jjd9DX5mpL0J4nr9n1T9S4PeVfJ3or3H3vPi35uHBf-DHGK8SGlmfRE8ya9iCvQHOHNSkY9z4CAHGaEOk6ITD6RKTplUD99HKCq1QtslndJaOYUN0vRRcOB-HBhlihP0ieqJrQ_ge-BciFGm7xu_XhwcCDz6tCq28YPSFa6kNqQVrlbZOcN_G6tpY0WKy2e1u1-vdH6vPb3abP1cft3S33r7dre7eo2yTYqK9p67r_V-wjrCUllDPNCYPePIVz6aHPoSOCSOdEgbK1qAblL3BPTMWDGYO-2CtG-yj7yhMD9kFTIjJ-N27z-_x249jjAvBZxTMJsHIXrYqUbaa-0x0O8kfap9GG1wDl2xUghEtn1O4T26-kFkwpdVjpweLuWTWPj3SvVemzSROyynDIpolOHlIkiQpm4o2kCTLdM6wzztjT_toxw8fjFAu5NNPhnFAdPEsZNjXnbbOAOtC6bHGQrmQ9r09v-6LfPzvh2Nm9SxdzFJEb5KHIhh8KrE8UXpCVCyT_BzRx0HdiVYx-QdTtQRjD_XMK4x6nZFRejoMS6heh7-EKtKUHWuq83lWpgne7QxYpw3sjPtWLfc6i6AwT8o0ifTlz_qyZA4ZlNkcjwErDMPq7tNaKwcPbvzegvv02MNb1ei3XS99hfUs7J_gkLQRXfnBCp_PEIXKh_d95G1Kg_UIb36C18zr_JV4vxjNW47Qim9GLk9-58jl8cSW_78jtzgduaamL6B9MOAzAtSeZiVFq371-DU1jSCXJ5B1DekLkBvg8gybbz5iW-NKa_kzjB7hidGHsuSYsWiWaV7Wx4xrXcMtqOjLdlA8JIrQ-KYTbjU4_ZmZlfR1R4z-mZlj-uJsADzPS7OAE_GmMe8C0hwu552gfiFpAIlI6QlpzZvkctJvMf8LRo8QMWbHjGWaVEVSXc5456snuHOdi0l9S7Rqn3Pkyhj2-BEalK2PN4Rz5rlD9uYS7-YBPvIuP_GOsSr7Ce9-t18eO_JrHvuVFqzkl_u11l3vX5a9N38Kt9eDu-O6h9jXY6mjVXeIQOvv2l217WcmB7iT-nyl9T1_gzuRv0Xsb5lx9hPzeGi50fXjD-fzAtaAErGWJ6z5Mr9wbqbCGtbhvO6Y81bqiskxIhwvuqf-42r8rrXbg6DP0D8VQubBn8jhRezwssjoiw6_Dy9Zz1MzOnag20AjlBgdeo37Y3tYbJfOX6CN3FnG7iyaZVH8nDv_QzcC5bEbNDlxgxaLF7fMqRubqV763lvLd2m8sYgmPaFJaPpi0j6m-QgSmIWLQbydCCTKySWlMK_4q_UVQTzSd5I_i7zMowr5ZjwvXWtlhw7M2Di-DX4yTNnxtO9fSpxkmKPK8MINGhAixvj1rJ7nSRWt6A_MWFjdfTqJidCxk0h_qDlfW22mwVTEEmeuqskX5fKYZWu816peHcfuB-CDu3Tym6A7Mh6nkaqo5_FkrafrmLfKOqY4ROYnomiMTmgvm6km2I8A49zBS5pm0UvNhPLMeT-dnn-bsiM_Loomfl-kGY3ADjF-_KFpznOKOU930wnP-fpnz06KnjWO2-ga32tRR3znbjfGAQtWI6zlCVa6TOcvq_FSx2qeDpgOahJWTuvi4F84LBrpA-xJ0fdJazlt1zNZ9Qco3lKEkp6gNE3Fwk3Yy7q8aKSLxsc8WZ0sFni38xO_s44Zt-NMyt2R9vMHPpQli0WkOTvVnOZVrDmMW57cvnt7s97RGZ3NXzCR5lHp_nSmNA1EAlk2x6PyF4ciCD9rO1y4XdXXWb3MluwKrtMyTZaLeZonV_vrMmkWFadlWbGsqoBSSPJqXlZlzVmR8-ZKXNOE5klG0yTNlkkyWzJap7RMoCgqVi0rlCfQMSFnfk3MtGmvhLUDXC-KZJ5fSVaBtOFOmdLpIJ-i-ebKXIfrs2poLcoTKayzzxqccDJcRK9Dj_kGrw2ze_x1D2q6aK6hHvh4FS1suPMNRxygOFgsFJasq2qGOevdYMBeDUZen1wqC7cfqhnXnZ8Tv6DHf6Q3-i_gDtFt8MQiug3O_CcAAP__wh83lQ">