]> granicus.if.org Git - llvm/commitdiff
[ORC] Mark SymbolStringPool methods as inline to avoid linkage errors, add a
authorLang Hames <lhames@gmail.com>
Thu, 7 Dec 2017 23:32:11 +0000 (23:32 +0000)
committerLang Hames <lhames@gmail.com>
Thu, 7 Dec 2017 23:32:11 +0000 (23:32 +0000)
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
unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp

index 587bfa993f3a81cf944c174e9a26f46f3231d408..b01fbd44bacda3e33e897f176219a2da63355b99 100644 (file)
@@ -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(StringRef S) {
   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
index ac79541d50c228942a88234526ff7b04f7795afd..79929e332182f1d6e85634e855a24baffe71718a 100644 (file)
@@ -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) {