[llvm] r320116 - [ORC] Mark SymbolStringPool methods as inline to avoid linkage errors, add a

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 7 15:32:11 PST 2017


Author: lhames
Date: Thu Dec  7 15:32:11 2017
New Revision: 320116

URL: http://llvm.org/viewvc/llvm-project?rev=320116&view=rev
Log:
[ORC] Mark SymbolStringPool methods as inline to avoid linkage errors, add a
less-than comparison to SymbolStringPtr and a corresponding unit test.

Modified:
    llvm/trunk/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h
    llvm/trunk/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp

Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h?rev=320116&r1=320115&r2=320116&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h (original)
+++ llvm/trunk/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h Thu Dec  7 15:32:11 2017
@@ -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<std::mutex> Lock(PoolMutex);
   auto I = Pool.find(S);
   if (I != Pool.end())
@@ -111,7 +115,7 @@ SymbolStringPtr SymbolStringPool::intern
   return SymbolStringPtr(&*I);
 }
 
-void SymbolStringPool::clearDeadEntries() {
+inline void SymbolStringPool::clearDeadEntries() {
   std::lock_guard<std::mutex> 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<std::mutex> Lock(PoolMutex);
   return Pool.empty();
 }
 
 } // end namespace orc
-
 } // end namespace llvm
 
 #endif // LLVM_EXECUTIONENGINE_ORC_SYMBOLSTRINGPOOL_H

Modified: llvm/trunk/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp?rev=320116&r1=320115&r2=320116&view=diff
==============================================================================
--- llvm/trunk/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp (original)
+++ llvm/trunk/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp Thu Dec  7 15:32:11 2017
@@ -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, UniquingAndEquali
 
   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) {




More information about the llvm-commits mailing list