diff options
author | Chris Lattner <sabre@nondot.org> | 2009-10-30 04:01:58 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-10-30 04:01:58 +0000 |
commit | 252d36e74caaa700886905d5a2a52359e485de3d (patch) | |
tree | ef41d1173e80f4587173ec5de556ee3eedeff846 /clang/lib/Sema/SemaChecking.cpp | |
parent | b0cad70c24d346cb2af57bfb30bc557739a4df32 (diff) | |
download | bcm5719-llvm-252d36e74caaa700886905d5a2a52359e485de3d.tar.gz bcm5719-llvm-252d36e74caaa700886905d5a2a52359e485de3d.zip |
warn about returning the address of a label.
llvm-svn: 85576
Diffstat (limited to 'clang/lib/Sema/SemaChecking.cpp')
-rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index b7ccedec709..38b6ebeefab 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -1272,10 +1272,15 @@ Sema::CheckReturnStackAddr(Expr *RetValExp, QualType lhsType, // Skip over implicit cast expressions when checking for block expressions. RetValExp = RetValExp->IgnoreParenCasts(); - if (BlockExpr *C = dyn_cast_or_null<BlockExpr>(RetValExp)) + if (BlockExpr *C = dyn_cast<BlockExpr>(RetValExp)) if (C->hasBlockDeclRefExprs()) Diag(C->getLocStart(), diag::err_ret_local_block) << C->getSourceRange(); + + if (AddrLabelExpr *ALE = dyn_cast<AddrLabelExpr>(RetValExp)) + Diag(ALE->getLocStart(), diag::warn_ret_addr_label) + << ALE->getSourceRange(); + } else if (lhsType->isReferenceType()) { // Perform checking for stack values returned by reference. // Check for a reference to the stack |