[clang] b96c6b6 - PR44786: Don't assert when profiling <=> expressions.

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Tue Feb 4 18:30:27 PST 2020


Author: Richard Smith
Date: 2020-02-04T18:30:17-08:00
New Revision: b96c6b65b93f7b3878bced2374bef747a4c3b690

URL: https://github.com/llvm/llvm-project/commit/b96c6b65b93f7b3878bced2374bef747a4c3b690
DIFF: https://github.com/llvm/llvm-project/commit/b96c6b65b93f7b3878bced2374bef747a4c3b690.diff

LOG: PR44786: Don't assert when profiling <=> expressions.

Added: 
    

Modified: 
    clang/lib/AST/StmtProfile.cpp
    clang/test/SemaCXX/cxx2a-three-way-comparison.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/StmtProfile.cpp b/clang/lib/AST/StmtProfile.cpp
index 0b519a61ef87..4625374cc4c4 100644
--- a/clang/lib/AST/StmtProfile.cpp
+++ b/clang/lib/AST/StmtProfile.cpp
@@ -1536,8 +1536,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 eb1480ce6102..29ae95066e27 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);


        


More information about the cfe-commits mailing list