<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/106572>106572</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang] crash with a templated constructor
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
radekaadek
</td>
</tr>
</table>
<pre>
Hi, Clang and Clangd crashed on the code below:
```cpp
template <typename T> struct S {
template <typename T1>
S(T1) {}
};
template <typename T2>
auto f() {
&S<T2>::S<int>;
}
int main() {
f<int>();
}
```
I have compiled it without any arguments and here is the clang dump:
```
test.cpp:8:11: error: use 'template' keyword to treat 'S' as a dependent template name
8 | &S<T2>::S<int>;
| ^
| template
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: /usr/bin/clang-18 -cc1 -triple x86_64-suse-linux -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 pic -pic-level 2 -pic-is-pie -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/ard/prg/issue -fcoverage-compilation-dir=/home/ard/prg/issue -resource-dir /usr/lib64/clang/18 -internal-isystem /usr/lib64/gcc/x86_64-suse-linux/13/../../../../include/c++/13 -internal-isystem /usr/lib64/gcc/x86_64-suse-linux/13/../../../../include/c++/13/x86_64-suse-linux -internal-isystem /usr/lib64/gcc/x86_64-suse-linux/13/../../../../include/c++/13/backward -internal-isystem /usr/lib64/clang/18/include -internal-isystem /usr/local/include -internal-isystem /usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/test-5527a0.o -x c++ test.cpp
1. test.cpp:12:10: current parser token ')'
2. test.cpp:11:12: parsing function body 'main'
3. test.cpp:11:12: in compound statement ('{}')
4. test.cpp:7:6: instantiating function definition 'f<int>'
#0 0x00007fe32cdd9a09 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lib64/libLLVM.so.18.1+0x9d9a09)
#1 0x00007fe32cdd7430 llvm::sys::RunSignalHandlers() (/lib64/libLLVM.so.18.1+0x9d7430)
#2 0x00007fe32cdda1fb (/lib64/libLLVM.so.18.1+0x9da1fb)
#3 0x00007fe32bc41290 __restore_rt (/lib64/libc.so.6+0x41290)
#4 0x00007fe335392eff clang::Sema::CheckTemplateArgumentList(clang::TemplateDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo&, bool, llvm::SmallVectorImpl<clang::TemplateArgument>&, llvm::SmallVectorImpl<clang::TemplateArgument>&, bool, bool*) (/lib64/libclang-cpp.so.18.1+0x1b92eff)
#5 0x00007fe335451757 clang::Sema::SubstituteExplicitTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo&, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, llvm::SmallVectorImpl<clang::QualType>&, clang::QualType*, clang::sema::TemplateDeductionInfo&) (/lib64/libclang-cpp.so.18.1+0x1c51757)
#6 0x00007fe3354565b5 clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, clang::QualType, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool) (/lib64/libclang-cpp.so.18.1+0x1c565b5)
#7 0x00007fe335310e83 clang::Sema::ResolveSingleFunctionTemplateSpecialization(clang::OverloadExpr*, bool, clang::DeclAccessPair*, clang::TemplateSpecCandidateSet*) (/lib64/libclang-cpp.so.18.1+0x1b10e83)
#8 0x00007fe3353114a0 clang::Sema::ResolveAndFixSingleFunctionTemplateSpecialization(clang::ActionResult<clang::Expr*, true>&, bool, bool, clang::SourceRange, clang::QualType, unsigned int) (/lib64/libclang-cpp.so.18.1+0x1b114a0)
#9 0x00007fe334fb3c15 clang::Sema::CheckPlaceholderExpr(clang::Expr*) (/lib64/libclang-cpp.so.18.1+0x17b3c15)
#10 0x00007fe3351146de clang::Sema::ActOnFinishFullExpr(clang::Expr*, clang::SourceLocation, bool, bool, bool) (/lib64/libclang-cpp.so.18.1+0x19146de)
#11 0x00007fe3354c200f (/lib64/libclang-cpp.so.18.1+0x1cc200f)
#12 0x00007fe3354d4e61 (/lib64/libclang-cpp.so.18.1+0x1cd4e61)
#13 0x00007fe3354c1f63 clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/lib64/libclang-cpp.so.18.1+0x1cc1f63)
#14 0x00007fe33550d937 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/lib64/libclang-cpp.so.18.1+0x1d0d937)
#15 0x00007fe335458e47 clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) (/lib64/libclang-cpp.so.18.1+0x1c58e47)
#16 0x00007fe334fb296b clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*, bool) (/lib64/libclang-cpp.so.18.1+0x17b296b)
#17 0x00007fe33531237b (/lib64/libclang-cpp.so.18.1+0x1b1237b)
#18 0x00007fe33531214b clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/lib64/libclang-cpp.so.18.1+0x1b1214b)
#19 0x00007fe334fb77c4 clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/lib64/libclang-cpp.so.18.1+0x17b77c4)
#20 0x00007fe334fd587b clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/lib64/libclang-cpp.so.18.1+0x17d587b)
#21 0x00007fe3342df54d clang::Parser::ParsePostfixExpressionSuffix(clang::ActionResult<clang::Expr*, true>) (/lib64/libclang-cpp.so.18.1+0xadf54d)
#22 0x00007fe3342e1418 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/lib64/libclang-cpp.so.18.1+0xae1418)
#23 0x00007fe3342dc0a6 clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) (/lib64/libclang-cpp.so.18.1+0xadc0a6)
#24 0x00007fe334348b66 clang::Parser::ParseExprStatement(clang::Parser::ParsedStmtContext) (/lib64/libclang-cpp.so.18.1+0xb48b66)
#25 0x00007fe33434634c clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&) (/lib64/libclang-cpp.so.18.1+0xb4634c)
#26 0x00007fe334345a91 clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) (/lib64/libclang-cpp.so.18.1+0xb45a91)
#27 0x00007fe334350045 clang::Parser::ParseCompoundStatementBody(bool) (/lib64/libclang-cpp.so.18.1+0xb50045)
#28 0x00007fe334351386 clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) (/lib64/libclang-cpp.so.18.1+0xb51386)
#29 0x00007fe33436da34 clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) (/lib64/libclang-cpp.so.18.1+0xb6da34)
#30 0x00007fe3342a6268 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/lib64/libclang-cpp.so.18.1+0xaa6268)
#31 0x00007fe33436c5e7 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/lib64/libclang-cpp.so.18.1+0xb6c5e7)
#32 0x00007fe33436bf98 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (/lib64/libclang-cpp.so.18.1+0xb6bf98)
#33 0x00007fe33436b004 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/lib64/libclang-cpp.so.18.1+0xb6b004)
#34 0x00007fe334369225 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/lib64/libclang-cpp.so.18.1+0xb69225)
#35 0x00007fe33428ec6c clang::ParseAST(clang::Sema&, bool, bool) (/lib64/libclang-cpp.so.18.1+0xa8ec6c)
#36 0x00007fe33652a916 clang::FrontendAction::Execute() (/lib64/libclang-cpp.so.18.1+0x2d2a916)
#37 0x00007fe33649d374 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/lib64/libclang-cpp.so.18.1+0x2c9d374)
#38 0x00007fe3365a5ff6 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/lib64/libclang-cpp.so.18.1+0x2da5ff6)
#39 0x0000556ff6366650 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/bin/clang-18+0x12650)
#40 0x0000556ff6363398 (/usr/bin/clang-18+0xf398)
#41 0x0000556ff63620eb clang_main(int, char**, llvm::ToolContext const&) (/usr/bin/clang-18+0xe0eb)
#42 0x0000556ff636f6d9 main (/usr/bin/clang-18+0x1b6d9)
#43 0x00007fe32bc2a340 __libc_start_call_main (/lib64/libc.so.6+0x2a340)
#44 0x00007fe32bc2a409 __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x2a409)
#45 0x0000556ff635fb15 _start (/usr/bin/clang-18+0xbb15)
clang++: error: unable to execute command: Segmentation fault (core dumped)
clang++: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 18.1.8
Target: x86_64-suse-linux
Thread model: posix
InstalledDir: /home/linuxbrew/.linuxbrew/bin
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUW11z4jiz_jXOjcqULX_BRS4IhN3UyZzJGbJ7LilZaoN2jOUjyRlyfv1bkvmwHENgZ9-td6dSYGyp--mnpe6WrCFK8XUFcO8lD14yvyON3gh5LwmD78R83OWCvd__yj08Q7OSVGtEKtZeMUQlURtgSFRIbwBRwQDlUIofXjT1grkXHD7ToP2jdd3e0bCtS6IBedFMv9dQkS2gVy96RErLhmq0RF720LZFaLh16EWPhxZLD49fQw9PbLdsvtebzb3ooYtkWBI-SiKNFqjw8PggqpXv4XTpRbO2YTT1oqn5ySttfz-ctHVU8UqjLeHVB2GoOPW1zwYkHAjrCnxCG_JmWN7WvASGuEY_uN6IRiNSvSMi180WKq2shzYgAXHV-sX6jTXb-pxfDuQoPTIuiqZjL5qGoRdNEUgppLloFCAPZwcGPZyh7_D-Q0iGtEBaAtHm-dI8IAoRxKCGikGlT_4zdB9YQGiMvGyG0HXsIvvPdPCSx_6t078jPNvi5flxunxEqsm3XCOC8maNJNRCaoN5o3WtjEK88PBizfWmyUdUbD28KMu3w5dfS_EHUO3hBVeqAeXhhaWYV7RsGLQUm5mAckK_a0komNlSS6iloKAUMKREI9vbpidRSlBONDAkmwopKnmtRy3kpSb0u-usYIRepFhLsj052XjEw4tGSQ8vcjPKFtbNfjhGPqUh8rXkdQloN05XaeyrRoFf8qrZIR-2XPsi_wP5Wwkl2fmkLJFvVDIuEfGRz7gieQl-IQGQT0sg0idK-zkUQoJv7ISKndpZnt5A8oKDtLcpkcx_I2UDvnG6Qr6ZC37By_YGOgy2FoSgRHNR-VvBoEQ1p8ivOfVLeIMS4fYHV37NAfnbQpIt-LXglQbpRXMLv9gSvfFBykogvyhqn4rK-EJ70VxUyC8q4UvRVIxXa9-0Rf6WiqoNN0L6pOREGZxFU_3gFfO1sUx50RwjXxO5Bu3TujF8-mmMfN1UYG-soQJpADPIm_UapHnEq7UXzdcsR35h7_vttG2tZNzA9vBiI7bg4QWRzMOLWq4PYwz5BRVvIMkabu0ooR1rpu1phJQ8T-PDGPHwwowSS19FSp-rd6Vh-7H1mlIPLz6MINM_8vBiNPr4sZ8URpWHH-zfIoz-VmVDUv5uAGaG_CCSXaP35JOTxIv9BCXllU3_vGlDjT9qhJ25oF3NVzVq4R2bFgxqCdRERH9LqDRT2CYev-QmcocT5BfrqqEmyCguKi-axyM8CpFfqO-89gWTPt0A_e7zyl9vCzOBdjsfdhRqM3PMvHZ-UFEK6TNO1pVQmlNzjzAmFV8jf75a_TKbrX6d_v64mv_v9NsCr2aLp9V0-cWL5iHyhTFBb2vzCUr7SYIzEowE8ndoPxCO8a0N4eHokJ6OKTbE5iMwgZw2Upo8WROpQCItvkNlcqmpDXDWSsAjp3N4kGA78WqNiqaixjpkKjbTuy0-9t2jAQAnGbyyZYUJj0hposHkGGSrk2xfULVorKz4o6zMi6ZpK0lpUmlOtIOJQcErbi89nHULoOxYYkUBCnZBEARZARGmjE1IMEE2E9uiQL2r9uJF8krbPPnaJtvxqZEkP1ZCmWpk6-HUJFyjyNRfxpjjhCh5_vz8-5eREqNwPAo9_BDsJlbh0UqDKOwhyuIoGEL0ramWfF2R8ldSsRKkOhR9Vyg1Mh2luKeUhEV-lSTT0JEUdSXlNA7xJECrlQSlhYSV1B_FUiMztQJtc0de3JEXJdEEQ1G01eW-bIMtaa9mZi6-7mux6b5oeeZKe3jc6XBoMQdaenhq3NUVZxPZ87426D0cEv5UFWLv9VyI0nyfnLXckrL8HUyyf9rWpRfNLkizQzP9SwQckLTf08Fh0ZZutK4dj4a5ZdhxQeK4IE7CLMmGXbBscqW5bjQ87uqSU677GJXrjMV-sl52yie8X0nXHFhDgf007f_TkPL1vYZTx6GHH4xQR5ZOxrLGWn-05Xo3UesFx01pz01pkifDbmqZ-De7pt_yxIxz-6DmKL7P6DW8HUb6LfwZehz-MjfShAGMo2H-voES5RssebUuoc_TsgbKScn_fx9Bupx-fQNZCsIed7XcM3SYqs5ApeWUmlXcC-HyPOdG04xUjDPzA_StM91a6FAw7lEQxiS4SMG0Ygu-u52IqW35DVRTand2dajRsoFzMW0gaH8j1bo_urqDrqnsvhM7m53P8mRocHiadHmKizyi4ZmpZpPSS0kobETJQLbmjYcMvh5RZhUeEZmiIXA8F4ZxymAY0ZTqr9WCV1xtFk1ZXgD0SWLsO-TWKTixIB0rQjeEURwExfVT2jZ35GFXHoshDa-XZ5s78qIevrBIz4QImwmXetsrPto7fW6_NKXmz_AG5VA4RXbL4Nb8YLE54N1KKgnYJDqTxp-OBTWcwvOhmO4ZdKle-hDbf37QMAvbsatfnowhPmNXm_e-gW5k1UaFoYR3bWF4e8oxyBzoaS-O4Eman4HerhrhNwVfixZhF_t_ky2wDvBTKTOVkrx_g8KNsj1rTJB1rP2a_zF7MmvpglCb-Q-DcNCJlzo6XW4JcYYLh6x-fsZRNrBGORvETXNHXj_Z4TA-Q_5Dw0t2yN3AZmQobC6pGCr7hqPpb5VsEyh7FuJ7U18bc09-_dLYzcJh9x7EffDrxek6UJXc6rbcsujQ3M-VWUbjCzT_BeT-82jLLCtd2nDg0saScXZmdNqE_g-m7QaaLAsOTU7FEGNWJDHranmx21ud6xehdMF3RjsoxUW1bIqC736mPL3aAGLhOfixix_COBxfxD8jSp_Au7C7jU07-_u_eMU-js3-Kqvb1aRG032p7Tu3n9lOINYgx-Ko5zEakPSixVP7vthUQ9fY3QN_g28MEAepUzDFUTzO08tIDb7lYSvzPER7zUwpOBOVht0tq5HconBgJj2YaRTTizCPEL9Kk6GJtNNzWmiQU60lzxsNytnh7OyH9OqIUz0b4WZwR-QTyy8GjH6Iavt3QQ5q67e4gV1DnsNu2mM3IZPwT7D7n0LnDVQYSx0qMpeKJAji5HKs2u_vHyl5EOzdw-Mb02NuNTlQxj0oYTS-PDUPxX0fSm_b5cyQc_zb5tSbhpXF5xjgVkVRykgUX2XAuYXYS_tK5jDkhLxm6ByWm09VITrLzLO9nomG0wxr99ZvGlTWzi4RkVvnYJLi9HICNBb-IkVTn7V_WQP9aMeJmeHJ8nlsuSo67aEuhLT7UU8Vv5EjYilwOAp7g4UmkH3K0VfZGTJP-_eiA0np9nD6ocVF3tudTLsZWHCQN40WY6jDBO4xkReTz0fLPgQ7hJydQ385H_1R8jN8GHMdPqI-H0FwOYw87tqB4Kamv4GDW6wMAjdG9AqxdILx5cTzKmq7nfZxo-RrTf6vgRct---G9kHFLm4G0u5pufVFsKaEp20t5KHIvCkXWPSOeW4Bh8dA048F3HT52lvbGURDW-PXRxqryYHiVDtpgskkdPLqQprYWbF2gXRYEgFtDA3Dr5-HdWNmZTvKnfoijScsypzBPGtPIcp2e5KCo36PyN3Rc9He5CdMrX4H4NhlhyRFkbpLWgvlhPPtmCvGl-y4aX5gZvU6wA7VRJKkRZFGaZomAaI0XO0Pgw5vB26IPG3r7Rfvzj08Q2-CMwff0Om_dnWO0yToooqDHqoomow_k1JEboSLw54QHMB-H-RgnH2d00K3SHsboK9ClPuMP7CTfhYIBODsNMS4B6RI2cQetv2UmDxlE0dU74wEJoar1cq4fKU0kXpFSVmuOsKHT0vYjo7kuC85DiauZEtaHPzy_PQwW-ERHiWfqIgDF3zi8pAUeZigVvhnTOR5561VOyHaE2zOmd-K5CUgLRC00wlRsd2SipmHS1ib4t1OKlSQprQ6qZBgj68C-1S8vY-KfWQ4yEYFseebWWM1K3uwxohuFCD_zd4DQLwzo7t60P6IGDKzdDRun7zaA5xG58dzbW2DjQTCkD1_ak9VCcX3j2xoKEtgcy73x273xy9t_1zCDw8vRt0fhm_3hPUdu4_YJJqQO7gPMxxP4iTNJneb-zRMw5SkJEvyjE1wHGUpnsAkn4RjFhKa3vF7HOA4GONJmJiEO8riBKd5EAJJcTaOUy8OYEt4OTLzbCTk-s4eBb0PgzTJ8F1JciiVPeCP8d4T2Evmd_LeHtvNm7Xy4qDkSquTCM11af9XgD3q7yXz_RHnH1xvEDkes2aoc4b2rpHl_Z8_VL3H-3aP_xUAAP__N2-jLw">