diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-03-01 04:28:32 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-03-01 04:28:32 +0000 |
commit | 947bca2cc94781cbb11cf978f9885f4c2a824631 (patch) | |
tree | b07e6ec4b0ee4e51454fc64dfa7e06004fd3bf56 /clang | |
parent | 38eae046cf9f126c8ebda0bde52141784d1e1a74 (diff) | |
download | bcm5719-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.h | 10 | ||||
-rw-r--r-- | clang/lib/AST/Stmt.cpp | 3 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGObjCMac.cpp | 3 | ||||
-rw-r--r-- | clang/lib/Sema/SemaStmt.cpp | 2 |
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); } |