From 22a7440200a7eb23f784a5da3dbf6595acb204a1 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Tue, 12 Jun 2018 20:43:17 +0000 Subject: [RuntimeDyld] Add an assert to catch misbehaving symbol resolvers. Resolvers are required to find results for all requested symbols or return an error, but if a resolver fails to adhere to this contract (by returning results for only a subset of the requested symbols) then this code will infinite loop. This assertion catches resolvers that fail to adhere to the contract. llvm-svn: 334536 --- llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'llvm/lib/ExecutionEngine/RuntimeDyld') diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp index d3ac4f145c8..1189be599ed 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp @@ -1017,6 +1017,9 @@ Error RuntimeDyldImpl::resolveExternalSymbols() { if (!NewResolverResults) return NewResolverResults.takeError(); + assert(NewResolverResults->size() == NewSymbols.size() && + "Should have errored on unresolved symbols"); + for (auto &RRKV : *NewResolverResults) { assert(!ResolvedSymbols.count(RRKV.first) && "Redundant resolution?"); ExternalSymbolMap.insert(RRKV); -- cgit v1.2.3