aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/semantics.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-09-06 22:07:13 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2005-09-06 22:07:13 +0200
commit0c9b182b9f454fb2d5f57b17d22e860490c3c68f (patch)
tree26cc76717919b282649ef97b4afa9424d824fe86 /gcc/cp/semantics.c
parent73109af7527b8c42510b1144cc2118a175960903 (diff)
downloadgcc-0c9b182b9f454fb2d5f57b17d22e860490c3c68f.zip
gcc-0c9b182b9f454fb2d5f57b17d22e860490c3c68f.tar.gz
gcc-0c9b182b9f454fb2d5f57b17d22e860490c3c68f.tar.bz2
re PR c/23075 (Redundant / bogus warning)
PR c/23075 * c-typeck.c (c_finish_return): Set TREE_NO_WARNING on RETURN_EXPR if "return with no value, in function returning non-void" warning has been issued. * tree-cfg.c (execute_warn_function_return): Don't look at RETURN_EXPRs with TREE_NO_WARNING set. * typeck.c (check_return_expr): Add no_warning argument. Set *no_warning to true if "return-statement with no value, in function returning" warning has been issued. * cp-tree.h (check_return_expr): Adjust prototype. * semantics.c (finish_return_stmt): Set TREE_NO_WARNING if check_return_expr set *no_warning to true. * gcc.dg/pr23075.c: New test. * g++.dg/warn/pr23075.C: New test. From-SVN: r103967
Diffstat (limited to 'gcc/cp/semantics.c')
-rw-r--r--gcc/cp/semantics.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 074a7fd..c7fd1bb 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -743,8 +743,9 @@ tree
finish_return_stmt (tree expr)
{
tree r;
+ bool no_warning;
- expr = check_return_expr (expr);
+ expr = check_return_expr (expr, &no_warning);
if (!processing_template_decl)
{
if (DECL_DESTRUCTOR_P (current_function_decl)
@@ -760,6 +761,7 @@ finish_return_stmt (tree expr)
}
r = build_stmt (RETURN_EXPR, expr);
+ TREE_NO_WARNING (r) |= no_warning;
r = maybe_cleanup_point_expr_void (r);
r = add_stmt (r);
finish_stmt ();