From a7f937283f70818d69b0d4b1678c28a4a6f3c4cd Mon Sep 17 00:00:00 2001 From: Kaelyn Takata Date: Tue, 25 Nov 2014 23:04:09 +0000 Subject: [PATCH] Ensure that any TypoExprs in the arguments to bultins with custom type checking are handled before the custom type checking is performed. Fixes PR21669. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@222797 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaExpr.cpp | 8 ++++++-- test/SemaCXX/typo-correction-delayed.cpp | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 223e93e7c3..ae299c3c98 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -4752,8 +4752,12 @@ Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, VK_RValue, RParenLoc); // Bail out early if calling a builtin with custom typechecking. - if (BuiltinID && Context.BuiltinInfo.hasCustomTypechecking(BuiltinID)) - return CheckBuiltinFunctionCall(FDecl, BuiltinID, TheCall); + if (BuiltinID && Context.BuiltinInfo.hasCustomTypechecking(BuiltinID)) { + ExprResult Res = CorrectDelayedTyposInExpr(TheCall); + if (!Res.isUsable() || !isa(Res.get())) + return Res; + return CheckBuiltinFunctionCall(FDecl, BuiltinID, cast(Res.get())); + } retry: const FunctionType *FuncT; diff --git a/test/SemaCXX/typo-correction-delayed.cpp b/test/SemaCXX/typo-correction-delayed.cpp index 124f0ec2a1..bff1d7633f 100644 --- a/test/SemaCXX/typo-correction-delayed.cpp +++ b/test/SemaCXX/typo-correction-delayed.cpp @@ -93,3 +93,12 @@ void f(NestedNode *node) { NestedNode *next = node->Next(); // expected-error-re {{no member named 'Next' in 'initializerCorrections::NestedNode'{{$}}}} } } + +namespace PR21669 { +void f(int *i) { + // Check that arguments to a builtin with custom type checking are corrected + // properly, since calls to such builtins bypass much of the normal code path + // for building and checking the call. + __atomic_load(i, i, something_something); // expected-error-re {{use of undeclared identifier 'something_something'{{$}}}} +} +} -- 2.40.0