r224386 - Try typo correction on all initialization arguments and be less

Kaelyn Takata rikka at google.com
Tue Dec 16 15:07:02 PST 2014


Author: rikka
Date: Tue Dec 16 17:07:00 2014
New Revision: 224386

URL: http://llvm.org/viewvc/llvm-project?rev=224386&view=rev
Log:
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.

Modified:
    cfe/trunk/lib/Sema/SemaDecl.cpp
    cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp

Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=224386&r1=224385&r2=224386&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Tue Dec 16 17:07:00 2014
@@ -8806,12 +8806,10 @@ void Sema::AddInitializerToDecl(Decl *Re
       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 *Re
         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);

Modified: cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp?rev=224386&r1=224385&r2=224386&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp (original)
+++ cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp Tue Dec 16 17:07:00 2014
@@ -143,3 +143,7 @@ void test() {
   int x = variableX.getX();
 }
 }
+
+namespace PR21905 {
+int (*a) () = (void)Z;  // expected-error-re {{use of undeclared identifier 'Z'{{$}}}}
+}





More information about the cfe-commits mailing list