summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema
diff options
context:
space:
mode:
authorSteve Naroff <snaroff@apple.com>2009-03-03 20:59:06 +0000
committerSteve Naroff <snaroff@apple.com>2009-03-03 20:59:06 +0000
commit39d6fba0d630a4895a7e227b5ea52992cbcd13b3 (patch)
treeb7756efcc8b382f8f551f71a1b77f696fdd0eebe /clang/lib/Sema
parent7956bba54578f83ab666d8d7087d44e6692a39d5 (diff)
downloadbcm5719-llvm-39d6fba0d630a4895a7e227b5ea52992cbcd13b3.tar.gz
bcm5719-llvm-39d6fba0d630a4895a7e227b5ea52992cbcd13b3.zip
Fix <rdar://problem/6632061> [sema] non object types should not be allowed in @catch statements.
llvm-svn: 65968
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r--clang/lib/Sema/SemaStmt.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp
index 49bd85a9e7e..7e7edbe51ad 100644
--- a/clang/lib/Sema/SemaStmt.cpp
+++ b/clang/lib/Sema/SemaStmt.cpp
@@ -965,9 +965,15 @@ Sema::ActOnObjCAtCatchStmt(SourceLocation AtLoc,
SourceLocation RParen, DeclTy *Parm,
StmtArg Body, StmtArg catchList) {
Stmt *CatchList = static_cast<Stmt*>(catchList.release());
+ ParmVarDecl *PVD = static_cast<ParmVarDecl*>(Parm);
+
+ // PVD == 0 implies @catch(...).
+ if (PVD && !Context.isObjCObjectPointerType(PVD->getType()))
+ return StmtError(Diag(PVD->getLocation(),
+ diag::err_catch_param_not_objc_type));
+
ObjCAtCatchStmt *CS = new (Context) ObjCAtCatchStmt(AtLoc, RParen,
- static_cast<ParmVarDecl*>(Parm), static_cast<Stmt*>(Body.release()),
- CatchList);
+ PVD, static_cast<Stmt*>(Body.release()), CatchList);
return Owned(CatchList ? CatchList : CS);
}
OpenPOWER on IntegriCloud