[PATCH] D123182: [Concepts] Fix overload resolution bug with constrained candidates

Erich Keane via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 15 08:32:03 PDT 2022


erichkeane added inline comments.


================
Comment at: clang/lib/Sema/SemaOverload.cpp:2967
+         "parameters!");
+  for (FunctionProtoType::param_type_iterator
+           O = OldType->param_type_begin(),
----------------
royjacobson wrote:
> erichkeane wrote:
> > Thanks for the clarification on 'Reversed'.  The comment makes it more clear.
> > 
> > This whole 'for' header is... really tough to mentally parse, even BEFORE this, and now it is even worse with 'Reversed' involved.  I would prefer that the iterators be initialized ahead of time.  Additionally, can we use `reverse_iterator` for the 'NewType' instead of branching on `Reversed` here?  
> > 
> > Any other suggestions you have to simplify this loop would also be appreciated.  I might ALSO consider using 'zip' here?
> I made it index based which IMO is easier to understand now.
> 
> I thought reverse_iterator would be annoying because I would need to make the code a template since it's a different type.
> 
> Also - ping about the comment in isBetterOverloadCandidate :)
Ah, right, you'd have 1 reverse iterator on one side of the 'zip'.  Thats unfortunate.  I guess this reads well-enough though, iti s definitely an improvement.


================
Comment at: clang/lib/Sema/SemaOverload.cpp:9829
+  bool CanCompareConstraints = false;
+  if (Cand1.Function && Cand2.Function && Cand1.Function->hasPrototype() &&
+      Cand2.Function->hasPrototype()) {
----------------
royjacobson wrote:
> erichkeane wrote:
> > Since the point of this is to just calculate the CanCompareConstraints, I think it should be a separate function called below where it is used.  
> Do you mean as in a separate `Sema` function? Or a local lambda?
Just a static function is fine, basically its a whole lot of work happening in this function for a single result, so I'm suggesting splitting off the calculation for `CanCompareConstraints` into its own function, so you get:

`bool CanCompareConstrants = new_function(...);`


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D123182/new/

https://reviews.llvm.org/D123182



More information about the cfe-commits mailing list