PR10140 - StringPool's PooledStringPtr has non-const operator== causing bad OR-result.

Mark conversion operator explicit and const qualify comparison operators.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211244 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nikola Smiljanic 2014-06-19 00:26:49 +00:00
parent 887a5c7f5d
commit 1260b844fd
3 changed files with 35 additions and 3 deletions

View File

@ -128,10 +128,10 @@ namespace llvm {
}
inline const char *operator*() const { return begin(); }
inline operator bool() const { return S != nullptr; }
inline explicit operator bool() const { return S != nullptr; }
inline bool operator==(const PooledStringPtr &That) { return S == That.S; }
inline bool operator!=(const PooledStringPtr &That) { return S != That.S; }
inline bool operator==(const PooledStringPtr &That) const { return S == That.S; }
inline bool operator!=(const PooledStringPtr &That) const { return S != That.S; }
};
} // End llvm namespace

View File

@ -30,6 +30,7 @@ add_llvm_unittest(SupportTests
ProgramTest.cpp
RegexTest.cpp
SourceMgrTest.cpp
StringPool.cpp
SwapByteOrderTest.cpp
ThreadLocalTest.cpp
TimeValueTest.cpp

View File

@ -0,0 +1,31 @@
//===- llvm/unittest/Support/ThreadLocalTest.cpp - Therad Local tests ---===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "llvm/Support/StringPool.h"
#include "gtest/gtest.h"
using namespace llvm;
namespace {
TEST(PooledStringPtrTest, OperatorEquals) {
StringPool pool;
const PooledStringPtr a = pool.intern("a");
const PooledStringPtr b = pool.intern("b");
EXPECT_FALSE(a == b);
}
TEST(PooledStringPtrTest, OperatorNotEquals) {
StringPool pool;
const PooledStringPtr a = pool.intern("a");
const PooledStringPtr b = pool.intern("b");
EXPECT_TRUE(a != b);
}
}