diff options
| author | Ted Kremenek <kremenek@apple.com> | 2007-08-27 16:39:17 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2007-08-27 16:39:17 +0000 |
| commit | d11e4608105b5cdd00d3e0f0cd83cd1765bab7f3 (patch) | |
| tree | 685a5d5fb625c4840a884f78724e054fb2386bd0 /clang/Sema/SemaChecking.cpp | |
| parent | 23bf38b8c55722a9aef71cea7155ae2ecec02676 (diff) | |
| download | bcm5719-llvm-d11e4608105b5cdd00d3e0f0cd83cd1765bab7f3.tar.gz bcm5719-llvm-d11e4608105b5cdd00d3e0f0cd83cd1765bab7f3.zip | |
Updated checker for "return of address of stack variable" to look for
implicit casts from T to T& at the topmost part of the return-value expression.
This checking may be needed within EvalAddr later on. We'll wait until
test cases show this kind of logic is necessary (as more C++ features are
implemented in clang).
llvm-svn: 41493
Diffstat (limited to 'clang/Sema/SemaChecking.cpp')
| -rw-r--r-- | clang/Sema/SemaChecking.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/clang/Sema/SemaChecking.cpp b/clang/Sema/SemaChecking.cpp index e03507b7968..c027fa794c9 100644 --- a/clang/Sema/SemaChecking.cpp +++ b/clang/Sema/SemaChecking.cpp @@ -410,10 +410,12 @@ Sema::CheckReturnStackAddr(Expr *RetValExp, QualType lhsType, } // Perform checking for stack values returned by reference. else if (lhsType->isReferenceType()) { - if (DeclRefExpr *DR = EvalVal(RetValExp)) - Diag(DR->getLocStart(), diag::warn_ret_stack_ref, - DR->getDecl()->getIdentifier()->getName(), - RetValExp->getSourceRange()); + // Check for an implicit cast to a reference. + if (ImplicitCastExpr *I = dyn_cast<ImplicitCastExpr>(RetValExp)) + if (DeclRefExpr *DR = EvalVal(I->getSubExpr())) + Diag(DR->getLocStart(), diag::warn_ret_stack_ref, + DR->getDecl()->getIdentifier()->getName(), + RetValExp->getSourceRange()); } } |

