]> granicus.if.org Git - clang/commitdiff
Pass PartialOverloading argument to the correct corresponding parameter
authorEric Fiselier <eric@efcs.ca>
Tue, 11 Dec 2018 16:53:25 +0000 (16:53 +0000)
committerEric Fiselier <eric@efcs.ca>
Tue, 11 Dec 2018 16:53:25 +0000 (16:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@348864 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaOverload.cpp
test/CodeCompletion/function-overloads.cpp

index 7f627c270df6b884648cf5c9c05885a62c22939d..22514ee2420d9e7b60513aac49217ba40e4fa70b 100644 (file)
@@ -8939,12 +8939,14 @@ Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
       if (ExplicitTemplateArgs)
         continue;
 
-      AddOverloadCandidate(FD, FoundDecl, Args, CandidateSet, false,
+      AddOverloadCandidate(FD, FoundDecl, Args, CandidateSet,
+                           /*SupressUserConversions=*/false,
                            PartialOverloading);
-    } else
-      AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I),
-                                   FoundDecl, ExplicitTemplateArgs,
-                                   Args, CandidateSet, PartialOverloading);
+    } else {
+     AddTemplateOverloadCandidate(
+          cast<FunctionTemplateDecl>(*I), FoundDecl, ExplicitTemplateArgs, Args,
+          CandidateSet, /*SupressUserConversions=*/false, PartialOverloading);
+    }
   }
 }
 
index 00998b0228849e78d783d3d586a2a383a63cd40a..11c864c281070099259bdb2f8147a87a327a0661 100644 (file)
@@ -10,12 +10,27 @@ void test() {
   A a(f(1, 2, 3, 4), 2, 3);
 }
 
+
+namespace NS {
+  struct X { };
+  struct Y { Y(X); };
+  template <class T = int>
+  void g(X, Y);
+}
+
+void test_adl() {
+  NS::X x;
+  g(x, x);
+}
+
 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:10:9 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:10:10 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:10:17 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:10:19 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:10:20 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s
 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:10:21 %s -o - | FileCheck -check-prefix=CHECK-CC4 %s
+// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:23:7 %s -o - | \
+// RUN:    FileCheck -check-prefix=CHECK-CC5 %s
 // CHECK-CC1: OVERLOAD: [#int#]f(<#float x#>, float y)
 // CHECK-CC1: OVERLOAD: [#int#]f(<#int i#>)
 // CHECK-CC1-NOT, CHECK-CC2-NOT: OVERLOAD: A(
@@ -25,3 +40,4 @@ void test() {
 // CHECK-CC3: OVERLOAD: A(<#const A &#>)
 // CHECK-CC3: OVERLOAD: A(<#A &&#>)
 // CHECK-CC4: OVERLOAD: A(int, <#int#>, int)
+// CHECK-CC5: OVERLOAD: [#void#]g(X, <#Y#>)