This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: optimization/7189: gcc -O2 -Wall does not print ``control reaches end of non-void function'' warning
- From: Richard Henderson <rth at redhat dot com>
- To: Steven Bosscher <s dot bosscher at student dot tudelft dot nl>
- Cc: gcc-gnats at gcc dot gnu dot org, am-99173 at konami dot com, gcc-bugs at gcc dot gnu dot org, nobody at gcc dot gnu dot org, gcc-prs at gcc dot gnu dot org
- Date: Fri, 28 Feb 2003 16:29:13 -0800
- Subject: Re: optimization/7189: gcc -O2 -Wall does not print ``control reaches end of non-void function'' warning
- References: <1045170255.31261.7.camel@steven>
On Thu, Feb 13, 2003 at 10:04:14PM +0100, Steven Bosscher wrote:
> One way to "fix" this bug is to move check_function_return_warnings() up
> to before sibling call optimization in toplev.c, but maybe there's a
> more correct fix?
I don't really like doing this earlier. To get correct results
we'd have to do an extra DCE pass, which seems wasteful wrt
compile-time for a warning.
We should be able to detect this by looking at (1) predecessors
of the EXIT block, (2) noticing that they end in a call_insn
with SIBLING_CALL_P set, and (3) noticing that the return value
embedded in the call_insn is correct for the return value of
the function.
r~