From 5f7701a4def14b22cfd797fda53187c88c36489e Mon Sep 17 00:00:00 2001 From: Kaelyn Takata Date: Tue, 16 Dec 2014 23:07:00 +0000 Subject: [PATCH] Try typo correction on all initialization arguments and be less pessimistic about when to do so. This also fixes PR21905 as the initialization argument was no longer viewed as being type dependent due to the TypoExpr being type-cast. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224386 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDecl.cpp | 12 +++++------- test/SemaCXX/typo-correction-delayed.cpp | 4 ++++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 298e4e705f..d4b87ba615 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -8806,12 +8806,10 @@ 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)) { + // Try to correct any TypoExprs in the initialization arguments. + for (size_t Idx = 0; Idx < Args.size(); ++Idx) { ExprResult Res = - CorrectDelayedTyposInExpr(Args[0], [this, Entity, Kind](Expr *E) { + CorrectDelayedTyposInExpr(Args[Idx], [this, Entity, Kind](Expr *E) { InitializationSequence Init(*this, Entity, Kind, MultiExprArg(E)); return Init.Failed() ? ExprError() : E; }); @@ -8819,8 +8817,8 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, VDecl->setInvalidDecl(); return; } - if (Res.get() != Args[0]) - Args[0] = Res.get(); + if (Res.get() != Args[Idx]) + Args[Idx] = Res.get(); } InitializationSequence InitSeq(*this, Entity, Kind, Args); diff --git a/test/SemaCXX/typo-correction-delayed.cpp b/test/SemaCXX/typo-correction-delayed.cpp index c91fb6ca65..a9bc91e030 100644 --- a/test/SemaCXX/typo-correction-delayed.cpp +++ b/test/SemaCXX/typo-correction-delayed.cpp @@ -143,3 +143,7 @@ void test() { int x = variableX.getX(); } } + +namespace PR21905 { +int (*a) () = (void)Z; // expected-error-re {{use of undeclared identifier 'Z'{{$}}}} +} -- 2.40.0