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.
llvm-svn: 224386
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 298e4e7..d4b87ba 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -8806,12 +8806,10 @@
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 @@
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);