[llvm-dev] ORC Assertion failure

Dibyendu Majumdar via llvm-dev llvm-dev at lists.llvm.org
Thu Apr 16 14:49:55 PDT 2020


Hi

On Windows 10 when using a debug build of LLVM 10, I get this assertion failure:

Assertion failed: (KV.second.getFlags() & ~WeakFlags) == (I->second &
~WeakFlags) && "Resolving symbol with incorrect flags", file
C:\work\github\llvm-10.0.0.src\lib\ExecutionEngine\Orc\Core.cpp, line
450

The same failure occurred in LLVM 9 too:

Assertion failed: I->second == KV.second.getFlags() && "Resolving
symbol with incorrect flags", file
C:\work\github\llvm-9.0.0.src\lib\ExecutionEngine\Orc\Core.cpp, line
384

I am unsure what this assertion means and how I can debug this.

The assertion seems to occur just after JIT compiling a function, when
my code is trying to get the compiled function's address using
something like this:

return ES->lookup({MainJD}, (*Mangle)(Name.str()));

Here is the call stack:

     libravi.dll!llvm::orc::MaterializationResponsibility::notifyResolved(const
llvm::DenseMap<llvm::orc::SymbolStringPtr,llvm::JITEvaluatedSymbol,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>,llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr,llvm::JITEvaluatedSymbol>>
& Symbols) Line 449    C++
     libravi.dll!llvm::orc::RTDyldObjectLinkingLayer::onObjLoad(unsigned
__int64 K, llvm::orc::MaterializationResponsibility & R,
llvm::object::ObjectFile & Obj,
std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>>
LoadedObjInfo, std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef
const ,llvm::JITEvaluatedSymbol>>> Resolved,
std::set<llvm::StringRef,std::less<llvm::StringRef>,std::allocator<llvm::StringRef>>
& InternalSymbols) Line 232    C++
>    libravi.dll!llvm::orc::RTDyldObjectLinkingLayer::emit::__l2::<lambda>(std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>> LoadedObjInfo, std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef const ,llvm::JITEvaluatedSymbol>>> ResolvedSymbols) Line 149    C++
     libravi.dll!llvm::unique_function<llvm::Error
__cdecl(std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>>,std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef
const ,llvm::JITEvaluatedSymbol>>>)>::CallImpl<llvm::Error
<lambda>(std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>>,
std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef
const ,llvm::JITEvaluatedSymbol>>>)>(void * CallableAddr,
std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>>
& <Params_0>, std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef
const ,llvm::JITEvaluatedSymbol>>> & <Params_1>) Line 157    C++
     libravi.dll!llvm::unique_function<llvm::Error
__cdecl(std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>>,std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef
const ,llvm::JITEvaluatedSymbol>>>)>::operator()(std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>>
<Params_0>, std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef
const ,llvm::JITEvaluatedSymbol>>> <Params_1>) Line 280    C++
     libravi.dll!llvm::jitLinkForORC(llvm::object::ObjectFile & Obj,
std::unique_ptr<llvm::MemoryBuffer,std::default_delete<llvm::MemoryBuffer>>
UnderlyingBuffer, llvm::RuntimeDyld::MemoryManager & MemMgr,
llvm::JITSymbolResolver & Resolver, bool ProcessAllSections,
llvm::unique_function<llvm::Error
__cdecl(std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>>,std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef
const ,llvm::JITEvaluatedSymbol>>>)> OnLoaded,
llvm::unique_function<void __cdecl(llvm::Error)> OnEmitted) Line 1427
  C++
     libravi.dll!llvm::orc::RTDyldObjectLinkingLayer::emit(llvm::orc::MaterializationResponsibility
R, std::unique_ptr<llvm::MemoryBuffer,std::default_delete<llvm::MemoryBuffer>>
O) Line 155    C++
     libravi.dll!llvm::orc::IRCompileLayer::emit(llvm::orc::MaterializationResponsibility
R, llvm::orc::ThreadSafeModule TSM) Line 41    C++
     libravi.dll!llvm::orc::IRTransformLayer::emit(llvm::orc::MaterializationResponsibility
R, llvm::orc::ThreadSafeModule TSM) Line 25    C++
     libravi.dll!llvm::orc::BasicIRLayerMaterializationUnit::materialize(llvm::orc::MaterializationResponsibility
R) Line 132    C++
     libravi.dll!llvm::orc::MaterializationUnit::doMaterialize(llvm::orc::JITDylib
& JD) Line 570    C++
     libravi.dll!llvm::orc::ExecutionSession::materializeOnCurrentThread(llvm::orc::JITDylib
& JD, std::unique_ptr<llvm::orc::MaterializationUnit,std::default_delete<llvm::orc::MaterializationUnit>>
MU) Line 1218    C++
     [External Code]
     libravi.dll!llvm::orc::ExecutionSession::dispatchMaterialization(llvm::orc::JITDylib
& JD, std::unique_ptr<llvm::orc::MaterializationUnit,std::default_delete<llvm::orc::MaterializationUnit>>
MU) Line 1204    C++
     libravi.dll!llvm::orc::ExecutionSession::runOutstandingMUs() Line
2188    C++
     libravi.dll!llvm::orc::ExecutionSession::lookup(llvm::orc::LookupKind
K, const std::vector<std::pair<llvm::orc::JITDylib *,enum
llvm::orc::JITDylibLookupFlags>,std::allocator<std::pair<llvm::orc::JITDylib
*,enum llvm::orc::JITDylibLookupFlags>>> & SearchOrder,
llvm::orc::SymbolLookupSet Symbols, llvm::orc::SymbolState
RequiredState, llvm::unique_function<void
__cdecl(llvm::Expected<llvm::DenseMap<llvm::orc::SymbolStringPtr,llvm::JITEvaluatedSymbol,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>,llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr,llvm::JITEvaluatedSymbol>>>)>
NotifyComplete, std::function<void
__cdecl(llvm::DenseMap<llvm::orc::JITDylib
*,llvm::DenseSet<llvm::orc::SymbolStringPtr,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>>,llvm::DenseMapInfo<llvm::orc::JITDylib
*>,llvm::detail::DenseMapPair<llvm::orc::JITDylib
*,llvm::DenseSet<llvm::orc::SymbolStringPtr,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>>>>
const &)> RegisterDependencies) Line 2084    C++
     libravi.dll!llvm::orc::ExecutionSession::lookup(const
std::vector<std::pair<llvm::orc::JITDylib *,enum
llvm::orc::JITDylibLookupFlags>,std::allocator<std::pair<llvm::orc::JITDylib
*,enum llvm::orc::JITDylibLookupFlags>>> & SearchOrder, const
llvm::orc::SymbolLookupSet & Symbols, llvm::orc::LookupKind K,
llvm::orc::SymbolState RequiredState, std::function<void
__cdecl(llvm::DenseMap<llvm::orc::JITDylib
*,llvm::DenseSet<llvm::orc::SymbolStringPtr,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>>,llvm::DenseMapInfo<llvm::orc::JITDylib
*>,llvm::detail::DenseMapPair<llvm::orc::JITDylib
*,llvm::DenseSet<llvm::orc::SymbolStringPtr,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>>>>
const &)> RegisterDependencies) Line 2124    C++
     libravi.dll!llvm::orc::ExecutionSession::lookup(const
std::vector<std::pair<llvm::orc::JITDylib *,enum
llvm::orc::JITDylibLookupFlags>,std::allocator<std::pair<llvm::orc::JITDylib
*,enum llvm::orc::JITDylibLookupFlags>>> & SearchOrder,
llvm::orc::SymbolStringPtr Name) Line 2145    C++
     libravi.dll!llvm::orc::ExecutionSession::lookup(llvm::ArrayRef<llvm::orc::JITDylib
*> SearchOrder, llvm::orc::SymbolStringPtr Name) Line 2157    C++
     libravi.dll!ravi::RaviJITState::findSymbol(llvm::StringRef Name)
Line 523    C++


Thanks and Regards
Dibyendu


More information about the llvm-dev mailing list