зеркало из https://github.com/microsoft/clang-1.git
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
This commit is contained in:
Родитель
32fca722dd
Коммит
7f0f5dce3a
|
@ -798,6 +798,8 @@ DIAG(err_block_return_missing_expr, ERROR,
|
|||
"non-void block should return a value")
|
||||
DIAG(err_block_with_return_type_requires_args, ERROR,
|
||||
"block with explicit return type requires argument list")
|
||||
DIAG(err_func_def_incomplete_result, ERROR,
|
||||
"result type for function definition cannot be incomplete")
|
||||
|
||||
// Expressions.
|
||||
DIAG(ext_sizeof_function_type, EXTENSION,
|
||||
|
|
|
@ -2453,6 +2453,14 @@ Sema::DeclTy *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, DeclTy *D) {
|
|||
}
|
||||
}
|
||||
|
||||
// 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
|
||||
|
|
|
@ -58,3 +58,5 @@ void f1static() {
|
|||
static void f2static(int); // expected-error{{function declared in block scope cannot have 'static' storage class}}
|
||||
register void f2register(int); // expected-error{{illegal storage class on function}}
|
||||
}
|
||||
|
||||
struct incomplete_test a(void) {} // expected-error{{result type for function definition cannot be incomplete}}
|
||||
|
|
Загрузка…
Ссылка в новой задаче