[Lldb-commits] [lldb] r356048 - Fix/unify SBType comparison

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Wed Mar 13 06:45:14 PDT 2019

Author: labath
Date: Wed Mar 13 06:45:14 2019
New Revision: 356048

URL: http://llvm.org/viewvc/llvm-project?rev=356048&view=rev
Fix/unify SBType comparison

In my next step at cleaning up modify-python-lldb.py, I started focusing
on equality comparison. To my surprise, I found out that both python and
c++ versions of the SBType class implement equality comparison, but each
one does it differently. While the python version was implemented in
terms of type name equality, the C++ one used a deep comparison on the
underlying objects.

Removing the python version caused one test to fail (TestTypeList). This
happened because the c++ version of operator== boiled down to
TypePair::operator==, which contains two items: the compiler_type and
type_sp. In this case, the compiler_type was identical, but one of the
objects had the type_sp field unset.

I tried fixing the code so that both objects keep their type_sp member,
but it wasn't easy, because there are so many operations which just work
with the CompilerType types, and so any operation on the SBType (the
test in question was doing GetPointeeType on the type of one variable
and expecting it to match the type of another variable), cause that
second member to be lost.

So instead, here I relax the equality comparison on the TypePair
class. Now, this class ignores the type_sp for the purposes of
comparison, and uses the CompilerType only. This seems reasonable, as
each TypeSP is able to convert itself to a CompilerType.

Reviewers: clayborg, aprantl, serge-sans-paille

Subscribers: jdoerfert, lldb-commits

Differential Revision: https://reviews.llvm.org/D59217


Modified: lldb/trunk/include/lldb/Symbol/Type.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/Type.h?rev=356048&r1=356047&r2=356048&view=diff
--- lldb/trunk/include/lldb/Symbol/Type.h (original)
+++ lldb/trunk/include/lldb/Symbol/Type.h Wed Mar 13 06:45:14 2019
@@ -256,14 +256,10 @@ public:
   explicit operator bool() const { return IsValid(); }
   bool operator==(const TypePair &rhs) const {
-    return compiler_type == rhs.compiler_type &&
-           type_sp.get() == rhs.type_sp.get();
+    return compiler_type == rhs.compiler_type;
-  bool operator!=(const TypePair &rhs) const {
-    return compiler_type != rhs.compiler_type ||
-           type_sp.get() != rhs.type_sp.get();
-  }
+  bool operator!=(const TypePair &rhs) const { return !(*this == rhs); }
   void Clear() {

Modified: lldb/trunk/scripts/Python/modify-python-lldb.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/Python/modify-python-lldb.py?rev=356048&r1=356047&r2=356048&view=diff
--- lldb/trunk/scripts/Python/modify-python-lldb.py (original)
+++ lldb/trunk/scripts/Python/modify-python-lldb.py Wed Mar 13 06:45:14 2019
@@ -143,7 +143,6 @@ e = {'SBAddress': ['GetFileAddress', 'Ge
      'SBWatchpoint': ['GetID'],
      'SBFileSpec': ['GetFilename', 'GetDirectory'],
      'SBModule': ['GetFileSpec', 'GetUUIDString'],
-     'SBType': ['GetByteSize', 'GetName']

Modified: lldb/trunk/scripts/interface/SBType.i
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/interface/SBType.i?rev=356048&r1=356047&r2=356048&view=diff
--- lldb/trunk/scripts/interface/SBType.i (original)
+++ lldb/trunk/scripts/interface/SBType.i Wed Mar 13 06:45:14 2019
@@ -322,6 +322,10 @@ public:
     GetTypeFlags ();
+    bool operator==(lldb::SBType &rhs);
+    bool operator!=(lldb::SBType &rhs);
     %pythoncode %{
         def template_arg_array(self):
             num_args = self.num_template_args

More information about the lldb-commits mailing list