<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/57410>57410</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            ICE on template template parameter with constraints
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Fedr
      </td>
    </tr>
</table>

<pre>
    The following program
```
template<typename T>
concept C = true;

template<template<C T> typename Wrapper>
using Test = Wrapper<int>;
```
results in segfault in Clang:
```
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: /opt/compiler-explorer/clang-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -std=c++20 -pedantic-errors -pthread <source>
1.      <source>:5:14: at annotation token
 #0 0x000055a06874dd34 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x000055a06874bb9c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3945b9c)
 #2 0x000055a068689828 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f3c56df2420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x000055a06baf168d clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::IntExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
 #5 0x000055a06baf7bf6 Evaluate(clang::APValue&, (anonymous namespace)::EvalInfo&, clang::Expr const*) ExprConstant.cpp:0:0
 #6 0x000055a06bb0d2be EvaluateInPlace(clang::APValue&, (anonymous namespace)::EvalInfo&, (anonymous namespace)::LValue const&, clang::Expr const*, bool) ExprConstant.cpp:0:0
 #7 0x000055a06bb48ea0 clang::Expr::EvaluateAsConstantExpr(clang::Expr::EvalResult&, clang::ASTContext const&, clang::Expr::ConstantExprKind) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6d42ea0)
 #8 0x000055a06ae2f005 bool calculateConstraintSatisfaction<calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr const*)>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&, calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr const*)&&) SemaConcept.cpp:0:0
 #9 0x000055a06ae2f615 CheckConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) SemaConcept.cpp:0:0
#10 0x000055a06ae2f9f0 clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x60299f0)
#11 0x000055a06ae3056d clang::Sema::EnsureTemplateArgumentListConstraints(clang::TemplateDecl*, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x602a56d)
#12 0x000055a06b496d76 clang::Sema::CheckTemplateArgumentList(clang::TemplateDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo&, bool, llvm::SmallVectorImpl<clang::TemplateArgument>&, bool, bool*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6690d76)
#13 0x000055a06b49f5cb clang::Sema::CheckTemplateIdType(clang::TemplateName, clang::SourceLocation, clang::TemplateArgumentListInfo&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x66995cb)
#14 0x000055a06b4a2717 clang::Sema::ActOnTemplateIdType(clang::Scope*, clang::CXXScopeSpec&, clang::SourceLocation, clang::OpaquePtr<clang::TemplateName>, clang::IdentifierInfo*, clang::SourceLocation, clang::SourceLocation, llvm::MutableArrayRef<clang::ParsedTemplateArgument>, clang::SourceLocation, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x669c717)
#15 0x000055a06ac8e72b clang::Parser::AnnotateTemplateIdTokenAsType(clang::CXXScopeSpec&, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5e8872b)
#16 0x000055a06abc1a08 clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5dbba08)
#17 0x000055a06abc4d05 clang::Parser::ParseSpecifierQualifierList(clang::DeclSpec&, clang::AccessSpecifier, clang::Parser::DeclSpecContext) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5dbed05)
#18 0x000055a06abc5183 clang::Parser::ParseTypeName(clang::SourceRange*, clang::DeclaratorContext, clang::AccessSpecifier, clang::Decl**, clang::ParsedAttributes*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5dbf183)
#19 0x000055a06abdf82a clang::Parser::ParseAliasDeclarationAfterDeclarator(clang::Parser::ParsedTemplateInfo const&, clang::SourceLocation, clang::Parser::UsingDeclarator&, clang::SourceLocation&, clang::AccessSpecifier, clang::ParsedAttributes&, clang::Decl**) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5dd982a)
#20 0x000055a06abea5f8 clang::Parser::ParseUsingDeclaration(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo const&, clang::SourceLocation, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5de45f8)
#21 0x000055a06abeb325 clang::Parser::ParseUsingDirectiveOrDeclaration(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo const&, clang::SourceLocation&, clang::ParsedAttributes&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5de5325)
#22 0x000055a06ac9526b clang::Parser::ParseSingleDeclarationAfterTemplate(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo const&, clang::ParsingDeclRAIIObject&, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5e8f26b)
#23 0x000055a06ac9d7ed clang::Parser::ParseTemplateDeclarationOrSpecialization(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5e977ed)
#24 0x000055a06ac9dad3 clang::Parser::ParseDeclarationStartingWithTemplate(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5e97ad3)
#25 0x000055a06abce5b5 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::SourceLocation*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5dc85b5)
#26 0x000055a06ab9fb36 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5d99b36)
#27 0x000055a06aba18fa clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5d9b8fa)
#28 0x000055a06ab9127a clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5d8b27a)
#29 0x000055a0699adf95 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4ba7f95)
#30 0x000055a0692b8441 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x44b2441)
#31 0x000055a06923f0e3 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x44390e3)
#32 0x000055a06939696b clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x459096b)
#33 0x000055a066068ca4 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x1262ca4)
#34 0x000055a06606229b ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#35 0x000055a0690a9659 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#36 0x000055a068689f97 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3883f97)
#37 0x000055a0690a9c4c clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#38 0x000055a069073769 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x426d769)
#39 0x000055a06907415d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x426e15d)
#40 0x000055a06907e86c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x427886c)
#41 0x000055a0660669c9 clang_main(int, char**) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x12609c9)
#42 0x00007f3c568a0083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#43 0x000055a066061eae _start (/opt/compiler-explorer/clang-trunk/bin/clang+++0x125beae)
```
Online demo: https://godbolt.org/z/TeWo7nsEd

Found in the discussion: https://stackoverflow.com/a/73494870/7325599
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzlW1l3ozgW_jXOi45z2JeHPFBO0pOZ9CSdZKr6zUcIYTOFgZFEyulfP1cC2whjshRV03O6jlPBSNzlu4uuxE1cJi8XT2uK0jLPy29ZsUIVK1cMb2bG5cyIZp7RftRXQTdVjgWd2QvxUtECbyh6mtlXzSgpC0IrgRZoZl8iwWqY96mlc_T44XKhSKA9wS8MVxVle7I1l2I9US4U3f3wIiuEnLTnocvKKK9zwVFWIE5XKYYv8nqR42I1s6PBZ-5vr6LHK8TreJMJhFFcrxCjVckEEiVaC1Fx-ah1DZ9VJtZ1fE7KDXzJ8-fdrzkA-G9KBHzNOK8phwuEiwSYk7xOKBIAN2GYr1GMyVfBMKEzawG4U3iSUM5pgnhZs-a2fBJzXpIM0EoQq0EdwrJKnDciPwoggpJ6U-2VMmAovG_MiDBb1RtaCCk4AlHKSkoGUldZTtmcbqu8ZAAn3JPIzMFsxVf4FmfF7t7M-gQfNF8l3zBL5w5coXkpiYElJMlaVLU452i-kQCg-XwbeHPMN3P-Ugi8BauBqWiO5o8wtiJkLsoyJ2sMLOzLUZnkZF7giq9LgeYpKWFgnmR4VZRcZARYpkU5V2jqt7lIgDZpRLcMNK9oggsYm1PGSgYzKrFmFCfgU4sW7Z3DmRI_7bYdufBjOhJDDI5RFKXAIisLcIuvtGgeA0BsAxlbA_65Lja8wHeSxHbQPQP1lZ2epLEfs1WB87-BYXOpY_BcZsnMAq8KUTPEz0klrWmonz1ts0c7jkOClOOB4e2Iv_DmYpFTXNTVXdFQAw51weESvCcvpTVDoBZ8jyvAx9jaoeOCBEDuIKKliegFYWAFaCGt80BJ-UzZS195GcMgkDZnUYK3bMUwCnbLwk9t4npJajlg3eUSol2A8EuI1Ea5PIvhf3DEpefM86yot_NVUTcDrenPeXluKF1MB6homjhdTWKcml6QILLLHTaE3UZ8zngGTD9hLtPYwRIb_JUuIRlysawEk0EMIuGiLF42Zc2RTHK8UlEfNg_cFOJqW7GrZ5zXGCjKR2IIkcb14KM4AZGeAEgxaX1HUljI7-Dmw9C5PZ38OPVQy5Tq1KP7z3AbbnpvEF-SuCnSsp3dISNleqeQniZkbCRWTPdC3hT3ueI8layvzL5VlHcavKJda7M3aenrWjoBxUaf9EFgqXrEdxTVmIaAPvtBLXzH4kaPT21kjSnU5pAOr39kRSK1Ug9Nkjq8xLFAYS3ggi4imFopXCpAEcE5qWWtoIRiWCZTSL48xUSmYAi912bogUM3-Fj1f4Ltk0tKcs2g3cfUYnBbEtyQ1AZ_BcCzW_pM86e2ronaZfc246Nwn2J3ShNv75szy8_xJk5AGf_YHbpRJ9PIGyD4oDiLVw30V4dfPuWp5R10XzRF8nBaCPtB4JkuWqwp-To1tIfVKmIMvzzQVMbRKSWkA02AeGPEB_hO34H3OGyyMDL6sIWplk0VMA2ft2L5_4_aJInasELAcp-oJdimDrZtQBU2DPZVwWtGh1Q9CM512HeTJfLHUTkBfpPhgkFtDRet9o2d0Et8b8QJhzR4DxajCXGIeKfqaeqUrjs_bnCef4Zda8lu4FHdq_vUlGNrhJrf0WTweqEB6Gnw2j14U5fEb4D3Jnl6qegwsDLGJ0N1Ms1DUEzTXN-KONjyTX9Y84iIu2JM80dSyltHq93vv6uRx4qSU_FzApO7Cv-npveCDbuMgvgoD94kgF6WZpQ18L3Lt48HD278ay1wnNPh5HyPGafJoDO_wkB388ksTcCQmqW1DRomAfUtzceVBm2FHjVnELRjbnkUEfFjqw-Yd0pNXBoEIKimibaLwzExsRGc0kRdyySHmUJciqmco7c2yCnDHnpEbW9l6V-n1oWIyMO2PbcRmjvO7fZpZOYt8GwkiIRgTU6fLC26SRwDjhrQfg9oJ4Ft0xg0e31_q3GuLo5XntNIfwdmk2FAQUUNg6CHgWsG9igGMkSa5B8cxX1bJ_RT0s4_SzbsBOPA7JfwPtmDr2RxLeRZ8ZTekgIQGlL6_iJO0sDCo0hFeYZ5JzajVFB2wEIH8GNhOJrsuyT_Jd8DdHm_RukDzquZov9814pT2SgJwQRdG1n6Ziam2E3HU6eGy9FG5jXH_QFGe80OryN9ZKmp4KYOoKnBbfbgjm1rPIE2cGcMiuXsmd6x_zHybwJ3MvhcQEeDz9JLltC1vJMlS7P-AHo57aeUneY_A0E5s42Yh-jm5i5u3tZNAvRP8WIapICyZga7Z4bEp8n4EtjZXLaGuGNKVKgK_viAN_-J4Qp9QEODy-nDhZPxiqFbngrMBPjPl0ysP-a2f2qoAAkNKrdXXFE3Hs-PH86H3w_L6zP6PCZcyUkAyGjQ9TZBYRrb3ih0V1tIhQXOT0L4Ngja5NZU8BNqGIaggKZhb_eBzSAdryefykqd3zWlVFe1EwcJcuIvrKwrtZ2_GrDo_vTj1zKpc3qzke0aj0JF5YRLXxiDbpryvW1HaFr-sfLR49PJQ_ofcazgJkEMcmiCalV_GOIkDbUQXpQJ_YUWUfs6TR3dbikBB4t2J-NTiefE2AfuXfH0nonQigPHMbviXTOZLopkQL4pJXNiCxhrkpm6ZHZqUFsHruF1o16WylaRIexOqzKdfzqOHYJwmvRaaRbaoRfqpVkr50GJ531aDMaUnC6lOG5ohHolY2uVjGd4AcEOIsRcbmS7kBUMv4JZ4-P3Lto9uNHps5lCeNPyLJBNE97pCW9ZYYx2OC_MJxXoweix-5EmykcSBnsNNvj2S2_rCA0cem6olO0cjKZ1oVxuyRRearQJnn2PCQFRZEPaMi30FNzwbp1hYYI_bHCR9ONw0C6Hm3eVZI9z7eYjrGPFqs3sjdVU35YcWy7JdmuazZcY84wsuZregqRNljeW8oWSbHNrhnvkQDnp3SXrjMspnb6NaN_k0DzSe8O7f5G-a6L6exkPG0Rb92UXVBr6HVsM9To1Iw918YhTmr9oeI7bbqpuriCwQUzNm_2-YxGHoL-0Y0iozyuo_2Xf2IgHBDpyvu174UnklMXw0dq2g1NLxr0H5YRT29yRqVHvLcB0nT2OJV97hpobhT0wHNNN3gsGIM1PIwGjRy-Ax5Ls3vgVznaNxO8Ar_WQHwchBYS6EDpGD0IaeCcj8bJzrS3xA2v7Keh_IoQTVRKWHwAmGmhmbzH2QtIG4a6W2AmtssaU57pQGxjATRNnV441jasBNozARstlnsUygUFOUVK9oXuVyL5VT_GxHEM_4Xf65ZNJMUUN_Yk0c2MgeeCpN9DfFSAsRQndlGD2fsd8mcRlLs5LBhSv_4CfJ_ql9At-lXT_SuC6rFW3vGqUTzJOas6bfNCjx2VLtVxF07z81jbiw2J97dtO6AS-oS4t1w3DM3phep7p-WHguWfJhZ1APYzPRCZyenGzuEKyk7s9yzlcQKLHGwpbcvQtE-vGeZumlbOa5Rcf_3MAF3Kgcba-MFLP8kwrxi72Yt-kceK5BDwlsEjghiQ-y3FMc34xcz_N3Muz7MIyLMsIrMAIHcdyz0PXJYZDTC-gQAaqFMeA3WWWn0vGEuYzdqFkiOsVh8EckiQ_DGKu2sLpjj6uxbpkF9c0YWdK1gsl6H8BjrGOnw">