diff options
author | Ted Kremenek <kremenek@apple.com> | 2011-11-05 07:34:28 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2011-11-05 07:34:28 +0000 |
commit | 977e30d1c4343abe7b29aa85f699b217e38caa19 (patch) | |
tree | 17d172e9655883a3c66de9db9064f31767f0aaa8 /clang/lib/Analysis/LiveVariables.cpp | |
parent | c843fd2afb257859c2a0744d06be1594b74e8ea2 (diff) | |
download | bcm5719-llvm-977e30d1c4343abe7b29aa85f699b217e38caa19.tar.gz bcm5719-llvm-977e30d1c4343abe7b29aa85f699b217e38caa19.zip |
Tweak LookThroughStmt() in LiveVariables to properly look through alternativing ParenExprs and OpaqueValueExprs. Thanks to Anna and Argiris for iterating on this function. My original patch embarssingly didn't even pass the Clang tests.
llvm-svn: 143797
Diffstat (limited to 'clang/lib/Analysis/LiveVariables.cpp')
-rw-r--r-- | clang/lib/Analysis/LiveVariables.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/clang/lib/Analysis/LiveVariables.cpp b/clang/lib/Analysis/LiveVariables.cpp index 69b09330426..cd6f09f2a74 100644 --- a/clang/lib/Analysis/LiveVariables.cpp +++ b/clang/lib/Analysis/LiveVariables.cpp @@ -232,10 +232,15 @@ static const VariableArrayType *FindVA(QualType Ty) { } static const Stmt *LookThroughStmt(const Stmt *S) { - if (const OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(S)) - return OVE->getSourceExpr()->IgnoreParens(); - if (const Expr *E = dyn_cast<Expr>(S)) - return E->IgnoreParens(); + while (S) { + if (const Expr *Ex = dyn_cast<Expr>(S)) + S = Ex->IgnoreParens(); + if (const OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(S)) { + S = OVE->getSourceExpr(); + continue; + } + break; + } return S; } |