]> granicus.if.org Git - clang/commitdiff
When code completion of an overload set fails, produce results for ordinary name...
authorDouglas Gregor <dgregor@apple.com>
Fri, 11 Dec 2009 19:06:04 +0000 (19:06 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 11 Dec 2009 19:06:04 +0000 (19:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91141 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaCodeComplete.cpp

index 140cb5c8a7f154c60be7fc294136fc5f644600a4..654bf25944a3a229a44ae460ad7ea16f2df1c833 100644 (file)
@@ -1698,14 +1698,21 @@ void Sema::CodeCompleteCall(Scope *S, ExprTy *FnIn,
                             ExprTy **ArgsIn, unsigned NumArgs) {
   if (!CodeCompleter)
     return;
-  
+
+  // When we're code-completing for a call, we fall back to ordinary
+  // name code-completion whenever we can't produce specific
+  // results. We may want to revisit this strategy in the future,
+  // e.g., by merging the two kinds of results.
+
   Expr *Fn = (Expr *)FnIn;
   Expr **Args = (Expr **)ArgsIn;
-  
+
   // Ignore type-dependent call expressions entirely.
   if (Fn->isTypeDependent() || 
-      Expr::hasAnyTypeDependentArguments(Args, NumArgs))
+      Expr::hasAnyTypeDependentArguments(Args, NumArgs)) {
+    CodeCompleteOrdinaryName(S);
     return;
+  }
   
   llvm::SmallVector<NamedDecl*,8> Fns;
   DeclarationName UnqualifiedName;
@@ -1748,8 +1755,12 @@ void Sema::CodeCompleteCall(Scope *S, ExprTy *FnIn,
     if (Cand->Viable)
       Results.push_back(ResultCandidate(Cand->Function));
   }
-  CodeCompleter->ProcessOverloadCandidates(*this, NumArgs, Results.data(), 
-                                           Results.size());
+
+  if (Results.empty())
+    CodeCompleteOrdinaryName(S);
+  else
+    CodeCompleter->ProcessOverloadCandidates(*this, NumArgs, Results.data(), 
+                                             Results.size());
 }
 
 void Sema::CodeCompleteQualifiedId(Scope *S, const CXXScopeSpec &SS,