summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Smith <richard@metafoo.co.uk>2020-02-04 18:28:36 -0800
committerRichard Smith <richard@metafoo.co.uk>2020-02-04 18:30:54 -0800
commitb833e0c5f1190e7102e570b0eb5055174aa03b32 (patch)
tree2170a83f6a1be1766bc858fe2bb8f665ea8b9805
parent8f19f984f296c8ddbb16dc1623e8a4bd6bfed111 (diff)
downloadbcm5719-llvm-b833e0c5f1190e7102e570b0eb5055174aa03b32.tar.gz
bcm5719-llvm-b833e0c5f1190e7102e570b0eb5055174aa03b32.zip
PR44786: Don't assert when profiling <=> expressions.
(cherry picked from commit b96c6b65b93f7b3878bced2374bef747a4c3b690)
-rw-r--r--clang/lib/AST/StmtProfile.cpp4
-rw-r--r--clang/test/SemaCXX/cxx2a-three-way-comparison.cpp9
2 files changed, 11 insertions, 2 deletions
diff --git a/clang/lib/AST/StmtProfile.cpp b/clang/lib/AST/StmtProfile.cpp
index 382ea5c8d7e..60dec50d53d 100644
--- a/clang/lib/AST/StmtProfile.cpp
+++ b/clang/lib/AST/StmtProfile.cpp
@@ -1535,8 +1535,8 @@ static Stmt::StmtClass DecodeOperatorCall(const CXXOperatorCallExpr *S,
return Stmt::BinaryOperatorClass;
case OO_Spaceship:
- // FIXME: Update this once we support <=> expressions.
- llvm_unreachable("<=> expressions not supported yet");
+ BinaryOp = BO_Cmp;
+ return Stmt::BinaryOperatorClass;
case OO_AmpAmp:
BinaryOp = BO_LAnd;
diff --git a/clang/test/SemaCXX/cxx2a-three-way-comparison.cpp b/clang/test/SemaCXX/cxx2a-three-way-comparison.cpp
index eb1480ce610..29ae95066e2 100644
--- a/clang/test/SemaCXX/cxx2a-three-way-comparison.cpp
+++ b/clang/test/SemaCXX/cxx2a-three-way-comparison.cpp
@@ -1,5 +1,14 @@
// RUN: %clang_cc1 -std=c++2a -verify %s
+// Keep this test before any declarations of operator<=>.
+namespace PR44786 {
+ template<typename T> void f(decltype(T{} <=> T{})) {} // expected-note {{previous}}
+
+ struct S {};
+ int operator<=>(S const &, S const &);
+ template<typename T> void f(decltype(T{} <=> T{})) {} // expected-error {{redefinition}}
+}
+
struct A {};
constexpr int operator<=>(A a, A b) { return 42; }
static_assert(operator<=>(A(), A()) == 42);
OpenPOWER on IntegriCloud