diff options
author | Richard Smith <richard@metafoo.co.uk> | 2020-02-04 18:28:36 -0800 |
---|---|---|
committer | Richard Smith <richard@metafoo.co.uk> | 2020-02-04 18:30:54 -0800 |
commit | b833e0c5f1190e7102e570b0eb5055174aa03b32 (patch) | |
tree | 2170a83f6a1be1766bc858fe2bb8f665ea8b9805 | |
parent | 8f19f984f296c8ddbb16dc1623e8a4bd6bfed111 (diff) | |
download | bcm5719-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.cpp | 4 | ||||
-rw-r--r-- | clang/test/SemaCXX/cxx2a-three-way-comparison.cpp | 9 |
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); |