<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi Dibyendu,<div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">1) Can 0 ever be a valid VModuleKey? How can one reliably detect an invalid VModuleKey?</blockquote></div><div><br></div><div>I believe 0 was a valid VModuleKey in ORCv1. The assertion is checking the the VModuleKey is present in the LogicalDylibs map. That means that you have to have used that key in an addModule call, e.g.:</div><div><br></div><div>CODLayer.addModule(K, std::move(M));</div><div><br></div><div>and not subsequently removed the key with a call to removeModule.</div><div><br></div><div><div>2) Secondly it seems to me that  following the assertion there should be a check so that the code dosn't continue? It is causing segmentation fault in release builds.</div></div><div><br></div><div>There should not be any check other than the assertion. Assertions aren't for recoverable errors or logging, they're only for verifying that code is being used according to contract. In this case the contract is that removeModule is only called with valid keys. If the assertion is triggering then either the key you're using is invalid, or my implementation of CompileOnDemandLayer (or the assert itself) is invalid. We just need to fix the offending code.</div><div> </div><div>Out of interest: What are your plans for removeModule? It's currently unimplemented in ORCv2. Understanding people's use cases will help with design and prioritization.</div><div><br></div><div>Cheers,</div><div>Lang.</div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Aug 13, 2019 at 1:50 PM Dibyendu Majumdar via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
I am getting following assertion failure when attempting to remove a module.<br>
<br>
/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h:311: llvm::Error<br>
llvm::orc::LegacyCompileOnDemandLayer<BaseLayerT, CompileCallbackMgrT,<br>
IndirectStubsMgrT>::removeModule(llvm::orc::VModuleKey) [with<br>
BaseLayerT = llvm::orc::LegacyIRTransformLayer<llvm::orc::LegacyIRCompileLayer<llvm::orc::LegacyRTDyldObjectLinkingLayer,<br>
llvm::orc::SimpleCompiler>,<br>
std::function<std::unique_ptr<llvm::Module>(std::unique_ptr<llvm::Module>)><br>
>; CompileCallbackMgrT = llvm::orc::JITCompileCallbackManager;<br>
IndirectStubsMgrT = llvm::orc::IndirectStubsManager;<br>
llvm::orc::VModuleKey = long unsigned int]: Assertion `I !=<br>
LogicalDylibs.end() && "VModuleKey K not valid here"' failed.<br>
<br>
1) Can 0 ever be a valid VModuleKey? How can one reliably detect an<br>
invalid VModuleKey?<br>
2) Secondly it seems to me that  following the assertion there should<br>
be a check so that the code dosn't continue? It is causing<br>
segmentation fault in release builds.<br>
<br>
Regards<br>
Dibyendu<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>