Diagnose use of incomplete type on method argument type of

method definitions instead of crashing in code gen.
Fixes radar 8421082.

llvm-svn: 114223
This commit is contained in:
Fariborz Jahanian 2010-09-17 22:07:07 +00:00
parent b08377e0db
commit b3e8712a14
2 changed files with 21 additions and 1 deletions

View File

@ -55,9 +55,15 @@ void Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, Decl *D) {
// Introduce all of the other parameters into this scope.
for (ObjCMethodDecl::param_iterator PI = MDecl->param_begin(),
E = MDecl->param_end(); PI != E; ++PI)
E = MDecl->param_end(); PI != E; ++PI) {
ParmVarDecl *Param = (*PI);
if (!Param->isInvalidDecl() &&
RequireCompleteType(Param->getLocation(), Param->getType(),
diag::err_typecheck_decl_incomplete_type))
Param->setInvalidDecl();
if ((*PI)->getIdentifier())
PushOnScopeChains(*PI, FnBodyScope);
}
}
Decl *Sema::

View File

@ -28,3 +28,17 @@ void f0(foo *a0) {
extern void g0(int x, ...);
g0(1, *(foo*)0); // expected-error {{cannot pass object with interface type 'foo' by-value through variadic function}}
}
// rdar://8421082
enum bogus; // expected-note {{forward declaration of 'enum bogus'}}
@interface fee {
}
- (void)crashMe:(enum bogus)p;
@end
@implementation fee
- (void)crashMe:(enum bogus)p { // expected-error {{variable has incomplete type 'enum bogus'}}
}
@end