olestrohm added inline comments.
================ Comment at: clang/lib/Sema/SemaOverload.cpp:9870 + if (S.getLangOpts().OpenCL) { + if (const auto *CD1 = dyn_cast_or_null<CXXConstructorDecl>(Cand1.Function)) { ---------------- Anastasia wrote: > olestrohm wrote: > > Anastasia wrote: > > > I think we should remove the OpenCL check since it is not OpenCL specific > > > rule and you are using common helpers indeed! > > > > > > I also wonder if this should be applied to all member functions not only > > > ctors since `isBetterOverloadCandidate` should be used for everything? > > > > > > However it seems that other members are already handled somehow > > > https://godbolt.org/z/MrWKPKed7. Do you know where this handling comes > > > from? > > It's handled in SemaOverload.cpp:10000 in > > `OverloadCandidateSet::BestViableFunction` which checks if the given > > function is viable or not. For member functions the address space they're > > defined in and the address space of the variable have to match. Therefore > > only one of them is valid at a time and they never get checked against each > > other in `isBetterOverloadCandidate`. > I am quite sure that for the example above both `__private` and `__generic > `overloads are viable. In fact, if you remove the `__private` overload the > `__generic` one gets picked. > > So I think the logic should be checking for compatibility rather than the > exact match i.e. using `isAddressSpaceSupersetOf` although it might not be > calling that helper directly but through the other Qualifier logic. Ah, I think I checked it wrong last time. Going through it again it's actually determined by `QualType::isMoreQualifiedThan` in the end. I'll look into it more. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D102850/new/ https://reviews.llvm.org/D102850 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits