From: Ted Kremenek Date: Wed, 12 Nov 2008 21:58:46 +0000 (+0000) Subject: Update CFGStmtVisitor to recognize that ObjCForCollectionStmts are special block... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bfcb712627b9346ab92880d9075896dcc7700ac2;p=clang Update CFGStmtVisitor to recognize that ObjCForCollectionStmts are special block-level "expressions". git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59176 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Analysis/Visitors/CFGStmtVisitor.h b/include/clang/Analysis/Visitors/CFGStmtVisitor.h index 5c3b283944..f42bbde8f1 100644 --- a/include/clang/Analysis/Visitors/CFGStmtVisitor.h +++ b/include/clang/Analysis/Visitors/CFGStmtVisitor.h @@ -68,7 +68,8 @@ public: DISPATCH_CASE(StmtExpr) DISPATCH_CASE(ConditionalOperator) - + DISPATCH_CASE(ObjCForCollectionStmt) + case Stmt::BinaryOperatorClass: { BinaryOperator* B = cast(S); if (B->isLogicalOp()) @@ -90,6 +91,10 @@ public: DEFAULT_BLOCKSTMT_VISIT(StmtExpr) DEFAULT_BLOCKSTMT_VISIT(ConditionalOperator) + RetTy BlockStmt_VisitObjCForCollectionStmt(ObjCForCollectionStmt* S) { + return static_cast(this)->BlockStmt_VisitStmt(S); + } + RetTy BlockStmt_VisitImplicitControlFlowExpr(Expr* E) { return static_cast(this)->BlockStmt_VisitExpr(E); } diff --git a/lib/Analysis/LiveVariables.cpp b/lib/Analysis/LiveVariables.cpp index 9bbbf55d6e..4432ac0a53 100644 --- a/lib/Analysis/LiveVariables.cpp +++ b/lib/Analysis/LiveVariables.cpp @@ -121,7 +121,7 @@ public: void VisitBinaryOperator(BinaryOperator* B); void VisitAssign(BinaryOperator* B); void VisitDeclStmt(DeclStmt* DS); - void VisitObjCForCollectionStmt(ObjCForCollectionStmt* S); + void BlockStmt_VisitObjCForCollectionStmt(ObjCForCollectionStmt* S); void VisitUnaryOperator(UnaryOperator* U); void Visit(Stmt *S); void VisitTerminator(CFGBlock* B); @@ -176,7 +176,9 @@ void TransferFuncs::VisitBinaryOperator(BinaryOperator* B) { else VisitStmt(B); } -void TransferFuncs::VisitObjCForCollectionStmt(ObjCForCollectionStmt* S) { +void +TransferFuncs::BlockStmt_VisitObjCForCollectionStmt(ObjCForCollectionStmt* S) { + // This represents a 'use' of the collection. Visit(S->getCollection()); diff --git a/lib/Analysis/UninitializedValues.cpp b/lib/Analysis/UninitializedValues.cpp index 3a84b2861a..0e4a387620 100644 --- a/lib/Analysis/UninitializedValues.cpp +++ b/lib/Analysis/UninitializedValues.cpp @@ -75,7 +75,7 @@ public: bool VisitCallExpr(CallExpr* C); bool VisitDeclStmt(DeclStmt* D); bool VisitConditionalOperator(ConditionalOperator* C); - bool VisitObjCForCollectionStmt(ObjCForCollectionStmt* S); + bool BlockStmt_VisitObjCForCollectionStmt(ObjCForCollectionStmt* S); bool Visit(Stmt *S); bool BlockStmt_VisitExpr(Expr* E); @@ -180,7 +180,8 @@ bool TransferFuncs::VisitUnaryOperator(UnaryOperator* U) { return Visit(U->getSubExpr()); } -bool TransferFuncs::VisitObjCForCollectionStmt(ObjCForCollectionStmt* S) { +bool +TransferFuncs::BlockStmt_VisitObjCForCollectionStmt(ObjCForCollectionStmt* S) { // This represents a use of the 'collection' bool x = Visit(S->getCollection());