Do typechecking and codegen for K&R-style function declarations 
correctly.  Not a regression, but made more obvious by my recent fix 
which made function type compatibility checking a bit more strict.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55339 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 066969c..ad83908 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -690,8 +690,7 @@
 
     // Copy the parameter declarations from the declarator D to
     // the function declaration NewFD, if they are available.
-    if (D.getNumTypeObjects() > 0 &&
-        D.getTypeObject(0).Fun.hasPrototype) {
+    if (D.getNumTypeObjects() > 0) {
       DeclaratorChunk::FunctionTypeInfo &FTI = D.getTypeObject(0).Fun;
 
       // Create Decl objects for each parameter, adding them to the
@@ -716,7 +715,7 @@
           Diag(Param->getLocation(), diag::ext_param_typedef_of_void);
         }
 
-      } else {
+      } else if (FTI.NumArgs > 0 && FTI.ArgInfo[0].Param != 0) {
         for (unsigned i = 0, e = FTI.NumArgs; i != e; ++i)
           Params.push_back((ParmVarDecl *)FTI.ArgInfo[i].Param);
       }
@@ -1540,11 +1539,6 @@
         FTI.ArgInfo[i].Param = ActOnParamDeclarator(FnBodyScope, ParamD);
       }
     }
-
-    // Since this is a function definition, act as though we have information
-    // about the arguments.
-    if (FTI.NumArgs)
-      FTI.hasPrototype = true;
   } else {
     // FIXME: Diagnose arguments without names in C. 
   }