Check that the return type for function definitions is complete.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66027 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 3880792..e1b27c6 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -2453,6 +2453,14 @@
     }
   }
 
+  // The return type of a function definition must be complete
+  // (C99 6.9.1p3)
+  if (FD->getResultType()->isIncompleteType() &&
+      !FD->getResultType()->isVoidType()) {
+    Diag(FD->getLocation(), diag::err_func_def_incomplete_result) << FD;
+    FD->setInvalidDecl();
+  }
+
   PushDeclContext(FnBodyScope, FD);
 
   // Check the validity of our function parameters