[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-05-06 Thread Eric Fiselier via Phabricator via cfe-commits
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

[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-05-06 Thread Eric Fiselier via Phabricator via cfe-commits
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

[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-05-05 Thread Eric Fiselier via Phabricator via cfe-commits
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

[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-05-05 Thread Eric Fiselier via Phabricator via cfe-commits
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

[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-05-02 Thread Richard Smith - zygoloid via Phabricator via cfe-commits
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. ===

[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-04-17 Thread Eric Fiselier via Phabricator via cfe-commits
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.

[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-04-17 Thread Richard Smith - zygoloid via Phabricator via cfe-commits
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()) +

[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-04-16 Thread Eric Fiselier via Phabricator via cfe-commits
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.

[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-04-16 Thread Eric Fiselier via Phabricator via cfe-commits
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.

[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-04-16 Thread Eric Fiselier via Phabricator via cfe-commits
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; +

[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-04-16 Thread Eric Fiselier via Phabricator via cfe-commits
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

[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-04-16 Thread Eric Fiselier via Phabricator via cfe-commits
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); ---

[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-04-16 Thread Richard Smith - zygoloid via Phabricator via cfe-commits
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

[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-04-16 Thread Eric Fiselier via Phabricator via cfe-commits
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)

[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-04-16 Thread Eric Fiselier via Phabricator via cfe-commits
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

[PATCH] D45680: [C++2a] Add operator<=> Rewriting - Early Attempt

2018-04-16 Thread Eric Fiselier via Phabricator via cfe-commits
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