Skip to content

Commit

Permalink
Fix/unify SBType comparison
Browse files Browse the repository at this point in the history
Summary:
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

llvm-svn: 356048
  • Loading branch information
labath committed Mar 13, 2019
1 parent 867c2a7 commit 01b595c
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 7 deletions.
8 changes: 2 additions & 6 deletions lldb/include/lldb/Symbol/Type.h
Expand Up @@ -256,14 +256,10 @@ class TypePair {
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() {
compiler_type.Clear();
Expand Down
1 change: 0 additions & 1 deletion lldb/scripts/Python/modify-python-lldb.py
Expand Up @@ -143,7 +143,6 @@ def symbol_in_section_iter(self, section):
'SBWatchpoint': ['GetID'],
'SBFileSpec': ['GetFilename', 'GetDirectory'],
'SBModule': ['GetFileSpec', 'GetUUIDString'],
'SBType': ['GetByteSize', 'GetName']
}


Expand Down
4 changes: 4 additions & 0 deletions lldb/scripts/interface/SBType.i
Expand Up @@ -322,6 +322,10 @@ public:
uint32_t
GetTypeFlags ();

bool operator==(lldb::SBType &rhs);

bool operator!=(lldb::SBType &rhs);

%pythoncode %{
def template_arg_array(self):
num_args = self.num_template_args
Expand Down

0 comments on commit 01b595c

Please sign in to comment.