https://github.com/nicovank updated https://github.com/llvm/llvm-project/pull/105976
>From 033d4003154440fb00c62c0e85fe3dac4af10d22 Mon Sep 17 00:00:00 2001 From: Nicolas van Kempen <nvank...@gmail.com> Date: Sun, 25 Aug 2024 02:57:55 -0400 Subject: [PATCH] [clang][Sema] Fix particular operator overload crash Fix #104883. Fix #104800. --- clang/lib/Sema/SemaOverload.cpp | 7 +++++++ clang/test/SemaCXX/PR105976.cpp | 26 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 clang/test/SemaCXX/PR105976.cpp diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index 1ce0fa091938d7..a2cf334bd176fe 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -7425,6 +7425,13 @@ void Sema::AddMethodCandidate(DeclAccessPair FoundDecl, QualType ObjectType, /*ExplicitArgs*/ nullptr, ObjectType, ObjectClassification, Args, CandidateSet, SuppressUserConversions, false, PO); + } else if (UsingDecl *UD = dyn_cast<UsingDecl>(Decl)) { + for (auto *Shadow : UD->shadows()) { + AddMethodCandidate(cast<CXXMethodDecl>(Shadow->getTargetDecl()), + FoundDecl, ActingContext, ObjectType, + ObjectClassification, Args, CandidateSet, + SuppressUserConversions, false, std::nullopt, PO); + } } else { AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext, ObjectType, ObjectClassification, Args, CandidateSet, diff --git a/clang/test/SemaCXX/PR105976.cpp b/clang/test/SemaCXX/PR105976.cpp new file mode 100644 index 00000000000000..289e53058d6095 --- /dev/null +++ b/clang/test/SemaCXX/PR105976.cpp @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -verify-ignore-unexpected=note %s + +struct B { + void operator==(B); +}; + +struct C { + void operator==(C); +}; + +struct D { + void operator==(D); +}; + +struct E : C, B { + using C::operator==; + using B::operator==; +}; + +struct F : D, E {}; + +void f() { + F{} == F{}; + // expected-error@-1 {{member 'operator==' found in multiple base classes of different types}} + // expected-error@-2 {{use of overloaded operator '==' is ambiguous}} +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits