[c++20] Add rewriting from comparison operators to <=> / ==.
authorRichard Smith <richard-llvm@metafoo.co.uk>
Sat, 19 Oct 2019 00:04:43 +0000 (00:04 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Sat, 19 Oct 2019 00:04:43 +0000 (00:04 +0000)
commit974c8b7e2fde550fd87850d50695341101c38c2d
tree76f72d72eefa0eb6efc4de11ccf32de5e171727b
parent778dc0f1d49230f53401ae0c190fe460bda4ffd1
[c++20] Add rewriting from comparison operators to <=> / ==.

This adds support for rewriting <, >, <=, and >= to a normal or reversed
call to operator<=>, for rewriting != to a normal or reversed call to
operator==, and for rewriting <=> and == to reversed forms of those same
operators.

Note that this is a breaking change for various C++17 code patterns,
including some in use in LLVM. The most common patterns (where an
operator== becomes ambiguous with a reversed form of itself) are still
accepted under this patch, as an extension (with a warning). I'm hopeful
that we can get the language rules fixed before C++20 ships, and the
extension warning is aimed primarily at providing data to inform that
decision.

llvm-svn: 375306
21 files changed:
clang/include/clang/AST/ExprCXX.h
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/include/clang/Basic/OperatorKinds.h
clang/include/clang/Sema/Overload.h
clang/include/clang/Sema/Sema.h
clang/lib/AST/ExprCXX.cpp
clang/lib/Frontend/FrontendActions.cpp
clang/lib/Sema/SemaExpr.cpp
clang/lib/Sema/SemaOverload.cpp
clang/lib/Sema/SemaTemplate.cpp
clang/lib/Sema/SemaTemplateInstantiate.cpp
clang/lib/Sema/TreeTransform.h
clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp [new file with mode: 0644]
clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p8-2a.cpp [new file with mode: 0644]
clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp [new file with mode: 0644]
clang/test/CXX/temp/temp.fct.spec/temp.deduct/p7.cpp
clang/test/CodeGenCXX/mangle-cxx2a.cpp [new file with mode: 0644]
clang/test/PCH/cxx2a-compare.cpp
clang/test/SemaCXX/compare-cxx2a.cpp
clang/test/SemaCXX/self-comparison.cpp
clang/www/cxx_status.html