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); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits