mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-13 02:21:45 +00:00
Accesses to a collection within a fast enumeration 'for' statement constitute a 'use'.
llvm-svn: 59075
This commit is contained in:
parent
38c9a14a88
commit
3b4e1d5cc6
@ -177,17 +177,23 @@ void TransferFuncs::VisitBinaryOperator(BinaryOperator* B) {
|
||||
}
|
||||
|
||||
void TransferFuncs::VisitObjCForCollectionStmt(ObjCForCollectionStmt* S) {
|
||||
Stmt* Element = S->getElement();
|
||||
|
||||
if (DeclStmt* DS = dyn_cast<DeclStmt>(Element)) {
|
||||
VisitDeclStmt(DS);
|
||||
return;
|
||||
}
|
||||
// This represents a 'use' of the collection.
|
||||
Visit(S->getCollection());
|
||||
|
||||
// This represents a 'kill' for the variable.
|
||||
DeclRefExpr* DR = cast<DeclRefExpr>(Element);
|
||||
LiveState(cast<VarDecl>(DR->getDecl()), AD) = Dead;
|
||||
if (AD.Observer) { AD.Observer->ObserverKill(DR); }
|
||||
Stmt* Element = S->getElement();
|
||||
DeclRefExpr *DR;
|
||||
VarDecl* VD = 0;
|
||||
|
||||
if (DeclStmt* DS = dyn_cast<DeclStmt>(Element))
|
||||
VD = cast<VarDecl>(DS->getSolitaryDecl());
|
||||
else {
|
||||
DR = cast<DeclRefExpr>(Element);
|
||||
VD = cast<VarDecl>(DR->getDecl());
|
||||
}
|
||||
|
||||
LiveState(VD, AD) = Dead;
|
||||
if (AD.Observer && DR) { AD.Observer->ObserverKill(DR); }
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user