From bbb0cb1b018a43ca72b351c7230e19c02117bf36 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Thu, 7 Dec 2017 23:32:11 +0000 Subject: [PATCH] [ORC] Mark SymbolStringPool methods as inline to avoid linkage errors, add a less-than comparison to SymbolStringPtr and a corresponding unit test. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320116 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ExecutionEngine/Orc/SymbolStringPool.h | 11 +++++++---- .../ExecutionEngine/Orc/SymbolStringPoolTest.cpp | 7 ++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h b/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h index 587bfa993f3..b01fbd44bac 100644 --- a/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h +++ b/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h @@ -88,6 +88,10 @@ public: return !(*this == Other); } + bool operator<(const SymbolStringPtr &Other) const { + return S->getValue() < Other.S->getValue(); + } + private: SymbolStringPtr(SymbolStringPool::PoolMapEntry *S) @@ -99,7 +103,7 @@ private: SymbolStringPool::PoolMapEntry *S = nullptr; }; -SymbolStringPtr SymbolStringPool::intern(StringRef S) { +inline SymbolStringPtr SymbolStringPool::intern(StringRef S) { std::lock_guard Lock(PoolMutex); auto I = Pool.find(S); if (I != Pool.end()) @@ -111,7 +115,7 @@ SymbolStringPtr SymbolStringPool::intern(StringRef S) { return SymbolStringPtr(&*I); } -void SymbolStringPool::clearDeadEntries() { +inline void SymbolStringPool::clearDeadEntries() { std::lock_guard Lock(PoolMutex); for (auto I = Pool.begin(), E = Pool.end(); I != E;) { auto Tmp = std::next(I); @@ -121,13 +125,12 @@ void SymbolStringPool::clearDeadEntries() { } } -bool SymbolStringPool::empty() const { +inline bool SymbolStringPool::empty() const { std::lock_guard Lock(PoolMutex); return Pool.empty(); } } // end namespace orc - } // end namespace llvm #endif // LLVM_EXECUTIONENGINE_ORC_SYMBOLSTRINGPOOL_H diff --git a/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp b/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp index ac79541d50c..79929e33218 100644 --- a/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp +++ b/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp @@ -15,7 +15,7 @@ using namespace llvm::orc; namespace { -TEST(SymbolStringPool, UniquingAndEquality) { +TEST(SymbolStringPool, UniquingAndComparisons) { SymbolStringPool SP; auto P1 = SP.intern("hello"); @@ -27,6 +27,11 @@ TEST(SymbolStringPool, UniquingAndEquality) { EXPECT_EQ(P1, P2) << "Failed to unique entries"; EXPECT_NE(P1, P3) << "Inequal pooled symbol strings comparing equal"; + + // We want to test that less-than comparison of SymbolStringPtrs compiles, + // however we can't test the actual result as this is a pointer comparison and + // SymbolStringPtr doesn't expose the underlying address of the string. + (void)(P1 < P3); } TEST(SymbolStringPool, ClearDeadEntries) { -- 2.50.0