From 9a6c11d8271e3edf042021dcfe1ef7f60e9a1010 Mon Sep 17 00:00:00 2001 From: Kaelyn Takata Date: Tue, 23 Jun 2015 19:13:17 +0000 Subject: [PATCH] Make the typo resolution in r240441 apply to all function calls. Regular function calls (such as to cabs()) run into the same problem with handling dependent exprs, not just builtins with custom type checking. Fixes PR23775. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@240443 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaExpr.cpp | 23 ++++++++++++----------- test/Sema/typo-correction.c | 5 +++++ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 5813a626b0..2f3f4c55f1 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -4937,19 +4937,20 @@ Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, TheCall = new (Context) CallExpr(Context, Fn, Args, Context.BoolTy, VK_RValue, RParenLoc); + if (!getLangOpts().CPlusPlus) { + // C cannot always handle TypoExpr nodes in builtin calls and direct + // function calls as their argument checking don't necessarily handle + // dependent types properly, so make sure any TypoExprs have been + // dealt with. + ExprResult Result = CorrectDelayedTyposInExpr(TheCall); + if (!Result.isUsable()) return ExprError(); + TheCall = dyn_cast(Result.get()); + if (!TheCall) return Result; + } + // Bail out early if calling a builtin with custom typechecking. - if (BuiltinID && Context.BuiltinInfo.hasCustomTypechecking(BuiltinID)) { - if (!getLangOpts().CPlusPlus) { - // C cannot handle TypoExpr nodes in the builtin's call expr because it - // doesn't handle dependent types properly, so make sure any TypoExprs have - // been dealt with. - ExprResult Result = CorrectDelayedTyposInExpr(TheCall); - if (!Result.isUsable()) return ExprError(); - TheCall = dyn_cast(Result.get()); - if (!TheCall) return Result; - } + if (BuiltinID && Context.BuiltinInfo.hasCustomTypechecking(BuiltinID)) return CheckBuiltinFunctionCall(FDecl, BuiltinID, TheCall); - } retry: const FunctionType *FuncT; diff --git a/test/Sema/typo-correction.c b/test/Sema/typo-correction.c index 2f8d2b32ff..ff43064d5b 100644 --- a/test/Sema/typo-correction.c +++ b/test/Sema/typo-correction.c @@ -44,3 +44,8 @@ int PR23101(__m128i __x) { void f(long *a, long b) { __atomic_or_fetch(a, b, c); // expected-error {{use of undeclared identifier 'c'}} } + +extern double cabs(_Complex double z); +void fn1() { + cabs(errij); // expected-error {{use of undeclared identifier 'errij'}} +} -- 2.40.0