summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2018-12-21 22:42:00 +0000
committerDavide Italiano <davide@freebsd.org>2018-12-21 22:42:00 +0000
commit18a0ce9813a1e12d8d53fce261b361796b512918 (patch)
treeca8f08c5747d8fdd3541e1e43250c7afbb3446c2
parentf874871c9ef28ca044dbbdb92c5a3c35ba8063ae (diff)
downloadbcm5719-llvm-18a0ce9813a1e12d8d53fce261b361796b512918.tar.gz
bcm5719-llvm-18a0ce9813a1e12d8d53fce261b361796b512918.zip
[Scalar] Implement operator!= using operator==.
Summary: Adding some test coverage while I'm around. Reviewers: JDevlieghere, aprantl, zturner, clayborg, jingham Differential Revision: https://reviews.llvm.org/D56017 llvm-svn: 349970
-rw-r--r--lldb/source/Utility/Scalar.cpp32
-rw-r--r--lldb/unittests/Utility/ScalarTest.cpp27
2 files changed, 28 insertions, 31 deletions
diff --git a/lldb/source/Utility/Scalar.cpp b/lldb/source/Utility/Scalar.cpp
index 73a929cbd41..9bc7172ad98 100644
--- a/lldb/source/Utility/Scalar.cpp
+++ b/lldb/source/Utility/Scalar.cpp
@@ -2598,37 +2598,7 @@ bool lldb_private::operator==(const Scalar &lhs, const Scalar &rhs) {
}
bool lldb_private::operator!=(const Scalar &lhs, const Scalar &rhs) {
- // If either entry is void then we can just compare the types
- if (lhs.m_type == Scalar::e_void || rhs.m_type == Scalar::e_void)
- return lhs.m_type != rhs.m_type;
-
- Scalar
- temp_value; // A temp value that might get a copy of either promoted value
- const Scalar *a;
- const Scalar *b;
- llvm::APFloat::cmpResult result;
- switch (PromoteToMaxType(lhs, rhs, temp_value, a, b)) {
- case Scalar::e_void:
- break;
- case Scalar::e_sint:
- case Scalar::e_uint:
- case Scalar::e_slong:
- case Scalar::e_ulong:
- case Scalar::e_slonglong:
- case Scalar::e_ulonglong:
- case Scalar::e_sint128:
- case Scalar::e_uint128:
- case Scalar::e_sint256:
- case Scalar::e_uint256:
- return a->m_integer != b->m_integer;
- case Scalar::e_float:
- case Scalar::e_double:
- case Scalar::e_long_double:
- result = a->m_float.compare(b->m_float);
- if (result != llvm::APFloat::cmpEqual)
- return true;
- }
- return true;
+ return !(lhs == rhs);
}
bool lldb_private::operator<(const Scalar &lhs, const Scalar &rhs) {
diff --git a/lldb/unittests/Utility/ScalarTest.cpp b/lldb/unittests/Utility/ScalarTest.cpp
index 4f995c047b4..99acbfdd8b9 100644
--- a/lldb/unittests/Utility/ScalarTest.cpp
+++ b/lldb/unittests/Utility/ScalarTest.cpp
@@ -19,6 +19,33 @@
using namespace lldb_private;
using namespace llvm;
+template <typename T>
+bool checkInequality(T c1, T c2) {
+ return (Scalar(c1) != Scalar(c2));
+}
+
+template <typename T>
+bool checkEquality(T c1, T c2) {
+ return (Scalar(c1) == Scalar(c2));
+}
+
+TEST(ScalarTest, Equality) {
+ ASSERT_TRUE(checkInequality<int>(23, 24));
+ ASSERT_TRUE(checkEquality<int>(96, 96));
+ ASSERT_TRUE(checkInequality<float>(4.0f, 4.5f));
+ ASSERT_TRUE(checkEquality<float>(4.0f, 4.0f));
+ uint64_t apint1 = 234;
+ uint64_t apint2 = 246;
+ ASSERT_TRUE(checkInequality<APInt>(APInt(64, apint1), APInt(64, apint2)));
+ ASSERT_TRUE(checkEquality<APInt>(APInt(64, apint1), APInt(64, apint1)));
+
+ Scalar void1;
+ Scalar void2;
+ float f1 = 2.0;
+ ASSERT_TRUE(void1 == void2);
+ ASSERT_FALSE(void1 == Scalar(f1));
+}
+
TEST(ScalarTest, RightShiftOperator) {
int a = 0x00001000;
int b = 0xFFFFFFFF;
OpenPOWER on IntegriCloud