EricWF updated this revision to Diff 145419.
EricWF added a comment.
- Further generalize `CXXRewrittenExpr` and get it working with
`TreeTransform.h`.
https://reviews.llvm.org/D45680
Files:
include/clang/AST/Expr.h
include/clang/AST/ExprCXX.h
include/clang/AST/RecursiveASTVisitor.h
in
EricWF updated this revision to Diff 145398.
EricWF added a comment.
Generalize `CXXRewrittenExpr` to contain only a "representation" of the
original expression, and the fully checked rewritten expression. By
"representation" i mean to imply that we can't actually build and check a full
represe
EricWF added inline comments.
Comment at: lib/Sema/SemaOverload.cpp:9177
+// specified in C++2a [over.match.oper]p1.10.
+if (RewrittenCandidateTieBreaker && ICS1.isStandard() &&
+ICS2.isStandard() && ICS1.Standard.getRank() == ICR_Exact_Match &&
T
EricWF updated this revision to Diff 145390.
EricWF marked 7 inline comments as done.
EricWF added a comment.
- Remove the `= default` changes as requested.
- Attempt to work around ambiguity in overload resolution caused by differing
lvalue or qualification conversions when ranking synthesized
rsmith added a comment.
Can you split this patch up a bit? There's changes here for the `<=>`
rewriting, but also for supporting `operator<=>(...) = default`, and some
constant evaluation and code generation changes too. It's a lot easier to
review more directed, smaller patches.
===
EricWF added inline comments.
Comment at: lib/Sema/SemaOverload.cpp:9218-9219
+// --- F2 is a rewritten candidate ([over.match.oper]) and F1 is not.
+if (Cand2.getRewrittenKind() && !Cand1.getRewrittenKind())
+ return true;
+if (Cand1.getRewrittenKind() && Cand2.
rsmith added a comment.
Definitely some interesting questions to take to CWG here. :)
Comment at: lib/Sema/SemaOverload.cpp:9218-9219
+// --- F2 is a rewritten candidate ([over.match.oper]) and F1 is not.
+if (Cand2.getRewrittenKind() && !Cand1.getRewrittenKind())
+
EricWF added inline comments.
Comment at: lib/Sema/SemaOverload.cpp:9218-9219
+// --- F2 is a rewritten candidate ([over.match.oper]) and F1 is not.
+if (Cand2.getRewrittenKind() && !Cand1.getRewrittenKind())
+ return true;
+if (Cand1.getRewrittenKind() && Cand2.
EricWF added inline comments.
Comment at: lib/Sema/SemaOverload.cpp:9218-9219
+// --- F2 is a rewritten candidate ([over.match.oper]) and F1 is not.
+if (Cand2.getRewrittenKind() && !Cand1.getRewrittenKind())
+ return true;
+if (Cand1.getRewrittenKind() && Cand2.
EricWF marked an inline comment as done.
EricWF added inline comments.
Comment at: lib/Sema/SemaOverload.cpp:9218-9219
+// --- F2 is a rewritten candidate ([over.match.oper]) and F1 is not.
+if (Cand2.getRewrittenKind() && !Cand1.getRewrittenKind())
+ return true;
+
EricWF marked 2 inline comments as done.
EricWF added inline comments.
Comment at: lib/Sema/SemaOverload.cpp:12537-12565
+/// Rewritten candidates have been added but not checked for validity. They
+/// could still be non-viable if:
+/// (A) The rewritten call (x <=> y) is a bui
EricWF marked 6 inline comments as done.
EricWF added inline comments.
Comment at: lib/Sema/SemaOverload.cpp:
+ bool PerformADL) {
+ assert(getLangOpts().CPlusPlus2a);
+ auto Opc = BinaryOperator::getOverloadedOpcode(Op);
---
rsmith added inline comments.
Comment at: lib/Sema/SemaOverload.cpp:839
+
+unsigned OverloadCandidate::getTrueArgIndex(unsigned Idx) const {
+ if (getRewrittenKind() != ROC_Synthesized)
I think this might be clearer if named `getParamIndexForArgIndex` or similar
EricWF planned changes to this revision.
EricWF added a comment.
I know how to do better.
Comment at: include/clang/Sema/Overload.h:938
+/// exited.
+struct RewrittenCandidateContextGuard {
+ RewrittenCandidateContextGuard(OverloadCandidateSet &CS)
EricWF added a comment.
I'm guessing this implementation is super non-conforming, since expressions are
evaluated during overload resolution.
My plan is to keep the general shape of this patch intact, but fix the eager
building of expressions with something less wasteful.
Repository:
rC Cla
EricWF created this revision.
EricWF added a reviewer: rsmith.
Herald added a subscriber: mgrang.
This is a work-in-progress attempt to add `operator<=>` rewriting. It's nowhere
close to complete, but I would like some initial feedback on the direction.
As currently implemented, rewritten and sy
16 matches
Mail list logo