<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/101754>101754</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] [frontend] crash when instantiating a parameter pack in a lambda constraint
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
xtactis
</td>
</tr>
</table>
<pre>
The following program causes the clang frontend to crash.
```cpp
#include <concepts>
template <typename... Ts>
struct Overloaded : Ts... {
using Ts::operator()...;
};
template <typename... Ts>
Overloaded(Ts...) -> Overloaded<Ts...>;
template <typename... Ts>
auto foo() {
return Overloaded{
[](std::same_as<Ts> auto) {} ...
};
}
int main() {
foo<int, double*>()(42);
return 0;
}
```
This is likely a regression between clang++15 and clang++16, as 15 has the correct behavior, but all later versions crash. Happens when compiling with -std=c++20, c++23, c++2b and c++2c. I wasn't able to find a version of GCC that has the correct behavior, all of them seem to believe this is an ill-formed program.
Godbolt link: https://godbolt.org/z/7czh4ndcv
Backtrace:
```
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: clang++ -std=c++20 main.cpp -c
1. main.cpp:19:27: current parser token ')'
2. main.cpp:18:12: parsing function body 'main'
3. main.cpp:18:12: in compound statement ('{}')
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0 clang++ 0x000055b65c67da28 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 40
1 clang++ 0x000055b65c67b9ee llvm::sys::RunSignalHandlers() + 238
2 clang++ 0x000055b65c5fbee9
3 libc.so.6 0x00007fe1ad93f520
4 clang++ 0x000055b65f187d78
5 clang++ 0x000055b65f1413cb
6 clang++ 0x000055b65f13d876
7 clang++ 0x000055b65f13d2ef clang::Expr::EvaluateAsConstantExpr(clang::Expr::EvalResult&, clang::ASTContext const&, clang::Expr::ConstantExprKind) const + 991
8 clang++ 0x000055b65e6617b3
9 clang++ 0x000055b65e65ba4f
10 clang++ 0x000055b65e65b7e0 clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) + 624
11 clang++ 0x000055b65e65e79f clang::Sema::CheckInstantiatedFunctionTemplateConstraints(clang::SourceLocation, clang::FunctionDecl*, llvm::ArrayRef<clang::TemplateArgument>, clang::ConstraintSatisfaction&) + 767
12 clang++ 0x000055b65ec021c6 clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*, bool, llvm::function_ref<bool ()>) + 3190
13 clang++ 0x000055b65ec55029
14 clang++ 0x000055b65e5801cf clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 47
15 clang++ 0x000055b65ec03832 clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>) + 2274
16 clang++ 0x000055b65eadeb69 clang::Sema::AddMethodTemplateCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::TemplateArgumentListInfo*, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, clang::OverloadCandidateParamOrder) + 633
17 clang++ 0x000055b65eaf78bf clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation) + 1183
18 clang++ 0x000055b65e80499a clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) + 2938
19 clang++ 0x000055b65e81bf4a clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) + 58
20 clang++ 0x000055b65e4c23b2 clang::Parser::ParsePostfixExpressionSuffix(clang::ActionResult<clang::Expr*, true>) + 5138
21 clang++ 0x000055b65e4c39c2 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) + 2194
22 clang++ 0x000055b65e4bf68f clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) + 223
23 clang++ 0x000055b65e4bf599 clang::Parser::ParseExpression(clang::Parser::TypeCastState) + 9
24 clang++ 0x000055b65e51d931 clang::Parser::ParseExprStatement(clang::Parser::ParsedStmtContext) + 49
25 clang++ 0x000055b65e51bea7 clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&) + 1047
26 clang++ 0x000055b65e51b85f clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) + 303
27 clang++ 0x000055b65e523be1 clang::Parser::ParseCompoundStatementBody(bool) + 1905
28 clang++ 0x000055b65e524b34 clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) + 164
29 clang++ 0x000055b65e4778de clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) + 4094
30 clang++ 0x000055b65e48ff1f clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRangeInit*) + 4863
31 clang++ 0x000055b65e47653c clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) + 988
32 clang++ 0x000055b65e475f81 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) + 417
33 clang++ 0x000055b65e475281 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) + 1969
34 clang++ 0x000055b65e4737b4 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) + 1476
35 clang++ 0x000055b65e46f7ce clang::ParseAST(clang::Sema&, bool, bool) + 782
36 clang++ 0x000055b65cedf847 clang::FrontendAction::Execute() + 87
37 clang++ 0x000055b65ce53274 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 788
38 clang++ 0x000055b65cf9688f clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 639
39 clang++ 0x000055b65a89a2b6 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 2582
40 clang++ 0x000055b65a897e81
41 clang++ 0x000055b65ccbf139
42 clang++ 0x000055b65c5fbccc llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) + 140
43 clang++ 0x000055b65ccbeb76 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const + 326
44 clang++ 0x000055b65cc81e7c clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const + 460
45 clang++ 0x000055b65cc8231e clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const + 142
46 clang++ 0x000055b65cc9fab0 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) + 912
47 clang++ 0x000055b65a8974bd clang_main(int, char**, llvm::ToolContext const&) + 11549
48 clang++ 0x000055b65a8a4f11 main + 33
49 libc.so.6 0x00007fe1ad926d90
50 libc.so.6 0x00007fe1ad926e40 __libc_start_main + 128
51 clang++ 0x000055b65a894495 _start + 37
clang++: error: clang frontend command failed with exit code 139 (use -v to see invocation)
clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/md/bin
clang++: note: diagnostic msg:
********************
PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/main-568d09.cpp
clang++: note: diagnostic msg: /tmp/main-568d09.sh
clang++: note: diagnostic msg:
```
[main-568d09.zip.zip](https://github.com/user-attachments/files/16475445/main-568d09.zip.zip)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUOltzozyWv4a8qOICcX_Ig-PE3ZlNT7Kxd2Z2X1JCHGxtA2Il4U6-X78lIWxwDJ3umZqa6UonNhyd-03SIVKyXQ1w44S3Tnh3RVq15-LmTRGqmLzKeP5-s90DKnhZ8h-s3qFG8J0gFaKklSCR2gOiJal3qBC8VlDnSHFEBZH7hePeOe7SidzuhzaNfYJ9VtOyzQE5_orymkKjpOPf29fmt4KqKYkyIOq9gZpUsFgs0PYEKJVoqUJPBxAlJznkyPGXaCs1mBPfdkAIIdRKzbleuXT8JW9AEMWFgxMHp4vFwvEtrBPfnT5_losTeQcnhriDU3Tt-PcDzhx_1b3y73-dAmkVRwXnHcNj0QSoVtRDSsO3-l9nWQcnUuWdAiSp4JVIw5NmU-PvEcd3SLN5xDBSSXw35JzVClWE1ZfY0tz6K1YrB69QztusBAcvtUQG2MFJgPVf_6Mo7gV6vQt1X7d7JhGTqGTfoXxHBAnYCZCS8RploH4A1J1POvjWwbdeiEidj55Emi0ikReiPbFOzIUAqlAGe3Jg2jtWKGsVImWJtH0EOoDQJKT1bvSVNA3UEv3Ya3q8alip3ewHU3t0bZR9Rzt62NXY-i_-8EvW8Wa_0QV6QD-IrB0cK0SyEnQ0FazOEenpI16gL6sVUnuiZrnXnPNCv66QBKg0qgxKBgdAyqqQ1IiV5XXBRQV5H9uLoZW_8DzjpUIlq7_r8Nor1ZhAwmsHr3fd2wUXOwev_3DwOqZ_7IM6p4chkltCvytBKOiFl0z6_Hi_3Nwj2WYVU4igrN0hAQ0XSnN9RpOpfZstKK8cvC7LQ__nuhH8f4EqB6-ZlC1IB6-NdvtkYxSlbYeyIz94hRoBjeAUpIQcSd6K7rFeSaTklBEFORJtjSQVrFFWPRtF6HeUt1VzFMpddCH3bHMkEbu2glrntuXQ_z64h4mjBW0adE07VN7i-Mzxl17q-EscGzStEFAr1BAhQSDFv0ONHBybqIq7xdjyMcSQ6F9YY9ArtaMWbU2ViRmev2sUXTBbHP4sDtZ5PG_rHElFFGgxkQnuuEsjlqUzVZno4K1C8r3KeIl0tpN6HdSyFYDeeYv25ADIGLQDYn-A0ATfeSvQ83L7FXGBJChjT6gPTPDakD8QgZzIfXz8y7fXzX9_u316fPif-5dXvcSJXO1IDddJS3HElMk-vd3QyDoIuW-u67phmEUhjeKc4MQwZNPnuy0kz4LVysi27XwpOQEJ8uOVSyWAVA426cYkwxRpAoH1em9Md0w1SwEuUX1p6w3b1aT8Suq8BCH7_ItvEfYT6wHTmMMiA7CG8REqWUYXki8iCxQX4JE89YsQWy6DSVyFl8R5bEmGM0osvMDzadYBRjP4_DyJow4snsXn5xgKC2DUcv_WCPvpQMqWKFjKFa-lIrUy73AyCf0Csi2VtdMAarnZrnRT86YQ1ag-QpzwDGn9B6tzbRKzyBgmTb1OqmRaKIgiL878Di6dkR6iMCNBYX3IndKmBovBHbK7gYpYdvdAvxueBdFeTBSTBTH5YKypP5MK8jugZa-CpVbByS-XQpD3Fyh0JzfWy2mBLvvDNZuKlOVfgCouHqqm_Li0X3Su7m9tqdgjHKDc2rZpaVPsI5OTRtqYnP5C6h2cvZlSQNQHVIQDq2Zv1h4Qp8WMoh863zCVZG3Tbi_BiQc51nzH9iOnpGNqxHmPRVvmkzY5V5k1y6-oI45sdfDwjDqoiz0aXVbHmtVM7s9ZuYO8veB756q6KOysMxnEkF8U3bhJW5sNUI5srzqn4nO_kkepTgxaOR7qgtsFn-T0pKInwXasJuWKlOVS7HSHPgy9jPNyjLcv5K_CmFwDINtnazk70_le2lcdf852Yej2ZdsLZgDDxPXohM-Ltv4rU_tNWxSMMrBFctN0RXLWxSelOnCWf5Qq6P0xnPVHP_HxZVY7Bzn3D_lpP5yJL52SOj_4dMo8Jct_vB_2fvNp__kZw__ZknL73kBnjoFRMI77rBnNmIXkkEXpZbMs8_wbqD0_Ru6K1DnLiYLfsYx-uqS6w38mTJwnvb_97QUoF_lvWfWSPiZbhJJIyQp2ydt_0Sf6_f5RLRtQE3aeW_VMBKmeRA7iWPB824B48ZzpijjJJoL_tmVlrnPXlj9lej_2VBjBO9WMop_yBj7qsRf6UhG_nCq-tUrvlX9Rh-cYOwV4XtJrYK5XS9wgTclPNPCx7_wXE3mKibEP2ahO-82Fl062nImXFcGEWpZUPdX_xmrp1BD2Oyx3xjsCiv1sVHGezXZ98PmZS1WwN429O7oy1fJtrJelSW52e3JRFrxCSrQwyL6hd9wEzvWsAfVTOs_iikh14m_M2RBYw5nv3b7n3H3Oy9VwqU4KevlGmdR-vvSodeyltqRgPOl8QVZESTEr0tKcd-s8_hnBzrjrq5vND3iujwqyIkzTWV5-mwPbnuHZ9szLU9_7Kf1Nf3YzzYL5nG9Upexe-Nh79XzM9V6hlwGJZ_k48vAkdAkmwkThslAglkoJlrUK5KgfGTTSZ020qvo22cftxS3kT0SbzQvnmahbP2TyIrVzCFto3L55xdGkS4deloTzLn1Zff8q-rKbD7ePmbmuIsR-BvM-u7KHjkehb3n-7uBkWKi81A0ttbkKHuIg84NZan13eU7trLWccIyRkboCdzJ-1KezdC6JxHGSw6dYvIOC1ezjFvq5O-ztPYOLz1i473l1nzt1qDJc9di1ktbTdYc8sH3g9qnbny2ZSVF4856uhfgieNtMirhpgH5k9ST8Zbf9eRh_KhFYVtdcmKOmh5qN1JBENgb82bIcR6FPf6qGJzEw_EOtQNSkvJDDfz05fYCYVW23q9LvWMFOu4g0sS2IP3dOFMRhkczH-yCjjUSe9PV_uMTnpp6QOPD6e5PZriAO8U8kvn_rjDnO5f8EKfvkGfV3A8F0oxX7cTafOre8Mee0XX4c8v_UkP9r4VmJ85M6G9ymbb9QiE4biW88b0t4qBou-sbolFiD_v7An2tLgqiI6cfMutxszzYmmuilfbU9D02wJTZZwinkRRKMOqC1nZTouvu-nwfamtONHnfSO1Q8jTr0cRyMT3CrhpUgugPn7r71iHx56Yh1zMvgqPcYwjNFlBZplCRn9zCG1omRwzFrJnOMnlww8nsPnKmNJEkJziJEqfdqhxAuH6bsyYeLiPEzvEIHzvLhZiPszRrMVCySpDEk9lon8CaNRLPC6yUKZtIhDYuMUjrYzK4EkfsXoPwA4r0vXebNS1tvSAHl-0jsT52Yev3lYzCTqCjNIItHR_i5YIfjhm_lrXhVkTo_d96LNjgOnvBGs0dKx18NmlMlWL2zUd8Z6Ljg9ZW-vXle9yUjktFXacCtZUfA-sGrEoQp2b8-Q0fKUjtj1wXb9xpkebbjPN3b-dhmk2Bms0Vp4kFMJ7VlXJ18iPVehaO4OFtYmemQyx3YDOhylLOGAgX9xEUQTntsgn0PflWcP_FMTsvyJ559uKKbuxk52qwhTJxGiT4rvjXshBK8oI_vmfNpStOCZO4UybvB51HOu5DsptT3T1SD7cu8XvCZfZhObEFmB6b65NoTNkG3_HClseW8_HhV3p-ohv1RQTBTS0hCgsLzzMBJF3u2Xw7SqSEFHOX9pVboTgNB4KLXV_36VSoi1OuRhIf74YWZnpwkaRCkIeoWd6zZ2jxY4_hLBELo3GJnfU4TkdTapSCshLybEIM3plWVA_J8raeklYCuD0hxJAEQG9TNdEDsOAXmxQt3EemFvzYdhSLXTWM3yQI_ir3YozTPiiALUzekWUQS149DvwAvOdLdErEDXXjQWxK9RsF1W3-v-Y_6umR1-3a9q9t-LE8AyVHFcyjNnBGX7K17Zap8WUJ-x4x-HLze8wocvK5yB68zVl_UZ82V7mBQzsiu5lIxiipp_N7Okf4dP4PpNDt8ttxul6uvaPv1Hq2fHh-f_vrw5y9o_fB4v0HbJ_P49r--oJf756eX7ZGH50vDY4nUvj85QHYEEIBMQYIcEXVE-VklaC2qqtFKJKy-DqMkd9PFccr270Mj979lkfFUnxPeDnH-wRr9v5tGnfHaVoK4JkoRureXseuClWaez4uCOAyC8IzbHjNOr_IbP0_9lFzBjRdjHPl-itOr_U0cUuzjGDycprjw48CjEfVcAkBIkdPkit1gFwdu4mLs4RCnC_CSlFIS-CR3_dCjTuBCRVi50OG04GJ3ZcYMbzzXi8PgqiQZlNIMUmNs1Yad8O5K3Jj4y9qddAK3ZFLJEwrFVGmmr7sV4R1ywts-ceiv3cCimTFlxykSVu8QQQ0RpAIFAjWEfkesRgSVpMpy0uVgM8lx1Yry5vcHKK1whxv8_wEAAP__4U_WCA">