From: Douglas Gregor Date: Sun, 30 May 2010 06:10:08 +0000 (+0000) Subject: Teach code-completion for calls to be more careful with a X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d28dcd76c78d17ff6196893761cc9c71d97cc02f;p=clang Teach code-completion for calls to be more careful with a potentially-NULL "function" argument. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@105152 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaCodeComplete.cpp b/lib/Sema/SemaCodeComplete.cpp index 339c46fde8..0b30da5d85 100644 --- a/lib/Sema/SemaCodeComplete.cpp +++ b/lib/Sema/SemaCodeComplete.cpp @@ -2534,6 +2534,17 @@ namespace { }; } +static bool anyNullArguments(Expr **Args, unsigned NumArgs) { + if (NumArgs && !Args) + return true; + + for (unsigned I = 0; I != NumArgs; ++I) + if (!Args[I]) + return true; + + return false; +} + void Sema::CodeCompleteCall(Scope *S, ExprTy *FnIn, ExprTy **ArgsIn, unsigned NumArgs) { if (!CodeCompleter) @@ -2548,7 +2559,7 @@ void Sema::CodeCompleteCall(Scope *S, ExprTy *FnIn, Expr **Args = (Expr **)ArgsIn; // Ignore type-dependent call expressions entirely. - if (Fn->isTypeDependent() || + if (!Fn || Fn->isTypeDependent() || anyNullArguments(Args, NumArgs) || Expr::hasAnyTypeDependentArguments(Args, NumArgs)) { CodeCompleteOrdinaryName(S, CCC_Expression); return; @@ -2572,7 +2583,8 @@ void Sema::CodeCompleteCall(Scope *S, ExprTy *FnIn, else if (DeclRefExpr *DRE = dyn_cast(NakedFn)) { FunctionDecl *FDecl = dyn_cast(DRE->getDecl()); if (FDecl) { - if (!FDecl->getType()->getAs()) + if (!getLangOptions().CPlusPlus || + !FDecl->getType()->getAs()) Results.push_back(ResultCandidate(FDecl)); else // FIXME: access?