diff --git a/llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h b/llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h index c9fadd727e8872..63abb196ba4911 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h @@ -62,8 +62,10 @@ class SymbolStringPtr { } SymbolStringPtr& operator=(const SymbolStringPtr &Other) { - if (isRealPoolEntry(S)) + if (isRealPoolEntry(S)) { + assert(S->getValue() && "Releasing SymbolStringPtr with zero ref count"); --S->getValue(); + } S = Other.S; if (isRealPoolEntry(S)) ++S->getValue(); @@ -75,16 +77,20 @@ class SymbolStringPtr { } SymbolStringPtr& operator=(SymbolStringPtr &&Other) { - if (isRealPoolEntry(S)) + if (isRealPoolEntry(S)) { + assert(S->getValue() && "Releasing SymbolStringPtr with zero ref count"); --S->getValue(); + } S = nullptr; std::swap(S, Other.S); return *this; } ~SymbolStringPtr() { - if (isRealPoolEntry(S)) + if (isRealPoolEntry(S)) { + assert(S->getValue() && "Releasing SymbolStringPtr with zero ref count"); --S->getValue(); + } } explicit operator bool() const { return S; }