forked from OSchip/llvm-project
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:
parent
b08377e0db
commit
b3e8712a14
|
@ -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::
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue