<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/88925>88925</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Assertion failure when indexing a pack with expansion of more indexes than pack elements
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
davidstone
</td>
</tr>
</table>
<pre>
The following translation unit
```cpp
template<typename...>
using void_t = void;
template<int...>
struct sequence {
};
template<typename... Args, int... indexes>
void f(sequence<indexes...>) {
using type = void_t<Args...[indexes]...>;
}
void g() {
f<int>(sequence<0, 0>());
}
```
is rejected by clang with
```console
clang++: /root/llvm-project/clang/lib/Sema/SemaTemplateInstantiate.cpp:1828: clang::TemplateArgument getPackSubstitutedTemplateArgument(clang::Sema&, clang::TemplateArgument): Assertion `S.ArgumentPackSubstitutionIndex < (int)Arg.pack_size()' failed.
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-assertions-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++26 <source>
1. <eof> parser at end of file
2. <source>:9:6: instantiating function definition 'f<int, 0, 0>'
#0 0x000000000393d208 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x393d208)
#1 0x000000000393aeec llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x393aeec)
#2 0x0000000003880fb8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x00007f3cbf642520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007f3cbf6969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#5 0x00007f3cbf642476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#6 0x00007f3cbf6287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#7 0x00007f3cbf62871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#8 0x00007f3cbf639e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#9 0x0000000006d6e0f2 getPackSubstitutedTemplateArgument(clang::Sema&, clang::TemplateArgument) (.isra.0) SemaTemplateInstantiate.cpp:0:0
#10 0x0000000006d72842 (anonymous namespace)::TemplateInstantiator::TransformTemplateTypeParmType(clang::TypeLocBuilder&, clang::TemplateTypeParmTypeLoc, bool) SemaTemplateInstantiate.cpp:0:0
#11 0x0000000006d94f1a clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
#12 0x0000000006d9bc7d clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformPackIndexingType(clang::TypeLocBuilder&, clang::PackIndexingTypeLoc) SemaTemplateInstantiate.cpp:0:0
#13 0x0000000006d95859 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
#14 0x0000000006d9b71a clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*) SemaTemplateInstantiate.cpp:0:0
#15 0x0000000006da0e43 (anonymous namespace)::TemplateInstantiator::TransformTemplateArgument(clang::TemplateArgumentLoc const&, clang::TemplateArgumentLoc&, bool) SemaTemplateInstantiate.cpp:0:0
#16 0x0000000006da3eaf clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateSpecializationType(clang::TypeLocBuilder&, clang::TemplateSpecializationTypeLoc, clang::TemplateName) SemaTemplateInstantiate.cpp:0:0
#17 0x0000000006d95f9e clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
#18 0x0000000006dacc2d clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformElaboratedType(clang::TypeLocBuilder&, clang::ElaboratedTypeLoc) SemaTemplateInstantiate.cpp:0:0
#19 0x0000000006d9553f clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
#20 0x0000000006d9b71a clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*) SemaTemplateInstantiate.cpp:0:0
#21 0x0000000006da56da clang::Sema::SubstType(clang::TypeSourceInfo*, clang::MultiLevelTemplateArgumentList const&, clang::SourceLocation, clang::DeclarationName, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6da56da)
#22 0x0000000006e1fe51 clang::TemplateDeclInstantiator::InstantiateTypedefNameDecl(clang::TypedefNameDecl*, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6e1fe51)
#23 0x0000000006e20594 clang::TemplateDeclInstantiator::VisitTypeAliasDecl(clang::TypeAliasDecl*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6e20594)
#24 0x0000000006e22354 void llvm::function_ref<void ()>::callback_fn<clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&)::'lambda'()>(long) SemaTemplateInstantiateDecl.cpp:0:0
#25 0x0000000006354461 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6354461)
#26 0x0000000006dcf75a clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6dcf75a)
#27 0x0000000006d7fa55 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDeclStmt(clang::DeclStmt*) SemaTemplateInstantiate.cpp:0:0
#28 0x0000000006dbf0c4 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#29 0x0000000006dc573a clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6dc573a)
#30 0x0000000006e17812 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6e17812)
#31 0x0000000006e15b7f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6e15b7f)
#32 0x0000000006375f6f clang::Sema::ActOnEndOfTranslationUnitFragment(clang::Sema::TUFragmentKind) (.part.0) Sema.cpp:0:0
#33 0x0000000006376752 clang::Sema::ActOnEndOfTranslationUnit() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6376752)
#34 0x00000000061f9481 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x61f9481)
#35 0x00000000061ebf5a clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x61ebf5a)
#36 0x00000000041edcb8 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x41edcb8)
#37 0x000000000446d3c9 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x446d3c9)
#38 0x00000000043f624e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x43f624e)
#39 0x000000000455062e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x455062e)
#40 0x0000000000c45f8c cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc45f8c)
#41 0x0000000000c3f21a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#42 0x0000000004230cd9 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
#43 0x0000000003881464 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3881464)
#44 0x00000000042312cf 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
#45 0x00000000041f7605 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x41f7605)
#46 0x00000000041f806d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x41f806d)
#47 0x00000000041ffdf5 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x41ffdf5)
#48 0x0000000000c43425 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc43425)
#49 0x0000000000b26064 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xb26064)
#50 0x00007f3cbf629d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#51 0x00007f3cbf629e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#52 0x0000000000c3ed0e _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc3ed0e)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
Compiler returned: 134
```
See it live: https://godbolt.org/z/GKss9Es6x
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkW11z47aS_TX0C0oqEvwQ-eAHjWxnJ5nsTEVO9lEFgk0JaxJgANBj59dvASQlgpKc0aw191ZuyokVAug-56DRaEIwUYptOcCtF3_w4rsb0uqdkLcFeWaF0oLDTS6K19vHHaBSVJX4yvgWaUm4qohmgqOWM-35d56_7P-b-N0PbZruiYa6qYgGL1zp1wY4qWE-n3vhfdfcKmPyWbBio5EX3tmPXvhhbHRkgnE9Hq20bKlGCv5sgVNA3mIYuLg7b2SEAy3lVnl4hTrDiPECXkDtHRg0qPRwOriwGGyfHgfORl79rONjPOzZbLQXrowfMyL-MLiI73oL4QjzCLB1vfVwOnVRdjpY52NcvuHhd489nJmfY9PD_Iw9MYUk_C9QDQXKXxGtCN-ir0zvTs-s4EpU0D21fT38wfyES-ThBymE9vBDVT3Xs0YKY9bDD32_h4rlHn5YQ036X4_9tHzkShOuGdEwN7ETLoMUp8ZmNzRceuFy6LyU27YGrtEW9BdCn9ZtrjTTrYZi2sXD6chA5zgxQr1h1iq3REulQNoo9xJ_PR9aHYdM8I9mPpEXrpCHU2ZHL-V23hD6tFHsLxhmY4FKwioo5p1yXz7dL9f3SLV5zTQiKG-3SEIjpEZaoJ3WjTLo8IOHH7ZM79p8TkXdK3ssMFOqBeXhB0R4gRinVVsA0jtAVBK1QzmhT1oSCoZ7I6GRgoJSUCAlWtk9NiOJUoKaWSiQbDlSVLJG95DXmtAnVLS1mZ7ukT_3_OyLFFtJakR6hVQfCqKxUy_qhlUgZ_DSVEKCHMJhRgaB1UzLlj95-CFn_BAtJqrQbFt8JbKcRWi2RTNh7JKmMdZb3bR6rtCsNlqg2ewlTWZE1TP1yjV58cI7xjVUaLZGs9mW0pkWoqI7wrgX3r0Jz3RWnDRqJzSalVRUQs4KRrZcKM2oQrOSi5kV1n2sdOGFd7SDjhMTFb28Q0IJjGBeuAJReuE9aohUIBHRCHiBRIlKNiwt3Pc8GAiXJi4Toy7bLxeTbsqWUxuoBZSMsy5m8WJIFDYt7HPDojOPPBz6yH_xh3_CLCywnyIbX3ZdqFfVffgiGdd29h-7EEoPnST5uhFKSyB1v7K6NYBs3L9LDHj4g__SwzNLaY8_mOAnAPQU_lUFhLfNZ75mW04qD6cttxtfgSphvFwDrQHjoMUO2jT1yzxFKxNEvwEVzyBfO3j_RXhRGad9NnH7rATX8KL7JOnbf_cuwt7FogxpXiYRjrHfU-sy70uabJJoVjHevsy2vO0a6FyJeWKB2yEO7Mi1mSVZSVGjdxJIsXliVXWZAzvecRBPQUeLBG2V1eJS8NEicWwnrm2cLsoQkdxk2Yss24GO5cWR5SC_2GaQOzZT12aYQZZcZtMOcWxm46hLigT8El9v3zRo50xJMjdBhN7e4UfBaxaz7yJd4DTCxh7hgr_WolXIFG2qsRkocyEcjAvZt5gqtRSyHro8vjbwhcja_HbZmSefBP3Qsqow6-4cz7GFT4KaXrkQ1cVEA5doFpUBcfxJgD18L1x9lwb3Uxkupz3QvJAentDL6aK4Oj0TzrYSY3x7OdXp6O-hHU5ox2mc_YNmNZrO6uJfFrRrWxF95KXw8PJiIrFLhPgQhe-YZk4n0GnrJ0GReZHSf59V7WQl351skgndEEh5_Xnre60boIxU7C97WvD9mffYTp9_T_T9b1LDxSotpou3zOAftHjTSRBQiq-fku8rU2iZV8nLibpjv4dyNp3ROPwBcf-jZhT7_5B0jCfFEImTwiFiS8_uk6lWvwmCo_CvbaXZJ3iG6iizMqXPZeHO4idBbcaZNN4BrYi0LV22OeTmd36P7AXZV_RGMbe-gqCEODiVCA3K4w1rNCFGuQJKQ8H0PZbVaVxek2bHwqHp1lOA_TiLvp3mH0wxGyzLihF1mt6oaXkVUhazQyqakMJhHNlD4tGxxXCas5FQeuHKtvaHiMOKpKSqckKfNiX3wtX51XLMezSXk6f9wcL_YwH1ucTDi4rUuYnaxQE3ToejljPpwWA4nSLcii2MoygJTqcI2fL_YXq3bsuSUQb9odW6S3Xpm8v7W_W_Qpx0jJw4mVRttFzEb2XFHzzP75_lLEFHgUlFtihJHF99gzP6rHWtj7Xsnl6-vU0qr7z0aXR1GitRN6LlxTEVt2X5vW8VeFJd0XgRvhWfx0BGAP5dQtBwGIegezyeQLBIA3ya5Eivhz573O2P4v8u84waD4MnO-709zV2YEPP4R9M-Mf5ojzN_wtIewgDvGB8e1DDOPZwej3MBpKD2S2OwkVcJmcwL6n-zO958bl8PHyh_Ttn-kGS7Zkj0G6Z_T70-IXxYjj0bIjUh0PPk6smDCfgkkV8JqDOghu-D37vLchicZR0S5WgzKI0cM_MpAI5-vwoGrt0jzejzw35s4UvWrrFiun4kxRt85vZaO9PFOF7PX4VRVvBx7oR0uzpGq6UBTqajg5u9RFAXrpbseW-XD-ePTG_9srtIDmYnfIhCqCgeYqcbaCAn4AvbbLp37hfgLYa-kdXibIeiIPU2eajKClC6pyaPkhTrvDiBNQrgewwOCCdTTwKywRHgCa7qnHbJT4KpxU9z-oqsdzjdIg423YUx36CHSI95AOf5_0-Na0iHL5XeX_q8Y0JRM6W7NMoLlOKKA02NTE2Rt9LL6UkrzaxrOiOyKF2WNpEs0LuM7zq7h1dhUeH0qERuDTCEgcEDeKvgkebKUZk1jWpqj-AaiE_1k11klPivsUYG32p79RNhWTPIE_uT5GzeUY49GmRvefbaee7j6FVsBJ1TXgxXdQn59DerDDPRGO8E6PBSB8tGd_220g3wfsBmw19eQmC7n9yohjdKNu9V9HpbB5stCRMq6F5Yo5UlVkTQo7aTZdRsWaDqNP8m16Ifxb56fkIJzcGgiiJRlNx6l5A1_Jby9ekhOrVkfNHv9j2iJ3IjyYhFmDq1Gf_cSEyKR7PxkLsbunlIvHjs8LZuSNHO-agppPMJwNNh3OHom90XU6-o9pze98CwtJ2AmpS6pSpnxSX6vKzyNV5UX4W-dFJ8VupeR8HDWHycAXrW3Xsg-WHqGnEctRcTNQsi_JslN2NPjuFw4mK4dws_EA1r1DOWnkc_dJJfRJGuNdvqFAG_DatLPuk8Pfb9rvXJAaZA92pDf0cJ34SIQP6vX13pse-Y39ymSorsgvvrdkhjs1gahMiH202ZthGaSL1ZkTum71A5HrBk0oOCh9QZ__d58wa33sfN4dLBFLa7z7669tl_4aBaL8iusvH9lo3ghdmoqsAFISRgdkqQLNnpAVSAIiNyv7e2VDxIwm6lRzMmjSD37hVvjaWNKrYs3kfmt5oFkUuKj0Xcuvhh788_PDTL0pl9yp5uSluwyILM3IDt8EiCHEapdi_2d1GISRRkPl-SP0iwDgu8wAXSVlA6pcYlzfsFvs48qMgCRKcxNk8jSDLo9QHWBCSRakX-VATVs3NejO-b-y16ds0zXB8U5EcKmX_FAJjDl-RbfQw9uK7G3lrL1zn7VZ5kV8xpdXBima6gtvDfXGjdSsBfd0B7_6kgPEtIqgh9GmYgYZwZfqKEtVCwvCXB0jvCO86QgX2NvVNK6vb778Qbsn9XwAAAP__4j1zKA">