From 4c3ffc4fef388ff9b2b9b92b25bbd4960f337dfa Mon Sep 17 00:00:00 2001 From: Kaelyn Takata Date: Fri, 21 Nov 2014 18:48:00 +0000 Subject: Properly correct initializer expressions based on whether they would be valid. llvm-svn: 222550 --- clang/lib/Sema/SemaDecl.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'clang/lib/Sema/SemaDecl.cpp') diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index d44f1417762..08f5c3c8b8a 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -8799,6 +8799,23 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, Args = MultiExprArg(CXXDirectInit->getExprs(), CXXDirectInit->getNumExprs()); + // Try to correct any TypoExprs if there might be some in the initialization + // arguments (TypoExprs are marked as type-dependent). + // TODO: Handle typo correction when there's more than one argument? + if (Args.size() == 1 && Expr::hasAnyTypeDependentArguments(Args)) { + ExprResult Res = + CorrectDelayedTyposInExpr(Args[0], [this, Entity, Kind](Expr *E) { + InitializationSequence Init(*this, Entity, Kind, MultiExprArg(E)); + return Init.Failed() ? ExprError() : E; + }); + if (Res.isInvalid()) { + VDecl->setInvalidDecl(); + return; + } + if (Res.get() != Args[0]) + Args[0] = Res.get(); + } + InitializationSequence InitSeq(*this, Entity, Kind, Args); ExprResult Result = InitSeq.Perform(*this, Entity, Kind, Args, &DclT); if (Result.isInvalid()) { -- cgit v1.2.3