diff options
author | Jakub Jelinek <jakub@redhat.com> | 2012-11-23 17:04:03 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-11-23 17:04:03 +0100 |
commit | 88cd0e88e36515f01b6f1e398358dc11cc06c389 (patch) | |
tree | 756c94d3f1786802105c930a7ed81bf4e39c9a8d /gcc/gimple-low.c | |
parent | 340ef734b8072d2b58f946bb69170f2e535813d7 (diff) | |
download | gcc-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.c | 9 |
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); } } |