[clang] [Clang][WIP][RFC] Bypass TAD during overload resolution if a perfect match exists (PR #133426)

Younan Zhang via cfe-commits cfe-commits at lists.llvm.org
Fri Mar 28 04:52:04 PDT 2025


================
@@ -10918,7 +11083,44 @@ bool OverloadCandidate::NotValidBecauseConstraintExprHasError() const {
 OverloadingResult
 OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc,
                                          iterator &Best) {
+
+  bool TwoPhaseResolution =
+      !NonDeducedCandidates.empty() && Kind != CSK_CodeCompletion &&
+      Kind != CSK_InitByUserDefinedConversion && Kind != CSK_InitByConstructor;
+
+  if (TwoPhaseResolution) {
+    Best = end();
+    for (auto It = begin(); It != end(); ++It) {
+      if (It->isPerfectMatch(S.getASTContext())) {
+        if (Best == end()) {
+          Best = It;
+        } else {
+          Best = end();
+          break;
+        }
+      }
----------------
zyn0217 wrote:

If there are two+ perfect matches, I presume the reason for going on adding template candidates is that we want every candidates to be present in the diagnostic?

https://github.com/llvm/llvm-project/pull/133426


More information about the cfe-commits mailing list