From 23c0104bb8ad04f06804bd399cbc1f5f962b356c Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Fri, 17 Sep 2010 22:07:07 +0000 Subject: [PATCH] Diagnose use of incomplete type on method argument type of method definitions instead of crashing in code gen. Fixes radar 8421082. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@114223 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDeclObjC.cpp | 8 +++++++- test/SemaObjC/method-bad-param.m | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index a6902a3e39..98c676b5cf 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -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:: diff --git a/test/SemaObjC/method-bad-param.m b/test/SemaObjC/method-bad-param.m index 324ed342f9..388e44724d 100644 --- a/test/SemaObjC/method-bad-param.m +++ b/test/SemaObjC/method-bad-param.m @@ -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 + -- 2.40.0