<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/136698>136698</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Bug in `SmallPtrSetImplBase::insert_imp_big`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
headshog
</td>
</tr>
</table>
<pre>
Hi! I have found bug in `llvm::SmallPtrSetImpl::insert`. I have a function:
```c++
void removeParallelEdges(llvm::CallGraph &CG) {
for (auto &&CGNode : *CG) {
CallGraphNode *Node = CGNode.second.get();
bool FoundParallelEdge = true;
while (FoundParallelEdge) {
SmallSet<Function *, 16> Visited;
FoundParallelEdge = false;
for (auto CI = Node->begin(), CE = Node->end(); CI != CE; CI++) {
llvm::errs() << "HERE " << CI->second->getFunction() << " " << Visited.size() << "\n";
if (!Visited.insert(CI->second->getFunction()).second) {
FoundParallelEdge = true;
Node->removeCallEdge(CI);
break;
}
}
}
}
}
```
Here segmentation fault occurs with the following stacktrace:
```
#0 0x00007ffff05dd33a in llvm::SmallPtrSetImplBase::insert_imp_big(void const*) () from /lib/x86_64-linux-gnu/libLLVM.so.21.0
#1 0x000055555586baa1 in llvm::SmallPtrSetImplBase::insert_imp (this=0x7fffe6ff3408, Ptr=0x7fffa001d2a8) at /usr/lib/llvm-18/include/llvm/ADT/SmallPtrSet.h:155
#2 llvm::SmallPtrSetImpl<llvm::Function*>::insert (this=0x7fffe6ff3408, Ptr=0x7fffa001d2a8) at /usr/lib/llvm-18/include/llvm/ADT/SmallPtrSet.h:367
#3 DbgCallGraphDOTInfo::removeParallelEdges (this=this@entry=0x7fffe6ff37a8, ...)
...
```
And with output:
```
HERE 0x7f06780913a8 0
HERE 0x7f06780914e8 1
HERE 0x7f06781d6d38 2
HERE 0x7f06781d6ed8 3
HERE 0x7f06781d6fa8 4
HERE 0x7f06781d7118 5
HERE 0x7f06781d7258 6
HERE 0x7f06781d73d8 7
HERE 0x7f06781d7558 8
HERE 0x7f06781d7768 9
HERE 0x7f06781d78e8 10
HERE 0x7f06781d7a58 11
HERE 0x7f06781d7bc8 12
HERE 0x7f06781d7d58 13
HERE 0x7f06781d7ec8 14
HERE 0x7f06781d8038 15
HERE 0x7f06781d81a8 16
[1] 666112 segmentation fault (core dumped)
```
I've also tried to change LLVM version to 18 and didn't get this problem, so this bug appeared in newer version.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEVk1v2zgT_jX0ZRCBH5ZEH3xw_NEG6PtusS16LShxJHNLiwZJJen--gUlOXFqBbt7WkGwrIfD4fMMZ0ZUIZi2Q1yT_J7ku4Xq49H59RGVDkfXLiqnf64_GsIZPMBRPSI0ru80VH0LpgNSUGsfT0RsiNh8OSlrP0f_BePD6WxH0HQBfSQFzS4OFDR9V0fjumRBh7ug410Tfp9uunl0RoPHk3vEz8ora9HudYuBcPm64lZZ-8Gr8xEIL7YfCF8BKdNsgMZ5IFyqPro0OIz_32kEIjZA-OaN9Yuf0YJvJssdjJOygLXrdNZiJFwSviLifmQOw1U5Z-GQAnPNdXAQfY-j9Wj6dDQ2LSFvzK_Zj9cQ0C8YidgeppAlcoRvgRVE7OGbCSaivvYP7_BolA341vA6RNuHwSqJvSNiX2Frukkq38J2_2YUO_0ShmEmZ0Os9uP7tIc3cgBedw69D6MPIGJLxBYI5x_3v-_T8wJtH9JqY-zTvxbjJQ43c6_nTWHJgvkTbwxJvu3SQ7ylZhoYTNll8pS4XP4tC8JXU4LMaX5vQ64S4xLXMd1TMo75IFMsV78yBag8qh-_wqTcXb1PbxdwfE6_l2IjdPMRPULA9oRdVEN-Naq3EVxd9z7Ak4lHiMdU9Na6J9O1EKKqf0Svapyq98ob4YIC0GdKKS2bpmlorrUQKnWKd9vEvQp43Sq-m9P5e2VawuXQA2rXhThk_QqmzWy8OwHhB2sqwg_PsvheLO-s6frnu7brx4FPn779Lwsu4yybqLELtXy4ZFEpxf41tcQhHk0gYkefk0gsmkYsqUx18jn6F1xRyjRXA2EVE90--BfSac07Jgk_mK62vcYJI_yw2X0l_HBFJTsSsWF5Psrg7_MlYvs69pqjGyL21zL-KwmiKEcJAnZV-9Jzd799fegaNzKc6fhXdIfHkmIX_c-37Es1sM-yLFUM3aQ_b5Nz0-kxn10fz328zd6h-ySXtCglXTGhJMzhS5TAfsWZLrSQwGdw1BLEDN4oCctbvGRMQj6D81xCMYMLLaGcwfNcgpzBy0LCagaXSdeNYKZLlUtgM4rLqpbAZiSXOs2Y0VximjEjWlIhgc2olkzJ9LGjG5LfM5LvUnMrioIxPte3CJe18wi6P51Rj6lwvccPhJfpCGKDg-gNaogO6qPqWoTUMeARfUjuogMmQXUatNEd4WWEFiOkBISzd5XFU8q35CZB6TikzmdUHnVqKR0-ob84yxZ6LfRKrNQC16xc5oKvciEXx7VCpnIuC0EruaxVtVRNrbCRjBdFrQVdmDWnPKdLzplY5kJmqpRMVXmBRU0LRVepGk7K2CxVXuZ8uzAh9LhmoihWcmFVhTYMhzvOO3yCYXT4Cu4Wfj2UcNW3qaisCTG8uokmWlzfvxzz_mnXLuii93Z9jPEckgE_EH5oTTz2VVa702uPGNY-e_cH1jH1kEQsEH6YmD-u-V8BAAD__w7lB44">