From a82c25a43488db9eb58d9daf6dd550a205c28d7b Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Mon, 2 Apr 2018 21:39:39 +0000 Subject: [PATCH] [ORC] Add a debugging check to catch dangling references to SymbolStringPools. llvm-svn: 329019 --- llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h b/llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h index da40d1c..de09c62 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h @@ -27,6 +27,9 @@ class SymbolStringPtr; class SymbolStringPool { friend class SymbolStringPtr; public: + /// @brief Destroy a SymbolStringPool. + ~SymbolStringPool(); + /// @brief Create a symbol string pointer from the given string. SymbolStringPtr intern(StringRef S); @@ -109,6 +112,13 @@ inline bool operator<(const SymbolStringPtr &LHS, const SymbolStringPtr &RHS) { return LHS.S < RHS.S; } +inline SymbolStringPool::~SymbolStringPool() { +#ifndef NDEBUG + clearDeadEntries(); + assert(Pool.empty() && "Dangling references at pool destruction time"); +#endif // NDEBUG +} + inline SymbolStringPtr SymbolStringPool::intern(StringRef S) { std::lock_guard Lock(PoolMutex); PoolMap::iterator I; -- 2.7.4