This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/36254] wrong "control reaches end of non-void function" warning
- From: "jakub at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 27 Oct 2008 12:23:02 -0000
- Subject: [Bug c++/36254] wrong "control reaches end of non-void function" warning
- References: <bug-36254-7667@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #8 from jakub at gcc dot gnu dot org 2008-10-27 12:23 -------
The problem is that during gimplification shortcut_cond_expr doesn't detect
that then_ can't fallthru, if it detected that, then no jump around the else
block would be added and control reaches end of non-void function wouldn't
be diagnosed.
shortcut_cond_expr calls block_may_fallthru, unfortunately in C++ then then_
block isn't something block_may_fallthru handles - it is IF_STMT in the first
testcase, which is a C++ specific tree.
To fix this, either we'd need to do short cut on tuples (where
gimple_seq_may_fallthru handles all the gimple codes correctly), but I guess
that's quite hard, or we'd need some flag with which shortcut_cond_expr would
mark the maybe not needed GOTO_EXPR + LABEL_EXPR and during gimplification
see if sequence before so marked GOTO_EXPR might fallthru and if not, don't add
the GIMPLE_GOTO nor GIMPLE_LABEL. Or block_may_fallthru would need to call a
langhook to handle unknown cases and each frontend would need to say what can
and what can't fallthru from the lang specific tree codes.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36254