summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaChecking.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-10-30 04:01:58 +0000
committerChris Lattner <sabre@nondot.org>2009-10-30 04:01:58 +0000
commit252d36e74caaa700886905d5a2a52359e485de3d (patch)
treeef41d1173e80f4587173ec5de556ee3eedeff846 /clang/lib/Sema/SemaChecking.cpp
parentb0cad70c24d346cb2af57bfb30bc557739a4df32 (diff)
downloadbcm5719-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.cpp7
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
OpenPOWER on IntegriCloud