jasonmolenda wrote:

> > Thanks for the overwhelming support :-)
> 
> I hate to ruin a party, but I don't think this is a good use of `operator==`, 
> precisely because it does not define an equivalence relation (it's not 
> transitive). Might I suggest named function instead? `IsCompatible` ?

The place I hit a problem with this was in `ThreadPlanStepRange::InRange` where 
we're doing 
```
    if (m_addr_context.line_entry.IsValid() &&
        new_context.line_entry.IsValid()) {
      if (*m_addr_context.line_entry.original_file_sp ==
          *new_context.line_entry.original_file_sp) {
        if (m_addr_context.line_entry.line == new_context.line_entry.line) {
          m_addr_context = new_context;
          const bool include_inlined_functions =
              GetKind() == eKindStepOverRange;
...
```

and only one of the SupportFile's here had a checksum, so the == test failed 
(and an inlined stepping bug came up)

If I read 
`m_addr_context.line_entry.original_file_sp->IsCompatible(new_context.line_entry.original_file_sp)`
  I would think "Oh is this considering maybe a remapped filename?" or 
something, I'm not sure I would see that as "the same file, ignoring checksum 
if only one has it".

There are probbly some other uses of this operator== and maybe I shouldn't 
focus on this one, but I'm trying to think of how the intention could be 
clearly expressed with a method name here.

https://github.com/llvm/llvm-project/pull/95606
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to