summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-03-01 04:28:32 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-03-01 04:28:32 +0000
commit947bca2cc94781cbb11cf978f9885f4c2a824631 (patch)
treeb07e6ec4b0ee4e51454fc64dfa7e06004fd3bf56 /clang
parent38eae046cf9f126c8ebda0bde52141784d1e1a74 (diff)
downloadbcm5719-llvm-947bca2cc94781cbb11cf978f9885f4c2a824631.tar.gz
bcm5719-llvm-947bca2cc94781cbb11cf978f9885f4c2a824631.zip
ObjCAtCatchStmt's ParamStmt is always a DeclStmt.
llvm-svn: 65759
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/AST/Stmt.h10
-rw-r--r--clang/lib/AST/Stmt.cpp3
-rw-r--r--clang/lib/CodeGen/CGObjCMac.cpp3
-rw-r--r--clang/lib/Sema/SemaStmt.cpp2
4 files changed, 11 insertions, 7 deletions
diff --git a/clang/include/clang/AST/Stmt.h b/clang/include/clang/AST/Stmt.h
index 696aa00ed77..c4c2291f2c0 100644
--- a/clang/include/clang/AST/Stmt.h
+++ b/clang/include/clang/AST/Stmt.h
@@ -1066,7 +1066,8 @@ private:
public:
ObjCAtCatchStmt(SourceLocation atCatchLoc, SourceLocation rparenloc,
- Stmt *catchVarStmtDecl, Stmt *atCatchStmt, Stmt *atCatchList);
+ DeclStmt *catchVarStmtDecl,
+ Stmt *atCatchStmt, Stmt *atCatchList);
const Stmt *getCatchBody() const { return SubExprs[BODY]; }
Stmt *getCatchBody() { return SubExprs[BODY]; }
@@ -1078,8 +1079,11 @@ public:
return static_cast<ObjCAtCatchStmt*>(SubExprs[NEXT_CATCH]);
}
- const Stmt *getCatchParamStmt() const { return SubExprs[SELECTOR]; }
- Stmt *getCatchParamStmt() { return SubExprs[SELECTOR]; }
+ const DeclStmt *getCatchParamStmt() const {
+ return static_cast<const DeclStmt*>(SubExprs[SELECTOR]); }
+ DeclStmt *getCatchParamStmt() {
+ return static_cast<DeclStmt*>(SubExprs[SELECTOR]);
+ }
SourceLocation getRParenLoc() const { return RParenLoc; }
diff --git a/clang/lib/AST/Stmt.cpp b/clang/lib/AST/Stmt.cpp
index b85a67e689f..e987d84c231 100644
--- a/clang/lib/AST/Stmt.cpp
+++ b/clang/lib/AST/Stmt.cpp
@@ -180,12 +180,13 @@ ObjCForCollectionStmt::ObjCForCollectionStmt(Stmt *Elem, Expr *Collect,
ObjCAtCatchStmt::ObjCAtCatchStmt(SourceLocation atCatchLoc,
SourceLocation rparenloc,
- Stmt *catchVarStmtDecl, Stmt *atCatchStmt,
+ DeclStmt *catchVarStmtDecl, Stmt *atCatchStmt,
Stmt *atCatchList)
: Stmt(ObjCAtCatchStmtClass) {
SubExprs[SELECTOR] = catchVarStmtDecl;
SubExprs[BODY] = atCatchStmt;
SubExprs[NEXT_CATCH] = NULL;
+ // FIXME: O(N^2) in number of catch blocks.
if (atCatchList) {
ObjCAtCatchStmt *AtCatchList = static_cast<ObjCAtCatchStmt*>(atCatchList);
diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp
index 549a6b9f524..26a11c90be5 100644
--- a/clang/lib/CodeGen/CGObjCMac.cpp
+++ b/clang/lib/CodeGen/CGObjCMac.cpp
@@ -1999,8 +1999,7 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
for (; CatchStmt; CatchStmt = CatchStmt->getNextCatchStmt()) {
llvm::BasicBlock *NextCatchBlock = CGF.createBasicBlock("catch");
- const DeclStmt *CatchParam =
- cast_or_null<DeclStmt>(CatchStmt->getCatchParamStmt());
+ const DeclStmt *CatchParam = CatchStmt->getCatchParamStmt();
const VarDecl *VD = 0;
const PointerType *PT = 0;
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp
index dfcb65a3532..39b211f64b4 100644
--- a/clang/lib/Sema/SemaStmt.cpp
+++ b/clang/lib/Sema/SemaStmt.cpp
@@ -964,7 +964,7 @@ Sema::ActOnObjCAtCatchStmt(SourceLocation AtLoc,
StmtArg Body, StmtArg catchList) {
Stmt *CatchList = static_cast<Stmt*>(catchList.release());
ObjCAtCatchStmt *CS = new (Context) ObjCAtCatchStmt(AtLoc, RParen,
- static_cast<Stmt*>(Parm.release()), static_cast<Stmt*>(Body.release()),
+ static_cast<DeclStmt*>(Parm.release()), static_cast<Stmt*>(Body.release()),
CatchList);
return Owned(CatchList ? CatchList : CS);
}
OpenPOWER on IntegriCloud