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

    <tr>
        <th>Summary</th>
        <td>
            clang 15.0.2 front-end crash on constrained inner class template
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    
https://godbolt.org/z/q41vrPras

Stack dump:
0.      Program arguments: clang -emit-llvm -Xclang -disable-llvm-passes -g -ggdb3 -std=c++20 -march=native -o t.o -c t.cxx
1.      t.cxx:14:33: current parser token 't'
2.      t.cxx:6:1: parsing struct/union/class body 'S'
 #0 0x0000000002fcc824 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x0000000002fca544 llvm::sys::CleanupOnSignal(unsigned long) (/usr/local/bin/clang-15+0x2fca544)
 #2 0x0000000002f11298 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007fd0905c62d0 __restore_rt (/lib64/libpthread.so.0+0x132d0)
 #4 0x0000000005725c21 clang::ASTContext::getSubstTemplateTypeParmType(clang::TemplateTypeParmType const*, clang::QualType) const (/usr/local/bin/clang-15+0x5725c21)
 #5 0x00000000054e96e8 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
 #6 0x00000000054ece55 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*) SemaTemplateInstantiate.cpp:0:0
 #7 0x00000000054f0075 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateArgument(clang::TemplateArgumentLoc const&, clang::TemplateArgumentLoc&, bool) SemaTemplateInstantiate.cpp:0:0
 #8 0x00000000054f3942 bool clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateArguments<clang::TemplateArgumentLoc const*>(clang::TemplateArgumentLoc const*, clang::TemplateArgumentLoc const*, clang::TemplateArgumentListInfo&, bool) (.constprop.0) SemaTemplateInstantiate.cpp:0:0
 #9 0x00000000054f4517 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformConceptSpecializationExpr(clang::ConceptSpecializationExpr*) SemaTemplateInstantiate.cpp:0:0
#10 0x000000000550ab96 clang::Sema::SubstExpr(clang::Expr*, clang::MultiLevelTemplateArgumentList const&) (/usr/local/bin/clang-15+0x550ab96)
#11 0x0000000004e47135 bool calculateConstraintSatisfaction<calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, llvm::ArrayRef<clang::TemplateArgument>, clang::SourceLocation, clang::MultiLevelTemplateArgumentList&, clang::Expr const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr const*)&>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&, calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, llvm::ArrayRef<clang::TemplateArgument>, clang::SourceLocation, clang::MultiLevelTemplateArgumentList&, clang::Expr const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr const*)&) SemaConcept.cpp:0:0
#12 0x0000000004e48e2b CheckConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::TemplateArgument>, clang::SourceRange, clang::ConstraintSatisfaction&) SemaConcept.cpp:0:0
#13 0x0000000004e4904d clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::TemplateArgument>, clang::SourceRange, clang::ConstraintSatisfaction&) (/usr/local/bin/clang-15+0x4e4904d)
#14 0x0000000004e49859 clang::Sema::EnsureTemplateArgumentListConstraints(clang::TemplateDecl*, llvm::ArrayRef<clang::TemplateArgument>, clang::SourceRange) (/usr/local/bin/clang-15+0x4e49859)
#15 0x0000000005405ea6 clang::Sema::CheckTemplateArgumentList(clang::TemplateDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo&, bool, llvm::SmallVectorImpl<clang::TemplateArgument>&, bool, bool*) (/usr/local/bin/clang-15+0x5405ea6)
#16 0x0000000005409d00 clang::Sema::CheckTemplateIdType(clang::TemplateName, clang::SourceLocation, clang::TemplateArgumentListInfo&) (/usr/local/bin/clang-15+0x5409d00)
#17 0x0000000004d5f527 clang::Sema::ActOnCXXNestedNameSpecifier(clang::Scope*, clang::CXXScopeSpec&, clang::SourceLocation, clang::OpaquePtr<clang::TemplateName>, clang::SourceLocation, clang::SourceLocation, llvm::MutableArrayRef<clang::ParsedTemplateArgument>, clang::SourceLocation, clang::SourceLocation, bool) (/usr/local/bin/clang-15+0x4d5f527)
#18 0x0000000004c6b940 clang::Parser::ParseOptionalCXXScopeSpecifier(clang::CXXScopeSpec&, clang::OpaquePtr<clang::QualType>, bool, bool, bool*, bool, clang::IdentifierInfo**, bool, bool) (/usr/local/bin/clang-15+0x4c6b940)
#19 0x0000000004bf53b8 clang::Parser::TryAnnotateTypeOrScopeToken() (/usr/local/bin/clang-15+0x4bf53b8)
#20 0x0000000004c1bb16 clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*) (/usr/local/bin/clang-15+0x4c1bb16)
#21 0x0000000004c1ebe1 clang::Parser::ParseSpecifierQualifierList(clang::DeclSpec&, clang::AccessSpecifier, clang::Parser::DeclSpecContext) (/usr/local/bin/clang-15+0x4c1ebe1)
#22 0x0000000004c1f013 clang::Parser::ParseTypeName(clang::SourceRange*, clang::DeclaratorContext, clang::AccessSpecifier, clang::Decl**, clang::ParsedAttributes*) (/usr/local/bin/clang-15+0x4c1f013)
#23 0x0000000004c39093 clang::Parser::ParseAliasDeclarationAfterDeclarator(clang::Parser::ParsedTemplateInfo const&, clang::SourceLocation, clang::Parser::UsingDeclarator&, clang::SourceLocation&, clang::AccessSpecifier, clang::ParsedAttributes&, clang::Decl**) (/usr/local/bin/clang-15+0x4c39093)
#24 0x0000000004c4028a clang::Parser::ParseUsingDeclaration(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo const&, clang::SourceLocation, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) (/usr/local/bin/clang-15+0x4c4028a)
#25 0x0000000004c46909 clang::Parser::ParseCXXClassMemberDeclaration(clang::AccessSpecifier, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo const&, clang::ParsingDeclRAIIObject*) (/usr/local/bin/clang-15+0x4c46909)
#26 0x0000000004c48b0c clang::Parser::ParseCXXClassMemberDeclarationWithPragmas(clang::AccessSpecifier&, clang::ParsedAttributes&, clang::TypeSpecifierType, clang::Decl*) (/usr/local/bin/clang-15+0x4c48b0c)
#27 0x0000000004c48efc clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, clang::SourceLocation, clang::ParsedAttributes&, unsigned int, clang::Decl*) (/usr/local/bin/clang-15+0x4c48efc)
#28 0x0000000004c4b32c clang::Parser::ParseClassSpecifier(clang::tok::TokenKind, clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext, clang::ParsedAttributes&) (/usr/local/bin/clang-15+0x4c4b32c)
#29 0x0000000004c1b11b clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*) (/usr/local/bin/clang-15+0x4c1b11b)
#30 0x0000000004cdd78e clang::Parser::ParseSingleDeclarationAfterTemplate(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo const&, clang::ParsingDeclRAIIObject&, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) (/usr/local/bin/clang-15+0x4cdd78e)
#31 0x0000000004ce5a7d clang::Parser::ParseTemplateDeclarationOrSpecialization(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) (/usr/local/bin/clang-15+0x4ce5a7d)
#32 0x0000000004ce5ca7 clang::Parser::ParseDeclarationStartingWithTemplate(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) (/usr/local/bin/clang-15+0x4ce5ca7)
#33 0x0000000004c29953 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::SourceLocation*) (/usr/local/bin/clang-15+0x4c29953)
#34 0x0000000004bfde6b clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/usr/local/bin/clang-15+0x4bfde6b)
#35 0x0000000004bff68a clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/usr/local/bin/clang-15+0x4bff68a)
#36 0x0000000004bf113a clang::ParseAST(clang::Sema&, bool, bool) (/usr/local/bin/clang-15+0x4bf113a)
#37 0x0000000003a3e559 clang::FrontendAction::Execute() (/usr/local/bin/clang-15+0x3a3e559)
#38 0x00000000039c9e6b clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/local/bin/clang-15+0x39c9e6b)
#39 0x0000000003af4743 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/local/bin/clang-15+0x3af4743)
#40 0x0000000000a6559d cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/local/bin/clang-15+0xa6559d)
#41 0x0000000000a5f13c ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#42 0x000000000383f345 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
#43 0x0000000002f11393 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/usr/local/bin/clang-15+0x2f11393)
#44 0x000000000383f6d9 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
#45 0x000000000380c576 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/usr/local/bin/clang-15+0x380c576)
#46 0x000000000380cf6d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/usr/local/bin/clang-15+0x380cf6d)
#47 0x000000000381ca3c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/usr/local/bin/clang-15+0x381ca3c)
#48 0x0000000000a634dd clang_main(int, char**) (/usr/local/bin/clang-15+0xa634dd)
#49 0x00007fd08f05234a __libc_start_main (/lib64/libc.so.6+0x2434a)
#50 0x0000000000a5e66a _start /home/abuild/rpmbuild/BUILD/glibc-2.26/csu/../sysdeps/x86_64/start.S:122:0
clang-15: error: clang frontend command failed with exit code 139 (use -v to see invocation)
clang version 15.0.2
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin
clang-15: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-15: note: diagnostic msg: /tmp/t-0154b2.cpp
clang-15: note: diagnostic msg: /tmp/t-0154b2.sh
clang-15: note: diagnostic msg: 

********************

[t.zip](https://github.com/llvm/llvm-project/files/9996870/t.zip)

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztW1l3ozgW_jXOi4592G0e8kC54u7MpDqZ2D1dbzlCCIcpDLQEKad__VxJ2EaAF5JazpnpnMQmWq7u_e6iq4Uwj16vR8bHkRE8l2XBR3Ywshbwu86jME_LSc7W8N9f8PenY76wB4a5aq4-lyUmX1BUbQrRUxYZEyR_Hli-ZniDMFtXG5qVgjYiKc7WaEw3STlO05cNGn-ui6KE4zClsnRcYM4pR2MoX6-j0EZjXkYj-yMZWR_g1zLQeIMZeYaiDJfJC0XjHAGzaEzgi2y3ihWzZkUV2YHpwIdtS0YqxoApVGDGKUNl_oVmaGRNS_hTna1WZ08QEF1FlwRY5iWrCLRfVFmSZ_ANknCOQoBUUFruKcF_toGMrbH7sWJCZpYDECVZKSFcMUzoMllnOP0VZ1FK2ciaveRJNLJAIT5SVXxCCgG0If_2tM0Wbew6DhI4Cp3YAX_l6mGeUpxVxX2mqMEIVcbhkUYozbO1GAfKhEAchl-kORGNFmFSC5etx6YL8BvbehDoceDC0rkwTcufoTnYy_MjJfkLZa9t-UB4MabWZp5nJd2W_YLa9RDTODJ8wyWeFRno6YlRXuaMPrGy5j9NQs9R30X5zCiOJjyfGJJ104ZOGuNOk3F3arnEMpWhKtiC5armSv2_puWyCnm5opsixSVdvRb0AbON-IbxGz37WiCSZ7yUap03R_lXhVNFwVdNLtVFzbEmkquJ5FDfo7PmYCtGKZhcxuOcgZXMYSic5dnrJq84yvCG8gLsUZDU5LgFtnBWJhjgHtk3O1o1nR75oeQuJx-qJI2Exr2WzHW9NHC6wd1haL8deC3xCHXdnyTeMq8YgZ5xvvPUIYJMdUFiMO0fIEjdKqgDc7_N7mpBPzuT7aiv27RuFOZ5OhiMWQsM23csSemHIwLxcn4ZJIEgdil-bZd_T9OEl8roNLyBlYmkULC8EAFvoAr8lgoc15x-d_QhuBJalMuCkgSnyV8woefZzbZgOrAnmg1zPDFjatOx6xo49L2moIJY_SRCfZeb_cCamj5VaZnc0Rea9ims4UcXz7Q1b_voLpjX5nuHOlMTAr5yFJySSgw7FyMxLNILwInHmAi0hFmfaaEJKVHouP1voOfoIyWpZqyHfCNgDL8-0vi0E0nH0eiqUApOgBUnA5DtMin0c8yZjonu7Q0XUrcUb8IIixyuo_cGXV_0aoeAftjeyNH8rFL_VtlwldXxoo4p_THCarnZjFohmj9T8uVHK0KXQGnhWynvEf6nA9A-j5vdws03nKg_tl4M5v8AbBfG-xovLd47bUBnrt8P6E3GK0b73O3AG-_PVwS63zgu1BgNkh1E02RvrWQMl-IjE7U0pv5Ic0beSwPaRUlYE77lBqfpvymBtOcWul6AokZIfQdDsgUFkIZga7Fk-JFhXIDgbXR8PSvc8ZsBN0Q4wbsmnLaAciI3dq1pv3ABKe-z-efPv1Fe0khIIDPJOKGtzG5JciF3Zwb6_FnWiF7duH5S_PsC_1nRh5L1G4BEc9jU2q08GN2nqhQbaf2u-yC2u6J3Tuzdysb64yJHV4rSNKmt_hzihb6jmanknDWe7wsxOk6biulR52m9HVHNfjNGAaM7ZMMxD0WNzrcRQCo52W8LBN3el4OlsNDA0tZpThi7djg7BtaKvQZZlpf1PtQ9k3CsxIan5OByRtQ4TUYsQ9eaGYamd1JrIuxiJg1nr7DWjCSa9GurQy06LPji_Ng2RUAI5bxhHkdp7kbebfcdb3kHYyoOgrJkapYZEqhrqDQszRaWNKTmSen3IglzlQ_d6e44mO-AZYiYQgpNTKslZmxAxnhKTGG1asaZdYJQnWK0g_XOynLWr8rTsu9TgzbZg8aTsCopH6xzIasGhp4rE9s3_NNgBGmCecOJgrik7CCujtHb_OVk7G-S_F0cgzTHPkfpDSaood3u31TUADVIlDU16Bk2cQxrhk-qQRO9s1w5Z37fQS_noD4PZkcZAxCVgGmIui1EPcD8JAQwT8_F-dknugkPFt2B9r0m8zboH9SRn-DqMbi9vQ__Q8ngiC8x0EDyWiDNQoO8DaQ_kvL5geH1BvMzeA03DHnMsSOgFgX9XjgECyGqhsW0jQWNz2KhYKh5Iz3WMjCNPQ_L_sBUnl1-AxhASg2GVhrshLZ1BgZhD0dy3zL_UqtQZHv_TLJoCAQ_IA_ryZ4H5mNtFQ0BX2Crge-3s1nTDP_OZi_LZgGqJpZ2a2UQRdMZPZ3NQoBNaTu12UHyIybYI1F-aFbzfadaCaSGdGvdQF08jU6C0dwCq7G-Z_q52jC4fy4iUmANEauNCMHTi_24xKwEKxAz6tuM72ejAcJqaLTWGJbvu6fXGG_Oa98v-fkW7TGGxSkpvIaO09pKiah3OubfbCEsZTg9itJlUtaBRk0Ng4RQPGpCuC0hYu_M-mWVF_JkTiUtTe6P7IiJhr-wvCrkluJNj172O62f8qhK6e2myJm43CbcZ9DErNjX5PNa8pmm3ZUvWK6OHsG9de9NDaXxoiWqNrapq5_GLJjwjSwK6iN3UXazpaSScWTA4DVtbXAtPbR94resdZ5viiQVO4_iAgSh2vBBz8lai9tBmqrH1xj0dXRiZ-powaZm5cDnS96XuHfkGOQi9bhNxhwtHzGwB8jCLEnMpw0WBGb9h17PuHOCqJdBQeOa5oX8qdE19kydPTc2bYJ2YM3NlbTb2cmjpQ6vUpcRS14o6z2pdbR50p7Zse24UpzGcUJcZdI0nphERNYqO97f5AE50xCTL09xpgcNNXat0bkJSt1gWIO0XKIX-UPhbp9fK1xCcM3WdSxSepE3hEXd0xPZbk1T_RNinpAnLpvXIGmNRcGTOBhVl75EdYscCCdMNGeNetGksacf7C9tqi6tuwg1ViBpfcv2H3nYrxBtqhZ3aG3fbuii76asqnmssiWOafqq4Xlad0Ou-0pONIN12rbjRVoY_P_Tvbx9V0D2qC7eHVWyqyNnEHfqHUVOxkHcmUl2cGpBs9VRNDi21DnRNGjdKRx0GbkWR7MUry0vmMpQeQFMflxYqG3drzt9Cr_Xb4ETodruZs5JfGojeB9KAIKGkp5WzEyCbXKMo4-NZ21C7ZlJj6H7A1G6fN5WYmu4zFrztu1EtfXsZu4dX9K9Bx4GKHragLsMRrxkMIsNF4owenpKk1DEEnBvOW73TQMi3jHwVLx0oE-TqNvKPlzqeUBUkgNKi-dcHG8tcChuysMDKza7xw-_3959hO-1GGJsTQSgC8Ir-JxM4IO_8ogW4ByL7cx7ksxIspMlKMW0rEPs2QtuB4gyJoLa7oWcuM4CQXtKizGG7CtCX2ERjOg2Ea4VUQSTgJC74hSNX1CZI04pShopnN8YCYFpcChFpjsxJpaqWWG2pmLOQorbcZV9yfKv2ThNsmo7XmdV3U6-tYE2MGoqWhc5T-qXemRKmAJ3HxMpQa-aOwJneSmSYRQleJ3lvEwI2vC17F8r6R2_jReiHu5uguUNClarYP4rWv16gxb3d3f3f9z-9gta3N7dLNHqXhZ_-P0X9HjzcP-4Ev6j-jJasFws_QF6Lte5gDYX5ix0gjnPibjSHCFWZYgTlhTlvgGjSM5VUIvLPckLIbAW5aYQn2PDdJ3QkhPXuwjw5zfo4JtqYuR-KCd_JcXIBfeZtd5uA7uuYHrON8JuRAxUX2PAX236LWJwAOFVvu97s6khZJPUdjZ-Ra9Nz5vZtgm1V9G1Hfm2j6_KpEzptXIAZfjKucbSu0T-hsAlyO42njxJyCgTfsg5KusNp6uKpdeDWU44ryTP7sz3jKvnayfypp5nWzAjQ2R1LGMaWVM3ihwqthEd6yrFIU35NUA1sqyMfkWSBDwDaFfJtWVYlgmpn-HbpjGbhFY4i-0Y1uehC0omI8eAFXaSTgQf4k3BK3YtWQqrNYfKFOZkfqgEAcXZCZXDAX1clc85u2Yv8Z9Xctxryfd_AZCxQiw">