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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits