<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/139019>139019</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clangd] "Expected valid TemplateArgument" for `std::min`-like template
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clangd,
crash-on-invalid
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tbaederr
</td>
</tr>
</table>
<pre>
For these two files:
```c++
// test.cpp
#include "test.h"
void run(int num_total_tasks) {
int cnt{};
int x;
for (int i = 0; i < min(x, num_total_tas - cnt); ++i) {}
}
```
```c++
// test.h
template<typename T>
T min(T A, T B) { return A < B ? A : B; }
```
`bin/clangd --check=test.cpp --check-completion` crashes:
```console
Expected valid TemplateArgument
UNREACHABLE executed at /home/tbaeder/code/llvm-project/clang/lib/Serialization/TemplateArgumentHasher.cpp:68!
Process 3542402 stopped
* thread #1, name = 'clangd', stop reason = signal SIGABRT
frame #0: 0x00007fff8287ff54 libc.so.6`__pthread_kill_implementation + 276
libc.so.6`__pthread_kill_implementation:
-> 0x7fff8287ff54 <+276>: movl %eax, %ebx
0x7fff8287ff56 <+278>: negl %ebx
0x7fff8287ff58 <+280>: cmpl $0xfffff000, %eax ; imm = 0xFFFFF000
0x7fff8287ff5d <+285>: movl $0x0, %eax
(lldb) bt
* thread #1, name = 'clangd', stop reason = signal SIGABRT
* frame #0: 0x00007fff8287ff54 libc.so.6`__pthread_kill_implementation + 276
frame #1: 0x00007fff82826f9e libc.so.6`raise + 30
frame #2: 0x00007fff8280e942 libc.so.6`abort + 223
frame #3: 0x00007fffa25151d5 libLLVM.so.21.0git`llvm::llvm_unreachable_internal(msg="Expected valid TemplateArgument", file="/home/tbaeder/code/llvm-project/clang/lib/Serialization/TemplateArgumentHasher.cpp", line=68) at ErrorHandling.cpp:233:3
frame #4: 0x00007fffe8b473c9 libclang-cpp.so.21.0git`(anonymous namespace)::TemplateArgumentHasher::AddTemplateArgument(this=0x00007bff808b3e40, TA=TemplateArgument @ 0x00007bff8071a720) at TemplateArgumentHasher.cpp:68:5
frame #5: 0x00007fffe8b46f3c libclang-cpp.so.21.0git`clang::serialization::StableHashForTemplateArguments(Args=ArrayRef<clang::TemplateArgument> @ 0x00007bff808b3e20) at TemplateArgumentHasher.cpp:409:12
frame #6: 0x00007fffe83b71f0 libclang-cpp.so.21.0git`clang::ASTReader::LoadExternalSpecializationsImpl(this=0x00007e8f8218d200, SpecLookups=0x00007e8f8218e188, D=0x00007e0f841bb1e8, TemplateArgs=ArrayRef<clang::TemplateArgument> @ 0x00007ffffffe0d30) at ASTReader.cpp:8388:20
frame #7: 0x00007fffe83b77b3 libclang-cpp.so.21.0git`clang::ASTReader::LoadExternalSpecializations(this=0x00007e8f8218d200, D=0x00007e0f841bb1e8, TemplateArgs=ArrayRef<clang::TemplateArgument> @ 0x00007ffffffe0e00) at ASTReader.cpp:8412:7
frame #8: 0x00007fffdd9eae82 libclang-cpp.so.21.0git`clang::RedeclarableTemplateDecl::loadLazySpecializationsImpl(this=0x00007e0f841bb1e8, Args=ArrayRef<clang::TemplateArgument> @ 0x00007ffffffe0ea8, TPL=0x0000000000000000) const at DeclTemplate.cpp:377:26
frame #9: 0x00007fffdda040e8 libclang-cpp.so.21.0git`clang::RedeclarableTemplateDecl::SpecEntryTraits<clang::FunctionTemplateSpecializationInfo>::DeclType* clang::RedeclarableTemplateDecl::findSpecializationImpl<clang::FunctionTemplateSpecializationInfo, llvm::ArrayRef<clang::TemplateArgument>&>(this=0x00007e0f841bb1e8, Specs=0x00007e0f841bb250, InsertPos=0x00007bff80bd9040, ProfileArgs=0x00007bff805c8f20) at DeclTemplate.cpp:405:8
frame #10: 0x00007fffdd9eba3d libclang-cpp.so.21.0git`clang::FunctionTemplateDecl::findSpecialization(this=0x00007e0f841bb1e8, Args=ArrayRef<clang::TemplateArgument> @ 0x00007bff805c8f20, InsertPos=0x00007bff80bd9040) at DeclTemplate.cpp:487:10
frame #11: 0x00007fffe405c00c libclang-cpp.so.21.0git`clang::TemplateDeclInstantiator::VisitFunctionDecl(this=0x00007bff808b3840, D=0x00007e0f841bb3c8, TemplateParams=0x0000000000000000, FunctionRewriteKind=None) at SemaTemplateInstantiateDecl.cpp:2623:27
frame #12: 0x00007fffe407cf13 libclang-cpp.so.21.0git`clang::TemplateDeclInstantiator::VisitFunctionDecl(this=0x00007bff808b3840, D=0x00007e0f841bb3c8) at SemaTemplateInstantiateDecl.cpp:4343:10
frame #13: 0x00007fffe3fe94b0 libclang-cpp.so.21.0git`clang::declvisitor::Base<std::add_pointer, clang::TemplateDeclInstantiator, clang::Decl*>::Visit(this=0x00007bff808b3840, D=0x00007e0f841bb3c8) at DeclNodes.inc:256:1
frame #14: 0x00007fffe4223810 libclang-cpp.so.21.0git`clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&)::$_0::operator()(this=0x00007bff808b39a0) const at SemaTemplateInstantiateDecl.cpp:4616:27
frame #15: 0x00007fffe4223715 libclang-cpp.so.21.0git`void llvm::function_ref<void ()>::callback_fn<clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&)::$_0>(callable=136337303484832) at STLFunctionalExtras.h:46:12
frame #16: 0x00007fffdb93ae2c libclang-cpp.so.21.0git`llvm::function_ref<void ()>::operator()(this=0x00007bff805c8de0) const at STLFunctionalExtras.h:69:12
frame #17: 0x00007fffdb93b6a5 libclang-cpp.so.21.0git`clang::runWithSufficientStackSpace(Diag=function_ref<void ()> @ 0x00007ffffffe21b8, Fn=function_ref<void ()> @ 0x00007bff805c8de0) at Stack.h:49:7
frame #18: 0x00007fffdb93b00c libclang-cpp.so.21.0git`clang::StackExhaustionHandler::runWithSufficientStackSpace(this=0x00007e8f82192460, Loc=(ID = 2147483606), Fn=function_ref<void ()> @ 0x00007ffffffe22b8) at StackExhaustionHandler.cpp:20:3
frame #19: 0x00007fffe09b87a6 libclang-cpp.so.21.0git`clang::Sema::runWithSufficientStackSpace(this=0x00007e8f82192200, Loc=(ID = 2147483606), Fn=function_ref<void ()> @ 0x00007ffffffe2338) at Sema.cpp:606:16
frame #20: 0x00007fffe4081b2e libclang-cpp.so.21.0git`clang::Sema::SubstDecl(this=0x00007e8f82192200, D=0x00007e0f841bb3c8, Owner=0x00007e0f841b6d30, TemplateArgs=0x00007bff80a8bb40) at SemaTemplateInstantiateDecl.cpp:4615:3
frame #21: 0x00007fffe3a68a1d libclang-cpp.so.21.0git`clang::Sema::FinishTemplateArgumentDeduction(this=0x00007e8f82192200, FunctionTemplate=0x00007e0f841bb1e8, Deduced=0x00007bff80bd8220, NumExplicitlySpecified=0, Specialization=0x00007bff80a8b2e0, Info=0x00007bff80a8b0a0, OriginalCallArgs=0x00007bff80bd8400, PartialOverloading=true, PartialOrdering=false, CheckNonDependent=function_ref<bool ()> @ 0x00007bff80a8b820) at SemaTemplateDeduction.cpp:3947:7
```
The template argument is:
```
(clang::TemplateArgument) {
= {
DeclArg = {
Kind = Null
IsDefaulted = false
QT = 0x0000000000000000
D = 0x00007fffd22b2140
}
Integer = {
Kind = Null
IsDefaulted = false
BitWidth = 32766
IsUnsigned = false
= {
VAL = 0
pVal = 0x0000000000000000
}
Type = 0x00007fffd22b2140
}
Value = {
Kind = Null
IsDefaulted = false
Value = nullptr
Type = 0x00007fffd22b2140
}
Args = {
Kind = Null
IsDefaulted = false
NumArgs = 32766
Args = nullptr
}
TemplateArg = {
Kind = Null
IsDefaulted = false
NumExpansions = (Rep = 32766)
Name = 0x0000000000000000
}
TypeOrValue = (Kind = Null, IsDefaulted = false, IsCanonicalExpr = false, V = 0)
}
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMWt1T4zgS_2vEiwpKlvyhPPBgCLmljmXmgJ19pGRbTnQoskuW2bB__VXLdj7sAJmd2a2jpqZstdTq_nWrP6yIplFLI-Uliq5QND8TrVtV9tJlQhbS2rOsKt4uF5XFbiUbid0fFS6Vlg1iKSIpikn3L0f0Cv6RFNEFogvsZOMu8rr2I0yZXLeFxIhST1ghSoFC0tdKFdi2BlGujMOmXT-7ygn97ETz0iA6wygBthgDOTcOXpM5YrvBTffi38vK4p6VwojNMUHsyj9e47WCXTaIXh9ug889XzqDqZ0eatg4mQPn7v9B126vT1RfIZI6ua61cBKxa_dWSyPWEj8hdoNI-tRL84RTkOcJX_U7Yitdaw1OvchXGLGFf07xlRdvKkpMMmC1yLUwywKfn-crmb8gNh9MMAyd59W61tKpyqCY4NyKZjU1ZGWaSktE0ptNLXMnC_wqtCrwU69MapftWhqHSPrb_cNNev1LenV3g-VG5i3MFg4julhVa4nooncjkK4qYEDr1_V5bav_ytwNMsOwyhBdPEqrhFZ_Ci8iXYy3_AUEtt6rWBpzRANE0q-2ymXTYBaFNCQUN66qa1l4c6TYrawUBUaUBd7uYAJwC0STDi9EEyDAKmylaCrj6XAohMaPt_9Krx6ewLVK69dSRsAYZEMIIUlZlpzypCyjEGuV5RdNdRGjmDw_193Ozy9K62cFuIMGXjPwMUyTGJH05DWdlc4Ru8GYbA72Rewa0Svgx25AtHX1qjHGiEZSeGeHp2zjj8docbxdzPvFRi6HxceX8GEJJ_2SfF13S0KyKeGPEDJsKzbYn7_1ujuMmwX8wYQjrIst62isSkg2ezy9bbnWRQaHJnM_3dYY2P0tBgelt4yDCWMalzN5wNgK1UjPgJHxejpZT-QspAfrRVZZ1wlA2ZgBO2QgaBREQREBg7u7b78CDxpckKVyKCZwdMENWQpPz62xUuQrkWn5rIyT1giNKF83S8TmiNLPwgelYAvIJd38fyBodFtqZWBLiB8ziFY31lb2F2EKrcyyDy4dNBO8wkO8JM_ChOUzDzgIdZ7X9SFoiHJhKvO2rtrGe2RTi1z6XANIHhe2o6VFMQWNu5VqEJv3QmRlyQnPmAz98XhKEZuPF2EUErw_PwlEQkmv_WcxlqXRGIVoikJcsvwDFDqLea2aA3P5oUcHTgQbLyo7lqdBlKd2CTqn1oq3B1kidr3HcIIRu5loDAidpnFIwDIBHescj3VmWRKU5DSd08enBymKwbB3lShuNt2JeaxlvsOjuV3XemJkyUtOA17QLq7Ckruqemnr6RwZcA5z5nsUUvIwyLJAesqe9n8ZUx_lS0kKNmC61bCHkTMOrkMnISs5gmOSsZ-N42cY_jP4SPIuPmEAwTsZw8MP4SmKmRSS09PgeZCFzLWwcJoGCecy133QrkRxJ_58O8njDjH5KViIDt6vd9tt9v8AJyg9HaAFQg9se8BYAp5DJyl0NgZMkJBI_jMAA6BujLNvT1Yo1xxqvWhNDvgNyw5RvTVl1ZUwiKVem7daQk1x8ualMsWIJxjqe2WAdLdN2yfbD1FfS37iFbDdESqN_Am7NY207ms1TlZZMSNdsvpqK8j-vXPtz4lyXm7D9RFnCAmkID4pp8j09GSCFac5wxjNj2zxdx6YAwQ-x_FdjDgcmGASgINR0SlDEuWEnJi998G5NY0Txinhqj4gf1ONcgOOHr_36hUevheGWX4Qhr8KK9bNOyHjGg-bPcg_rHLy38oUiM3vKyN7ZB7lWgy8dgJ7-YdSL6ZQ69HkoMkL6ASmJC-DExPVPwTTiRqGLGTHfWFU_0tWylmYnVjVQPh6BVUGva5EIxG7blzRvYuieK4r3xuAFqfgczitwybdRlIP3A-BBRzvq0I2F8rkYPUICrtgAsy40A8pZTw4ERiwSP_UZo3rLXxEr6m215VxcuOmxF9b7dSdfJV6HD7uVOO61Alhe2gsEA2fSfdY1dJ24AIK78I3E4dJ-AS_ioN4e3IO4Bt3CABfEkQfwOc_A-5SVdmfjmfro6en9vIPzpALrTORvzyX5jC-_h_BDzkU5IQcj9g8YDFjCSMs5CFndDjAT3dDMBD6ZuOsaC5WHt6jnUgwakWKbMaEpB8F8O_C9RR3iXJeyJG7vKNFfLyfCpKpFlksPnKRPXPY1vyu3OqxLUuVK2ncoxP5y2PXWvO5EkvE5h_qeqREpUHmU8_CfM_iER6ABMjSWXB2rMYPxkU-qH5yBvbcbzYr0TYgn_9uMTREH8NyrCGa0TD2UfOuyv1nGH4799_EaBAmIWcx8T793agMkNKM76MykXvIweTY15ZgVNxLMst4IuLvjcJ_BZa-T_ybYGFsP3sPH1uIP_CTFoeSSSnCg4zKH0lGHyr9flX25Q8Dvjaixv47wKR13j8ggmfZtlo9KbNEg0fscBhXrkzEXAQnlvc7HBbKqGY1juNzWbT58dr-EJ1xn_BuE-A5ymJSt3PaVfb37fpmU2uVK6e7rrxU3fShu9r_UDaGk8q-PYBOc0wkwhO_WLVURuhrofURo2QFDzudvgrrlNBfXqXVlSgUgDZ3tpX7RFtI21FKoRtPul7J_OUeithamsL3MuPDkFWV_iByCp5xeswxtvYYPgDMwqSPpqOLuKeVxMNNGxbDR081vtjqLg0-6sP27hq7e4PhxZeNqV2ORjGGfsMP3rdab0dvm7ksRaud7IgdXAP1P0_9VciknxlmzPcm-ARBaUaDcJjQXQH6jYyTS2k_F-tjia6U-10VbuVJjCZxvKfKb8bfD4_WjXfE-Ft619-37sbqb0J_puxOG4yf3mp5qu7fhG7lj2q-Y2JarWtnTxVlJwecqx_1i_t2vWVziP92-FC-3fZ7TvxTvLMLSsI0qjK9XpQ_yHpPNjrzMg-3a-_adk_It1p-sXsWo_xQNghkR8XyhGthKqNyKCtre0j81vtcJxM-el1_VlyyYsZm4kxeBkkYx0kSB-RsdZlnIqPxjCZZEUmaiazksSx5FOaSJlEpz9QlJTQiEeEkDBgjFyGLSMlzTmMyYzmXKCRyLZS-gAr7orLLM9U0rbwM2IwEszMtMqkb_8sKSocrSIroNbxa0azOK3OujL8gA0I0P7OX_rIra5cNColWjWt2zJ1y2v9Qo-cVAZQnXLR1v4qIybYzXyuDYnKu1csudJ61Vl-unKt94PS_ZFgqt2qzi7xa95dw07s4r2-D6KJX-fWS_i8AAP__2hEq5w">