]> granicus.if.org Git - clang/commitdiff
Delay complete-type checking for arguments to no-prototype functions
authorDouglas Gregor <dgregor@apple.com>
Tue, 26 Oct 2010 05:45:40 +0000 (05:45 +0000)
committerDouglas Gregor <dgregor@apple.com>
Tue, 26 Oct 2010 05:45:40 +0000 (05:45 +0000)
until after we've checked/promoted the argument. Hopefully fixes the
Emacs regression due to my recent change that expanded type-checking
in the presence of K&R function definitions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117353 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExpr.cpp

index 0510bd2ed86b3a694170a721e967552edcf070ab..f8c7a90f8f4944e45c9a40df86eb0d20eaf3060d 100644 (file)
@@ -3858,12 +3858,6 @@ Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl,
       Expr *Arg = Args[i];
 
       if (Proto && i < Proto->getNumArgs()) {
-        if (RequireCompleteType(Arg->getSourceRange().getBegin(),
-                                Arg->getType(),
-                                PDiag(diag::err_call_incomplete_argument)
-                                  << Arg->getSourceRange()))
-          return ExprError();
-
         InitializedEntity Entity
           = InitializedEntity::InitializeParameter(Context, 
                                                    Proto->getArgType(i));
@@ -3877,14 +3871,14 @@ Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl,
 
       } else {
         DefaultArgumentPromotion(Arg);
-
-        if (RequireCompleteType(Arg->getSourceRange().getBegin(),
-                                Arg->getType(),
-                                PDiag(diag::err_call_incomplete_argument)
-                                  << Arg->getSourceRange()))
-          return ExprError();
       }
       
+      if (RequireCompleteType(Arg->getSourceRange().getBegin(),
+                              Arg->getType(),
+                              PDiag(diag::err_call_incomplete_argument)
+                                << Arg->getSourceRange()))
+        return ExprError();
+
       TheCall->setArg(i, Arg);
     }
   }