aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Chernenkov <dmitryc@google.com>2023-10-18 14:13:48 +0000
committerDmitry Chernenkov <dmitryc@google.com>2023-10-18 14:13:48 +0000
commita3a0f59a1e1cb0ac02f06b19f730ea05a6541c96 (patch)
tree8c0cf0cc33fbfe76f033968245193b86b9af98ef
parentcf1bde9a15d711564c51e707b6200f1b5f508b9f (diff)
downloadllvm-a3a0f59a1e1cb0ac02f06b19f730ea05a6541c96.zip
llvm-a3a0f59a1e1cb0ac02f06b19f730ea05a6541c96.tar.gz
llvm-a3a0f59a1e1cb0ac02f06b19f730ea05a6541c96.tar.bz2
Revert "Correctly compute conversion seq for args to fn with reversed param order (#68999)"
This reverts commit e6d0b126c824222fca2f31a2ba571c2ee2bb4760. See PR for reason https://github.com/llvm/llvm-project/pull/68999#issuecomment-1768541660
-rw-r--r--clang/docs/ReleaseNotes.rst2
-rw-r--r--clang/lib/Sema/SemaOverload.cpp2
-rw-r--r--clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp35
3 files changed, 1 insertions, 38 deletions
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 443325b..81cbfd9 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -117,8 +117,6 @@ C++ Language Changes
C++20 Feature Support
^^^^^^^^^^^^^^^^^^^^^
-- Fix a bug in conversion sequence of arguments to a function with reversed parameter order.
- Fixes `GH <https://github.com/llvm/llvm-project/issues/53954>`_.
C++23 Feature Support
^^^^^^^^^^^^^^^^^^^^^
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index c271ceb..ce78994 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -7688,7 +7688,7 @@ bool Sema::CheckNonDependentConversions(
QualType ParamType = ParamTypes[I + Offset];
if (!ParamType->isDependentType()) {
unsigned ConvIdx = PO == OverloadCandidateParamOrder::Reversed
- ? Args.size() - 1 - (ThisConversions + I)
+ ? 0
: (ThisConversions + I);
Conversions[ConvIdx]
= TryCopyInitialization(*this, Args[I], ParamType,
diff --git a/clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp b/clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp
index 02fe37d..5c6804eb 100644
--- a/clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp
+++ b/clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp
@@ -324,41 +324,6 @@ bool x = X() == X(); // expected-warning {{ambiguous}}
}
} // namespace P2468R2
-namespace GH53954{
-namespace test1 {
-struct P {
- template <class T>
- friend bool operator==(const P&, const T&); // expected-note {{candidate}} \
- // expected-note {{reversed parameter order}}
-};
-struct A : public P {};
-struct B : public P {};
-bool check(A a, B b) { return a == b; } // expected-error {{ '==' is ambiguous}}
-}
-
-namespace test2 {
-struct P {
- template <class T>
- friend bool operator==(const T&, const P&); // expected-note {{candidate}} \
- // expected-note {{reversed parameter order}}
-};
-struct A : public P {};
-struct B : public P {};
-bool check(A a, B b) { return a == b; } // expected-error {{ '==' is ambiguous}}
-}
-
-namespace test3 {
-struct P {
- template<class S>
- bool operator==(const S &) const; // expected-note {{candidate}} \
- // expected-note {{reversed parameter order}}
-};
-struct A : public P {};
-struct B : public P {};
-bool check(A a, B b) { return a == b; } // expected-error {{ '==' is ambiguous}}
-}
-}
-
#else // NO_ERRORS
namespace problem_cases {