This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rGb88eb855b531: [clang] use correct builtin type for defaulted comparison analyzer (authored by mizvekov).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D103760/new/ https://reviews.llvm.org/D103760 Files: clang/lib/Sema/SemaDeclCXX.cpp clang/test/CXX/class/class.compare/class.spaceship/p2.cpp Index: clang/test/CXX/class/class.compare/class.spaceship/p2.cpp =================================================================== --- clang/test/CXX/class/class.compare/class.spaceship/p2.cpp +++ clang/test/CXX/class/class.compare/class.spaceship/p2.cpp @@ -172,3 +172,23 @@ int C::*x; // expected-note {{because there is no viable three-way comparison function for member 'x'}} }; } + +namespace PR50591 { + struct a1 { + operator int() const; + }; + struct b1 { + auto operator<=>(b1 const &) const = default; + a1 f; + }; + std::strong_ordering cmp_b1 = b1() <=> b1(); + + struct a2 { + operator float() const; + }; + struct b2 { + auto operator<=>(b2 const &) const = default; + a2 f; + }; + std::partial_ordering cmp_b2 = b2() <=> b2(); +} Index: clang/lib/Sema/SemaDeclCXX.cpp =================================================================== --- clang/lib/Sema/SemaDeclCXX.cpp +++ clang/lib/Sema/SemaDeclCXX.cpp @@ -7863,8 +7863,13 @@ return Result::deleted(); } } else { + QualType T = Best->BuiltinParamTypes[0]; + assert(T == Best->BuiltinParamTypes[1] && + "builtin comparison for different types?"); + assert(Best->BuiltinParamTypes[2].isNull() && + "invalid builtin comparison"); Optional<ComparisonCategoryType> Cat = - getComparisonCategoryForBuiltinCmp(Args[0]->getType()); + getComparisonCategoryForBuiltinCmp(T); assert(Cat && "no category for builtin comparison?"); R.Category = *Cat; }
Index: clang/test/CXX/class/class.compare/class.spaceship/p2.cpp =================================================================== --- clang/test/CXX/class/class.compare/class.spaceship/p2.cpp +++ clang/test/CXX/class/class.compare/class.spaceship/p2.cpp @@ -172,3 +172,23 @@ int C::*x; // expected-note {{because there is no viable three-way comparison function for member 'x'}} }; } + +namespace PR50591 { + struct a1 { + operator int() const; + }; + struct b1 { + auto operator<=>(b1 const &) const = default; + a1 f; + }; + std::strong_ordering cmp_b1 = b1() <=> b1(); + + struct a2 { + operator float() const; + }; + struct b2 { + auto operator<=>(b2 const &) const = default; + a2 f; + }; + std::partial_ordering cmp_b2 = b2() <=> b2(); +} Index: clang/lib/Sema/SemaDeclCXX.cpp =================================================================== --- clang/lib/Sema/SemaDeclCXX.cpp +++ clang/lib/Sema/SemaDeclCXX.cpp @@ -7863,8 +7863,13 @@ return Result::deleted(); } } else { + QualType T = Best->BuiltinParamTypes[0]; + assert(T == Best->BuiltinParamTypes[1] && + "builtin comparison for different types?"); + assert(Best->BuiltinParamTypes[2].isNull() && + "invalid builtin comparison"); Optional<ComparisonCategoryType> Cat = - getComparisonCategoryForBuiltinCmp(Args[0]->getType()); + getComparisonCategoryForBuiltinCmp(T); assert(Cat && "no category for builtin comparison?"); R.Category = *Cat; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits