aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-low.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2012-11-23 17:04:03 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2012-11-23 17:04:03 +0100
commit88cd0e88e36515f01b6f1e398358dc11cc06c389 (patch)
tree756c94d3f1786802105c930a7ed81bf4e39c9a8d /gcc/gimple-low.c
parent340ef734b8072d2b58f946bb69170f2e535813d7 (diff)
downloadgcc-88cd0e88e36515f01b6f1e398358dc11cc06c389.zip
gcc-88cd0e88e36515f01b6f1e398358dc11cc06c389.tar.gz
gcc-88cd0e88e36515f01b6f1e398358dc11cc06c389.tar.bz2
re PR c++/54046 (wrong control reaches end of non-void function for switch case with throw and default)
PR c++/54046 * Makefile.in (gimple-low.o): Depend on langhooks.h. * gimple-low.c: Include langhooks.c. (block_may_fallthru): Handle TARGET_EXPR and ERROR_MARK, by default call lang_hooks.block_may_fallthru. * langhooks.h (struct lang_hooks): Add block_may_fallthru langhook. * langhooks-def.h (LANG_HOOKS_BLOCK_MAY_FALLTHRU): Define. (LANG_HOOKS_INITIALIZER): Use it. * cp-objcp-common.h (LANG_HOOKS_BLOCK_MAY_FALLTHRU): Redefine. * cp-objcp-common.c (cxx_block_may_fallthru): New function. * cp-tree.h (cxx_block_may_fallthru): New prototype. * g++.dg/warn/Wreturn-type-8.C: New test. From-SVN: r193762
Diffstat (limited to 'gcc/gimple-low.c')
-rw-r--r--gcc/gimple-low.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/gimple-low.c b/gcc/gimple-low.c
index e26d91e..282dba1 100644
--- a/gcc/gimple-low.c
+++ b/gcc/gimple-low.c
@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see
#include "function.h"
#include "diagnostic-core.h"
#include "tree-pass.h"
+#include "langhooks.h"
/* The differences between High GIMPLE and Low GIMPLE are the
following:
@@ -739,8 +740,14 @@ block_may_fallthru (const_tree block)
case CLEANUP_POINT_EXPR:
return block_may_fallthru (TREE_OPERAND (stmt, 0));
- default:
+ case TARGET_EXPR:
+ return block_may_fallthru (TREE_OPERAND (stmt, 1));
+
+ case ERROR_MARK:
return true;
+
+ default:
+ return lang_hooks.block_may_fallthru (stmt);
}
}