diff options
Diffstat (limited to 'Sema/SemaChecking.cpp')
-rw-r--r-- | Sema/SemaChecking.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/Sema/SemaChecking.cpp b/Sema/SemaChecking.cpp index e03507b796..c027fa794c 100644 --- a/Sema/SemaChecking.cpp +++ b/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()); } } |