Eric Fiselier 0683c0e68d [C++2a] Implement operator<=> CodeGen and ExprConstant
Summary:
This patch tackles long hanging fruit for the builtin operator<=> expressions. It is currently needs some cleanup before landing, but I want to get some initial feedback.

The main changes are:

* Lookup, build, and store the required standard library types and expressions in `ASTContext`. By storing them in ASTContext we don't need to store (and duplicate) the required expressions in the BinaryOperator AST nodes. 

* Implement [expr.spaceship] checking, including diagnosing narrowing conversions. 

* Implement `ExprConstant` for builtin spaceship operators.

* Implement builitin operator<=> support in `CodeGenAgg`. Initially I emitted the required comparisons using `ScalarExprEmitter::VisitBinaryOperator`, but this caused the operand expressions to be emitted once for every required cmp.

* Implement [builtin.over] with modifications to support the intent of P0946R0. See the note on `BuiltinOperatorOverloadBuilder::addThreeWayArithmeticOverloads` for more information about the workaround.




Reviewers: rsmith, aaron.ballman, majnemer, rnk, compnerd, rjmccall

Reviewed By: rjmccall

Subscribers: rjmccall, rsmith, aaron.ballman, junbuml, mgorny, cfe-commits

Differential Revision: https://reviews.llvm.org/D45476

llvm-svn: 331677
2018-05-07 21:07:10 +00:00
..
2017-09-20 07:22:00 +00:00
2018-02-23 19:30:48 +00:00
2017-03-29 17:58:41 +00:00
2015-04-14 15:15:49 +00:00
2011-11-12 21:07:54 +00:00
2012-12-20 02:09:13 +00:00
2018-02-23 19:30:48 +00:00
2014-10-27 12:37:26 +00:00
2011-10-07 20:08:35 +00:00
2011-10-07 20:08:35 +00:00
2015-09-17 20:55:33 +00:00
2015-09-17 20:55:33 +00:00
2015-09-17 20:55:33 +00:00