diff options
Diffstat (limited to 'lib/CodeGen/CGDecl.cpp')
-rw-r--r-- | lib/CodeGen/CGDecl.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp index 6be6fcedd3..d07347963d 100644 --- a/lib/CodeGen/CGDecl.cpp +++ b/lib/CodeGen/CGDecl.cpp @@ -875,8 +875,15 @@ static bool isCapturedBy(const VarDecl &var, const Expr *e) { return false; } - if (const StmtExpr *SE = dyn_cast<StmtExpr>(e)) - e = cast<Expr>(SE->getSubStmt()->body_back()); + if (const StmtExpr *SE = dyn_cast<StmtExpr>(e)) { + const CompoundStmt *CS = SE->getSubStmt(); + for (CompoundStmt::const_body_iterator BI = CS->body_begin(), BE = CS->body_end() + ;BI != BE; ++BI) + if (Expr *E = dyn_cast<Expr>((*BI))) + if (isCapturedBy(var, E)) + return true; + return false; + } for (Stmt::const_child_range children = e->children(); children; ++children) if (isCapturedBy(var, cast<Expr>(*children))) |