From dbd112972416f48f7e5b117e7a14b6e4b4d38146 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 6 Dec 2019 11:34:29 -0800 Subject: [PATCH] Stop checking whether std::strong_* has ::equivalent members. Any attempt to use these would be a bug, so we shouldn't even look for them. --- clang/lib/AST/ComparisonCategories.cpp | 9 +++------ clang/test/SemaCXX/std-compare-cxx2a.cpp | 6 +++--- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/clang/lib/AST/ComparisonCategories.cpp b/clang/lib/AST/ComparisonCategories.cpp index ee4c1b0..8999913 100644 --- a/clang/lib/AST/ComparisonCategories.cpp +++ b/clang/lib/AST/ComparisonCategories.cpp @@ -190,19 +190,16 @@ ComparisonCategories::getPossibleResultsForType(ComparisonCategoryType Type) { using CCT = ComparisonCategoryType; using CCR = ComparisonCategoryResult; std::vector Values; - Values.reserve(6); - Values.push_back(CCR::Equivalent); + Values.reserve(4); bool IsStrong = (Type == CCT::StrongEquality || Type == CCT::StrongOrdering); if (IsStrong) - Values.push_back(CCR::Equal); + Values.push_back(IsStrong ? CCR::Equal : CCR::Equivalent); if (Type == CCT::StrongOrdering || Type == CCT::WeakOrdering || Type == CCT::PartialOrdering) { Values.push_back(CCR::Less); Values.push_back(CCR::Greater); } else { - Values.push_back(CCR::Nonequivalent); - if (IsStrong) - Values.push_back(CCR::Nonequal); + Values.push_back(IsStrong ? CCR::Nonequal : CCR::Nonequivalent); } if (Type == CCT::PartialOrdering) Values.push_back(CCR::Unordered); diff --git a/clang/test/SemaCXX/std-compare-cxx2a.cpp b/clang/test/SemaCXX/std-compare-cxx2a.cpp index 6746fb4..941c4fa 100644 --- a/clang/test/SemaCXX/std-compare-cxx2a.cpp +++ b/clang/test/SemaCXX/std-compare-cxx2a.cpp @@ -27,7 +27,7 @@ struct partial_ordering { } // namespace std auto missing_member_test() { - // expected-error@+1 {{standard library implementation of 'std::partial_ordering' is not supported; member 'equivalent' is missing}} + // expected-error@+1 {{standard library implementation of 'std::partial_ordering' is not supported; member 'less' is missing}} return (1.0 <=> 1.0); } @@ -35,13 +35,13 @@ namespace std { inline namespace __1 { struct strong_ordering { long long value; - static const strong_ordering equivalent; // expected-note {{declared here}} + static const strong_ordering equal; // expected-note {{declared here}} }; } // namespace __1 } // namespace std auto test_non_constexpr_var() { - // expected-error@+1 {{standard library implementation of 'std::strong_ordering' is not supported; member 'equivalent' does not have expected form}} + // expected-error@+1 {{standard library implementation of 'std::strong_ordering' is not supported; member 'equal' does not have expected form}} return (1 <=> 0); } -- 2.7.4