| Issue |
169135
|
| Summary |
Crashes in WaitingOnGraph<>::emit() -> ... -> DenseMapIterator<>::AdvancePastEmptyBuckets()
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
macdice
|
Testing PostgreSQL against the main branch (needs lifetime.end semantic change https://github.com/macdice/postgres/commit/d23fb4d32eaa71ed3a0b8f0f2a7d27fec036b4ea, also tried without the poison stores), I got reproducible segmentation faults that I git-bisected to @lhames's recent commit 91738466. We're using the C API. I've been trying to figure out if we have a previously undetected lifetime/context/module problem somewhere, or we somehow manage to create an illegal graph or something like that, but I'm not seeing it yet. Any ideas, could this be an LLVM bug?
Observed on Debian/ARM and FreeBSD/x86. Example backtrace when using RuntimeDyld (PostgreSQL is still using that for now due to JITLink completeness issues across versions we need to support, but see further down for JITLink backtrace):
```
Core was generated by `postgres: tmunro regression [local] SELECT'.
Program terminated with signal SIGSEGV, Segmentation fault.
Address not mapped to object.
#0 0x0000000839cfbc71 in llvm::DenseMapIterator<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::NonOwningSymbolStringPtr, llvm::DenseMapInfo<llvm::orc::NonOwningSymbolStringPtr, void> >, llvm::DenseMapInfo<llvm::orc::JITDylib*, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::NonOwningSymbolStringPtr, llvm::DenseMapInfo<llvm::orc::NonOwningSymbolStringPtr, void> > >, false>::AdvancePastEmptyBuckets (this=0x820e38308)
at /home/tmunro/projects/llvm-project/llvm/include/llvm/ADT/DenseMap.h:1274
1274 while (Ptr != End && (KeyInfoT::isEqual(Ptr->getFirst(), Empty) ||
(gdb) bt
#0 0x0000000839cfbc71 in llvm::DenseMapIterator<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::NonOwningSymbolStringPtr, llvm::DenseMapInfo<llvm::orc::NonOwningSymbolStringPtr, void> >, llvm::DenseMapInfo<llvm::orc::JITDylib*, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::NonOwningSymbolStringPtr, llvm::DenseMapInfo<llvm::orc::NonOwningSymbolStringPtr, void> > >, false>::AdvancePastEmptyBuckets (this=0x820e38308) at /home/tmunro/projects/llvm-project/llvm/include/llvm/ADT/DenseMap.h:1274
#1 0x0000000839cfbb72 in llvm::DenseMapIterator<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::NonOwningSymbolStringPtr, llvm::DenseMapInfo<llvm::orc::NonOwningSymbolStringPtr, void> >, llvm::DenseMapInfo<llvm::orc::JITDylib*, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::NonOwningSymbolStringPtr, llvm::DenseMapInfo<llvm::orc::NonOwningSymbolStringPtr, void> > >, false>::makeBegin (Buckets=..., IsEmpty=false, Epoch=...) at /home/tmunro/projects/llvm-project/llvm/include/llvm/ADT/DenseMap.h:1204
#2 0x0000000839c9c5dd in llvm::DenseMapBase<llvm::DenseMap<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::NonOwningSymbolStringPtr, llvm::DenseMapInfo<llvm::orc::NonOwningSymbolStringPtr, void> >, llvm::DenseMapInfo<llvm::orc::JITDylib*, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::NonOwningSymbolStringPtr, llvm::DenseMapInfo<llvm::orc::NonOwningSymbolStringPtr, void> > > >, llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::NonOwningSymbolStringPtr, llvm::DenseMapInfo<llvm::orc::NonOwningSymbolStringPtr, void> >, llvm::DenseMapInfo<llvm::orc::JITDylib*, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::NonOwningSymbolStringPtr, llvm::DenseMapInfo<llvm::orc::NonOwningSymbolStringPtr, void> > > >::begin (this=0xd70baa32da0) at /home/tmunro/projects/llvm-project/llvm/include/llvm/ADT/DenseMap.h:79
#3 0x0000000839ce7d4c in llvm::orc::detail::WaitingOnGraph<llvm::orc::JITDylib*, llvm::orc::NonOwningSymbolStringPtr>::sinkDeps (SNs=std::vector of length 1 = {...}, SuperNodeDeps=...) at /home/tmunro/projects/llvm-project/llvm/include/llvm/ExecutionEngine/Orc/WaitingOnGraph.h:542
#4 0x0000000839c7ce9d in llvm::orc::detail::WaitingOnGraph<llvm::orc::JITDylib*, llvm::orc::NonOwningSymbolStringPtr>::emit<llvm::orc::ExecutionSession::IL_emit(llvm::orc::MaterializationResponsibility&, llvm::orc::detail::WaitingOnGraph<llvm::orc::JITDylib*, llvm::orc::NonOwningSymbolStringPtr>::SimplifyResult)::$_0>(llvm::orc::detail::WaitingOnGraph<llvm::orc::JITDylib*, llvm::orc::NonOwningSymbolStringPtr>::SimplifyResult, llvm::orc::ExecutionSession::IL_emit(llvm::orc::MaterializationResponsibility&, llvm::orc::detail::WaitingOnGraph<llvm::orc::JITDylib*, llvm::orc::NonOwningSymbolStringPtr>::SimplifyResult)::$_0&&) (this=0xd70bb2e2070, SR=..., GetExternalState=...) at /home/tmunro/projects/llvm-project/llvm/include/llvm/ExecutionEngine/Orc/WaitingOnGraph.h:337
#5 0x0000000839c7c8f8 in llvm::orc::ExecutionSession::IL_emit (this=0xd70bb2e2000, MR=..., SR=...) at /home/tmunro/projects/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:2877
#6 0x0000000839c8cfc0 in llvm::orc::ExecutionSession::OL_notifyEmitted(llvm::orc::MaterializationResponsibility&, llvm::ArrayRef<llvm::orc::SymbolDependenceGroup>)::$_0::operator()() const (this=0x820e38c98) at /home/tmunro/projects/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:3019
#7 0x0000000839c7ed99 in llvm::orc::ExecutionSession::runSessionLocked<llvm::orc::ExecutionSession::OL_notifyEmitted(llvm::orc::MaterializationResponsibility&, llvm::ArrayRef<llvm::orc::SymbolDependenceGroup>)::$_0>(llvm::orc::ExecutionSession::OL_notifyEmitted(llvm::orc::MaterializationResponsibility&, llvm::ArrayRef<llvm::orc::SymbolDependenceGroup>)::$_0&&) (this=0xd70bb2e2000, F=...) at /home/tmunro/projects/llvm-project/llvm/include/llvm/ExecutionEngine/Orc/Core.h:1408
#8 0x0000000839c7e65f in llvm::orc::ExecutionSession::OL_notifyEmitted (this=0xd70bb2e2000, MR=..., DepGroups=...) at /home/tmunro/projects/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:3019
#9 0x0000000839c4df78 in llvm::orc::MaterializationResponsibility::notifyEmitted (this=0xd70baa32200, EmittedDeps=...) at /home/tmunro/projects/llvm-project/llvm/include/llvm/ExecutionEngine/Orc/Core.h:1993
#10 0x0000000839e79dfc in llvm::orc::RTDyldObjectLinkingLayer::onObjEmit (this=0xd70baa428c0, R=..., O=..., MemMgr=std::unique_ptr<llvm::RuntimeDyld::MemoryManager> = 0xd70bb428000, LoadedObjInfo=std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo> = 0xd70baaff360, Deps=std::unique_ptr<llvm::DenseMap<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void> >, llvm::DenseMapInfo<llvm::orc::JITDylib*, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void> > > >> = 0xd70bb358200, Err=...) at /home/tmunro/projects/llvm-project/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp:381
#11 0x0000000839e7c701 in llvm::orc::RTDyldObjectLinkingLayer::emit(std::__1::unique_ptr<llvm::orc::MaterializationResponsibility, std::__1::default_delete<llvm::orc::MaterializationResponsibility> >, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer> >)::$_1::operator()(llvm::object::OwningBinary<llvm::object::ObjectFile>, std::__1::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo, std::__1::default_delete<llvm::RuntimeDyld::LoadedObjectInfo> >, llvm::Error) (this=0xd70baaff5d0, Obj=..., LoadedObjInfo=std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo> = 0x0, Err=...) at /home/tmunro/projects/llvm-project/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp:212
--Type <RET> for more, q to quit, c to continue without paging--c
#12 0x0000000839e7c5d4 in llvm::detail::UniqueFunctionBase<void, llvm::object::OwningBinary<llvm::object::ObjectFile>, std::__1::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo, std::__1::default_delete<llvm::RuntimeDyld::LoadedObjectInfo> >, llvm::Error>::CallImpl<llvm::orc::RTDyldObjectLinkingLayer::emit(std::__1::unique_ptr<llvm::orc::MaterializationResponsibility, std::__1::default_delete<llvm::orc::MaterializationResponsibility> >, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer> >)::$_1> (CallableAddr=0xd70baaff5d0, Params=..., Params=..., Params=...) at /home/tmunro/projects/llvm-project/llvm/include/llvm/ADT/FunctionExtras.h:213
#13 0x000000083bfe5223 in llvm::unique_function<void(llvm::object::OwningBinary<llvm::object::ObjectFile>, std::__1::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo, std::__1::default_delete<llvm::RuntimeDyld::LoadedObjectInfo> >, llvm::Error)>::operator() (this=0xd70bb464230, Params=..., Params=..., Params=...) at /home/tmunro/projects/llvm-project/llvm/include/llvm/ADT/FunctionExtras.h:365
#14 0x000000083bfe0f8e in llvm::RuntimeDyldImpl::finalizeAsync(std::__1::unique_ptr<llvm::RuntimeDyldImpl, std::__1::default_delete<llvm::RuntimeDyldImpl> >, llvm::unique_function<void (llvm::object::OwningBinary<llvm::object::ObjectFile>, std::__1::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo, std::__1::default_delete<llvm::RuntimeDyld::LoadedObjectInfo> >, llvm::Error)>, llvm::object::OwningBinary<llvm::object::ObjectFile>, std::__1::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo, std::__1::default_delete<llvm::RuntimeDyld::LoadedObjectInfo> >)::$_0::operator()(llvm::Expected<std::__1::map<llvm::StringRef, llvm::JITEvaluatedSymbol, std::__1::less<llvm::StringRef>, std::__1::allocator<std::__1::pair<llvm::StringRef const, llvm::JITEvaluatedSymbol> > > >) (this=0xd70bb464220, Result=...) at /home/tmunro/projects/llvm-project/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp:1263
#15 0x000000083bfe21fa in llvm::detail::UniqueFunctionBase<void, llvm::Expected<std::__1::map<llvm::StringRef, llvm::JITEvaluatedSymbol, std::__1::less<llvm::StringRef>, std::__1::allocator<std::__1::pair<llvm::StringRef const, llvm::JITEvaluatedSymbol> > > > >::CallImpl<llvm::RuntimeDyldImpl::finalizeAsync(std::__1::unique_ptr<llvm::RuntimeDyldImpl, std::__1::default_delete<llvm::RuntimeDyldImpl> >, llvm::unique_function<void(llvm::object::OwningBinary<llvm::object::ObjectFile>, std::__1::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo, std::__1::default_delete<llvm::RuntimeDyld::LoadedObjectInfo> >, llvm::Error)>, llvm::object::OwningBinary<llvm::object::ObjectFile>, std::__1::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo, std::__1::default_delete<llvm::RuntimeDyld::LoadedObjectInfo> >)::$_0> (CallableAddr=0xd70bb464220, Params=...) at /home/tmunro/projects/llvm-project/llvm/include/llvm/ADT/FunctionExtras.h:213
#16 0x0000000839e83b9b in llvm::unique_function<void(llvm::Expected<std::__1::map<llvm::StringRef, llvm::JITEvaluatedSymbol, std::__1::less<llvm::StringRef>, std::__1::allocator<std::__1::pair<llvm::StringRef const, llvm::JITEvaluatedSymbol> > > >)>::operator() (this=0xd70baaa5ca0, Params=...) at /home/tmunro/projects/llvm-project/llvm/include/llvm/ADT/FunctionExtras.h:365
#17 0x0000000839e7af29 in (anonymous namespace)::JITDylibSearchOrderResolver::lookup(std::__1::set<llvm::StringRef, std::__1::less<llvm::StringRef>, std::__1::allocator<llvm::StringRef> > const&, llvm::unique_function<void (llvm::Expected<std::__1::map<llvm::StringRef, llvm::JITEvaluatedSymbol, std::__1::less<llvm::StringRef>, std::__1::allocator<std::__1::pair<llvm::StringRef const, llvm::JITEvaluatedSymbol> > > >)>)::{lambda(llvm::Expected<llvm::DenseMap<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>, llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef> > >)#1}::operator()(llvm::Expected<llvm::DenseMap<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>, llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef> > >) (this=0xd70baaa5ca0, InternedResult=...) at /home/tmunro/projects/llvm-project/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp:48
#18 0x0000000839e7ad1a in llvm::detail::UniqueFunctionBase<void, llvm::Expected<llvm::DenseMap<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>, llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef> > > >::CallImpl<(anonymous namespace)::JITDylibSearchOrderResolver::lookup(std::__1::set<llvm::StringRef, std::__1::less<llvm::StringRef>, std::__1::allocator<llvm::StringRef> > const&, llvm::unique_function<void (llvm::Expected<std::__1::map<llvm::StringRef, llvm::JITEvaluatedSymbol, std::__1::less<llvm::StringRef>, std::__1::allocator<std::__1::pair<llvm::StringRef const, llvm::JITEvaluatedSymbol> > > >)>)::{lambda(llvm::Expected<llvm::DenseMap<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>, llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef> > >)#1}>(void*, llvm::Expected<llvm::DenseMap<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>, llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef> > >&) (CallableAddr=0xd70baaa5ca0, Params=...) at /home/tmunro/projects/llvm-project/llvm/include/llvm/ADT/FunctionExtras.h:213
#19 0x0000000839c9325b in llvm::unique_function<void(llvm::Expected<llvm::DenseMap<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>, llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef> > >)>::operator() (this=0xd70baa40728, Params=...) at /home/tmunro/projects/llvm-project/llvm/include/llvm/ADT/FunctionExtras.h:365
#20 0x0000000839c8d5c9 in llvm::orc::AsynchronousSymbolQuery::handleComplete(llvm::orc::ExecutionSession&)::RunQueryCompleteTask::run() (this=0xd70baa40700) at /home/tmunro/projects/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:245
#21 0x0000000839ea42d9 in llvm::orc::InPlaceTaskDispatcher::dispatch (this=0xd70baa08070, T=std::unique_ptr<llvm::orc::Task> = 0xd70baa40700) at /home/tmunro/projects/llvm-project/llvm/lib/ExecutionEngine/Orc/TaskDispatch.cpp:27
#22 0x0000000839c931e3 in llvm::orc::ExecutionSession::dispatchTask (this=0xd70bb2e2000, T=std::unique_ptr<llvm::orc::Task> = 0x0) at /home/tmunro/projects/llvm-project/llvm/include/llvm/ExecutionEngine/Orc/Core.h:1554
#23 0x0000000839c729d5 in llvm::orc::AsynchronousSymbolQuery::handleComplete (this=0xd70bb336c18, ES=...) at /home/tmunro/projects/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:255
#24 0x0000000839c767af in llvm::orc::JITDylib::resolve (this=0xd70bb2e2640, MR=..., Resolved=...) at /home/tmunro/projects/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:975
#25 0x0000000839c7c69e in llvm::orc::ExecutionSession::OL_notifyResolved (this=0xd70bb2e2000, MR=..., Symbols=...) at /home/tmunro/projects/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:2802
#26 0x0000000839c4dc40 in llvm::orc::MaterializationResponsibility::notifyResolved (this=0xd70baa33240, Symbols=...) at /home/tmunro/projects/llvm-project/llvm/include/llvm/ExecutionEngine/Orc/Core.h:1988
#27 0x0000000839d3cb<truncated>Please see the issue for the entire body.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs