Issue 136698
Summary Bug in `SmallPtrSetImplBase::insert_imp_big`
Labels new issue
Assignees
Reporter headshog
    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.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to