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

    <tr>
        <th>Summary</th>
        <td>
            [clang] ICE in `clang::TemplateArgument::isPackExpansion() const`
        </td>
    </tr>

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

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

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

<pre>
    with `-std=c++20` on trunk:

```c++
template <class T, auto ImplGen = [](auto&&... ts){}>
struct Tmp {};

auto X = sizeof(Tmp<int>);
```

results in:

<details>
<summary>Backtrace</summary>

```
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 <source>
1.      <source>:5:17: at annotation token
 #0 0x000055b7adb2038f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x35ea38f)
 #1 0x000055b7adb1e3bc llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x35e83bc)
 #2 0x000055b7ada700a8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007fa02eff1420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x000055b7b128df63 clang::TemplateArgument::isPackExpansion() const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6d57f63)
 #5 0x000055b7b0ae80c2 (anonymous namespace)::TemplateInstantiator::TransformTemplateTypeParmType(clang::TypeLocBuilder&, clang::TemplateTypeParmTypeLoc, bool) SemaTemplateInstantiate.cpp:0:0
 #6 0x000055b7b0b0a78d clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
 #7 0x000055b7b0b0dcb1 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReferenceType(clang::TypeLocBuilder&, clang::ReferenceTypeLoc) SemaTemplateInstantiate.cpp:0:0
 #8 0x000055b7b0b0adc8 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
 #9 0x000055b7b0b1ee6a clang::Sema::SubstType(clang::TypeLoc, clang::MultiLevelTemplateArgumentList const&, clang::SourceLocation, clang::DeclarationName) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x65e8e6a)
#10 0x000055b7b0b1f304 clang::Sema::SubstParmVarDecl(clang::ParmVarDecl*, clang::MultiLevelTemplateArgumentList const&, int, std::optional<unsigned int>, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x65e9304)
#11 0x000055b7b0b20192 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformFunctionTypeParams(clang::SourceLocation, llvm::ArrayRef<clang::ParmVarDecl*>, clang::QualType const*, clang::FunctionType::ExtParameterInfo const*, llvm::SmallVectorImpl<clang::QualType>&, llvm::SmallVectorImpl<clang::ParmVarDecl*>*, clang::Sema::ExtParameterInfoBuilder&, unsigned int*) SemaTemplateInstantiate.cpp:0:0
#12 0x000055b7b0afae2b clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformLambdaExpr(clang::LambdaExpr*) SemaTemplateInstantiate.cpp:0:0
#13 0x000055b7b0afc642 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#14 0x000055b7b0afcb39 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#15 0x000055b7b0b2a363 clang::Sema::SubstExpr(clang::Expr*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x65f4363)
#16 0x000055b7b0993a49 SubstDefaultTemplateArgument(clang::Sema&, clang::TemplateDecl*, clang::SourceLocation, clang::SourceLocation, clang::NonTypeTemplateParmDecl*, llvm::ArrayRef<clang::TemplateArgument>, llvm::ArrayRef<clang::TemplateArgument>) (.isra.0) SemaTemplate.cpp:0:0
#17 0x000055b7b09cafdd clang::Sema::CheckTemplateArgumentList(clang::TemplateDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo&, bool, llvm::SmallVectorImpl<clang::TemplateArgument>&, llvm::SmallVectorImpl<clang::TemplateArgument>&, bool, bool*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6494fdd)
#18 0x000055b7b09cca71 clang::Sema::CheckTemplateIdType(clang::TemplateName, clang::SourceLocation, clang::TemplateArgumentListInfo&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6496a71)
#19 0x000055b7b09cfe62 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, clang::ImplicitTypenameContext) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6499e62)
#20 0x000055b7b01482db clang::Parser::AnnotateTemplateIdTokenAsType(clang::CXXScopeSpec&, clang::ImplicitTypenameContext, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5c122db)
#21 0x000055b7b00452ea clang::Parser::TryAnnotateTypeOrScopeTokenAfterScopeSpec(clang::CXXScopeSpec&, bool, clang::ImplicitTypenameContext) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b0f2ea)
#22 0x000055b7b0048f18 clang::Parser::TryAnnotateTypeOrScopeToken(clang::ImplicitTypenameContext) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b12f18)
#23 0x000055b7b0159fba clang::Parser::isCXXDeclarationSpecifier(clang::ImplicitTypenameContext, clang::Parser::TPResult, bool*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5c23fba)
#24 0x000055b7b015c5ab clang::Parser::isCXXTypeId(clang::Parser::TentativeCXXTypeIdContext, bool&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5c265ab)
#25 0x000055b7b00b9917 clang::Parser::ParseParenExpression(clang::Parser::ParenParseOption&, bool, bool, clang::OpaquePtr<clang::QualType>&, clang::SourceLocation&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b83917)
#26 0x000055b7b00bab30 clang::Parser::ParseExprAfterUnaryExprOrTypeTrait(clang::Token const&, bool&, clang::OpaquePtr<clang::QualType>&, clang::SourceRange&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b84b30)
#27 0x000055b7b00bae60 clang::Parser::ParseUnaryExprOrTypeTraitExpression() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b84e60)
#28 0x000055b7b00ad12e clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b7712e)
#29 0x000055b7b00afd9e clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b79d9e)
#30 0x000055b7b00aff9d clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b79f9d)
#31 0x000055b7b006d3bc clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b373bc)
#32 0x000055b7b0081066 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b4b066)
#33 0x000055b7b00499d7 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b139d7)
#34 0x000055b7b004ab2f clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (.part.0) Parser.cpp:0:0
#35 0x000055b7b00525b4 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b1c5b4)
#36 0x000055b7b0053b6d clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b1db6d)
#37 0x000055b7b0042eea clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5b0ceea)
#38 0x000055b7aec83e35 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x474de35)
#39 0x000055b7ae56e001 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4038001)
#40 0x000055b7ae4f02b3 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3fba2b3)
#41 0x000055b7ae64e623 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4118623)
#42 0x000055b7ab3b8b4c cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0xe82b4c)
#43 0x000055b7ab3b40bf ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#44 0x000055b7ae34acfd void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#45 0x000055b7ada70507 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x353a507)
#46 0x000055b7ae34af3c clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#47 0x000055b7ae31241c clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3ddc41c)
#48 0x000055b7ae312e0d 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+++0x3ddce0d)
#49 0x000055b7ae31d43c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3de743c)
#50 0x000055b7ab3b667f clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0xe8067f)
#51 0x000055b7ab2b53c5 main (/opt/compiler-explorer/clang-trunk/bin/clang+++0xd7f3c5)
#52 0x00007fa02ea9f083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#53 0x000055b7ab3b029e _start (/opt/compiler-explorer/clang-trunk/bin/clang+++0xe7a29e)
clang++: error: clang frontend command failed with exit code 139 (use -v to see invocation)
Compiler returned: 139
```
</details>

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkW1tT7Lh2_jXmRdVdsuTrAw9NAxMme84mG3Jqv1GyvNw4uCVHkhnIr09J7m4s92UDYyaVpOqc2bQlS-v71tLSp4uZ1vVKAJwH8UUQX56xzjxKdQ6q5qKGogF1Vsjy9fzP2jyiIMEzbcqAXvKAXATkguAgwUgKZFQnngK6CPBlgLf_TXD_v03l_qmBddswAyigS94wrdF9QJaIdUaim3Xb_AYCBfQS9fYEJLMlAUkCksznc2R0QPIgvQjSy4Be9U1qozpu0P26RduSi6Ehru2frlVd_xfIKiDZ_boN6LIWxrZC8rc3tkYPG1Cgu8ZoVIsxRLoswbC60TtjArrU3XrN1GtAry4YfzKKcQjoMiDXbwUHeep_3n67WtxdId0V69oghopuhRS0UhlkJHo0ptXWCnIdkOtVbR67Ys7lOiDXTfO8_WfWKvkfwE1ArmutO9ABuUZMlKgWvOlKQOYREFdMP6JiZyJZolZBqyQHraFEWnaqf2zfZFpLXjMDJVKdQJqrujXz3uQ7w_gTKjvL6QYUngc4v1VypdgaMbXq1iCMNRwF5Fq21jIu123dgJrBS9tIBco-a5hYzfpoItdFLbbP-hBCs1X5J1PVLEKzFZpJ2xhrW9tkZ9rOzDWarS0BaDZ7yZIZ0-uZfhWGvQT0shYGGjS7Q7PZivOZkbLhj8z69PKkTbayFqzVj9KgWcVlI9WsrNlKSG1qrtGsEnLm2PQfj4aKjfgNp9sACC1L3mO6iAO6CFPLFDOICSENM7UdYvIJRP8aCgjFCL9gjHEcFykrC4JpViEXAnQR0IV-1f0ft6oWxjnovvdy9lZJsT8fpDYK2NqNsCWyA4LkKCDZX3FTQC7wC42B0ayyg2tndOgbHQIt-CGjlw0w0bXfxV29EqwJSNYJl6dK1Ejby2QmZrTgnonEM5GlGLMMLa1zfwCXz6Bee5v-hYmysT1lG868OkspDLyYOW_tkMDu_7su6KaLtGKYQFWFEcHo4UGBNlLBgzIbcE1dBOT6JUsekmjW1KJ7ma1E1xe05lEBK-dazrHDEkYRwR6SaICkCElWVglFPQWO5PtNJl5sRmf_tNa3jD9dvbRM6FoKZ0mOuBTaTMJ5UsZplVDP0nhoKWaQYU5sZ0xI8bqWnUaCrUG3Ln5z3_oboQ0TpmZGqk2JYkJXUq23Ve5fW7hlam3_DUg2pOC1hW-SX3R1U1oEbgwcoGjYwjfJba1CysYycwdrtm8LHPZ84gEtMEuz0utPAezMd3PGJzi4GtPwcdhbmB-El47glbwIvxzeD6hAgeDwcZzeq58BnI39WfLs_5A_cx9eCJCwYbu2sc1fXaHNUcNG5vzRNab-Bs_QjFPQt1qbPtfsg7hzc-Q3yd10OCq8BN4w5Ur-wdYw1QSRxJBBwnbJyk5heERKRXF0ghSbNv7JlDXQ58YrWHyeIjf9LJETG_ZV2VoWWBPQ5W7S3Orcbdp6S18TsZRTHHkshT5LBIc5-fKRcd0JbsFv0jVba5_y_RB60x4LpdjrD6j6ZckRJ_UcDsr_rWON7W3rkbEfhxb1T65ejDMNDKgbUUnvzTdz7tasaf4J3EhlV0W-VdtenT3JB148AGds8Vv4ji3104sXW7aVD-QWGyDEn_MrBqT48gD5xtZFya5eWuUHxvD5x6HQERSeRF8f6_sgPmt-NDa_oPn_IvPjUaZh1Je5o3x8ouPPZeCpcmgV0YEstsh8tZjnlEU5ciAuoWJdY_YUvJ_tLPCjkvbwvHNykj1Z-I8-yW2bt5lm0MWv8uz-WuTq0685h8xrrZhdGvnRdDiEfN2ac1aV5eEQWj4CfzoUECPd83mSDzVus-_Gk9v5-50J_yBBH5kxjjfgK4nFZAMhyqOqLL2BkI38w1kavsM_N-UBRbop61XiRG6ZDHnC0tBDno-QV5CQw8gX3HwXp5DfcWkfjYNx-fOnK7lrgX9QdH9v2X92cGvU4ZBxFO8pppsShKmrutcUfzkDvYXxH51hRQNHdZyG8kiWOdmBH-Y-lHXb1Lx26x47D242fSaMhxwSMowH4i8-wigjpaeaHM7NPsii3zuEQVDIJxALvR8bp4PgKM5plxExDwkpCw-vv4zAUUyAHcN7r153kF9b-K4cpB5zZUANEP4C-9_v67jAFQFvoUnICHtWhdknsPtovxxHSKow83D48jiM86o46sNaL3_-HCzmrVNcsngniuVRgm5_uEOcL5ixYk5oVfi-i0aYecyOjlOH2SK5Kfd2CN7sB2GYqZ9hV3dvFE42EcWcJDHzB6KvsnGR52F6DJD7-5YpEFZag97sIx-vDcI9-N72SfeAvHjPvLO_Kj6R2Kcjq8hoHqYeWcmILFZQfJIsy5PLUf8umHq1v74rp6YVq8fS0o5pbwNo5_2JSPrBxAqmZSgqKPYYSscMQXKaoUPEeNE1pbWQ-Nb6-hOzMiRw0tol0-Y9sW_rud__WotyP-rH_vESwmvrurmzOf8L9XhcpGlIwOMjH_FRlfkX8_E_T0Je5h4JFI9JqPLyJAkLd9XC6s73UDGCNh2OKvcWV3QksZKSFvwkjsH07HLW9rdUC1EujFF10RkYbb2-VTod1r5QH26QnnrrWiqXtW5EbSZ1O02H58OWrpEqy0KcJL-k6zclu3bf17VY2dLDqvuNsRPqxuP7V3PeeKn1tzAYFThJPAbpSNfmeXlaSlgmvqvtVvolVDfCgOrvBXyIkPfVOOmVBeeg9UCWTqabaV56KsI_v8c4YgWp3jswPbpqUZvDuWZqtsYRdpitecuU6ffmegwHd-VGtwJwTOIi-oWK6sNiwMPfg3myGOBx4R2jjS4M4JgWyelJ5l62btN6_7zxiCDcpSe3Z3JIFO62mP6QZdfAzbqVajstTSgSw7JI_JlpJBIjAgcW_4u7-6Pb3l9x2BkXmIO_UveuATDgGQUae3tssoTfQCzcgOwfXb0A7wxsHk0nX6M0KoHGnnm5Z16cAMbe9um1shOMKA_YN6VlmGYYe9ubkXeJDaIKk4L6xPV99YdAHA5zdxzKdPFpV_ik8M5nIu82GyQRJMSzfmPnG4jn3VScnQI5XUqJwjBLiG-1d8GtoEVWRBxxHj6smW0jO3zm8sjU20n1ZtvUe0aW6FnW5YTGQ0aKyBNfER3ZHuGiQlual-G9G-fZyaONPSCj0xDbxkZweYd8paqfj8xUUeQFAo0Yr0rHxqDdajMfPyhHqCvtR9fucJSzpikYf3qohJ-j-7430bIMl3K9ZqIcD9SDjjt0LWTAj1G1WG0yf-_V3QsPD_zlJQz7HwXTNX_QrvqGRa-yffBg7KJcb4tHzbGmsdEv1aB8d_9gsFzrOXevBCRt3MF8QNI3qki2vQL6uywO-yMe3-GMcTpwxaGbmn3Jj07csQqaV4_O066b7C4qZTH2FGCUjOOqot7S7P9dXIzU49EASH3iQhKFx4lzDmN7U9-WTS9Xj160FY6tT09UXXj6ZMrbtbQseRT6STMbkwG4_CgZv8tCH2fid1nsXUs7lYR3zm9ZrTafYXyAvE2EfCGFgD0lGuUjCsvo-EC8HPztKYADU_8x6v9GCifKXiWkEfXiLsajyTpJ0s36dSs1tka7rLHYuypybCqeRlzgJK08ez05V5AipjxG1tJJOizTinJPl8fE-w6A5RXOKHp4aOrCplSmzMOg91MfA_C5lvPEdUMinHl6Lx5rJkxyQH370zCZMjLYGh0W0wUCpdy9_N7xqNroc8Q3EVmxuoESuc_L4KW2ji4BhdR5udOAZs_ISKQBUD3Qz5vOttIZKTCdEmDHhH358Ldc7hus8fdaZ-U5LXOaszM4D5OMxnmW0fjs8TyMgKZZmIQh4TGBKo1DnkQkYkmWkbAKz-pzggnFMc4xIZjG8yTnaVRAmheMJixOggjDmtXN3Ib0XKrVmfsY6zwhSZieNayARrvv7ggR8CdyhQEhQXx5ps7dZ1xFt9JBhJtaG_3WiqlN4z7Y67mOL9HN8grZSEnw8KToo993BAk-61Rz_vlvzByy_w4AAP__Bzhyqw">