summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine/Orc
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc')
-rw-r--r--llvm/lib/ExecutionEngine/Orc/Core.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/Core.cpp b/llvm/lib/ExecutionEngine/Orc/Core.cpp
index 894e210da13..96baf624caa 100644
--- a/llvm/lib/ExecutionEngine/Orc/Core.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/Core.cpp
@@ -228,8 +228,10 @@ MaterializationResponsibility::MaterializationResponsibility(
: V(V), SymbolFlags(std::move(SymbolFlags)) {
assert(!this->SymbolFlags.empty() && "Materializing nothing?");
+#ifndef NDEBUG
for (auto &KV : this->SymbolFlags)
KV.second |= JITSymbolFlags::Materializing;
+#endif
}
MaterializationResponsibility::~MaterializationResponsibility() {
@@ -242,15 +244,21 @@ SymbolNameSet MaterializationResponsibility::getRequestedSymbols() {
}
void MaterializationResponsibility::resolve(const SymbolMap &Symbols) {
+#ifndef NDEBUG
for (auto &KV : Symbols) {
auto I = SymbolFlags.find(KV.first);
assert(I != SymbolFlags.end() &&
"Resolving symbol outside this responsibility set");
assert(I->second.isMaterializing() && "Duplicate resolution");
I->second &= ~JITSymbolFlags::Materializing;
- assert(KV.second.getFlags() == I->second &&
- "Resolving symbol with incorrect flags");
+ if (I->second.isWeak())
+ assert(I->second == (KV.second.getFlags() | JITSymbolFlags::Weak) &&
+ "Resolving symbol with incorrect flags");
+ else
+ assert(I->second == KV.second.getFlags() &&
+ "Resolving symbol with incorrect flags");
}
+#endif
V.resolve(Symbols);
}
@@ -274,7 +282,9 @@ Error MaterializationResponsibility::defineMaterializing(
// symbol error.
for (auto &KV : NewSymbolFlags) {
auto I = SymbolFlags.insert(KV).first;
+#ifndef NDEBUG
I->second |= JITSymbolFlags::Materializing;
+#endif
}
return V.defineMaterializing(NewSymbolFlags);
OpenPOWER on IntegriCloud