From 5bd1a1151f5da8236c5b60f4e8a6135627a8130a Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Wed, 23 Sep 2009 14:56:09 +0000 Subject: [PATCH] When code-completion after a "," is building an overload set, note that there is one more argument (the one following the comma) and make the candidate non-viable if the function cannot accept any argument in that position. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82625 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaOverload.cpp | 3 ++- test/CodeCompletion/call.cpp | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index 144cf93d31..12eb58733b 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -2189,7 +2189,8 @@ Sema::AddOverloadCandidate(FunctionDecl *Function, // (C++ 13.3.2p2): A candidate function having fewer than m // parameters is viable only if it has an ellipsis in its parameter // list (8.3.5). - if (NumArgs > NumArgsInProto && !Proto->isVariadic()) { + if ((NumArgs + (PartialOverloading && NumArgs)) > NumArgsInProto && + !Proto->isVariadic()) { Candidate.Viable = false; return; } diff --git a/test/CodeCompletion/call.cpp b/test/CodeCompletion/call.cpp index 448b8ebb6e..90bf82bff3 100644 --- a/test/CodeCompletion/call.cpp +++ b/test/CodeCompletion/call.cpp @@ -19,10 +19,10 @@ void test() { f(Y(), 0, 0); // RUN: clang-cc -fsyntax-only -code-completion-at=%s:19:9 %s -o - | FileCheck -check-prefix=CC1 %s && // CHECK-CC1: f(struct N::Y y, <#int ZZ#>) - // CHECK-NEXT-CC1: f(int i, <#int j#>, int k) - // CHECK-NEXT-CC1: f(float x, <#float y#>) + // CHECK-CC1-NEXT: f(int i, <#int j#>, int k) + // CHECK-CC1-NEXT: f(float x, <#float y#>) // RUN: clang-cc -fsyntax-only -code-completion-at=%s:19:13 %s -o - | FileCheck -check-prefix=CC2 %s && - // FIXME: two extra overloads are showing up! + // CHECK-CC2-NOT: f(struct N::Y y, int ZZ) // CHECK-CC2: f(int i, int j, <#int k#>) // RUN: true }