This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: optimization/7189: gcc -O2 -Wall does not print ``controlreaches end of non-void function'' warning


http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7189

This is a bug that happens when sibcall optimizations are performed.  It
does not matter what other optimizations are enabled. When you do 
gcc -O0 -Wall -foptimize-sibling-calls, the warning about the non-void
function not returning anything doesn't show up.  The test case in the
PR is: 

extern void foo(void);
int bar(void) { foo(); }

Without sibcall optimization, the warning is issued.  The warning always
shows up with gcc 2.95.3, so technically one could argue it's a
regression... 

The problem seems to be that after the sibcall optimizations, the cfg
cleanup after jump optimizations also cleans up the clobber INSN for the
function result (output for -c -Wall -foptimize-sibling-calls, todays
mainline CVS): 

--- c7189.c.01.sibling  Thu Feb 13 16:52:05 2003 
+++ c7189.c.03.jump     Thu Feb 13 16:52:05 2003 
@@ -1,14 +1,29 @@ 
--- pass specific dump info cut out --- 
@@ -27,19 +42,4 @@ 

(barrier 11 10 14) 

-(note 14 11 23 NOTE_INSN_FUNCTION_END) 
- 
-(note 23 14 18 1 [bb 1] NOTE_INSN_BASIC_BLOCK) 
- 
-(insn 18 23 19 1 (nil) (clobber (reg/i:SI 0 eax)) -1 (nil) 
-    (nil)) 
-    
-(insn 19 18 17 1 (nil) (clobber (reg:SI 58 [ <result> ])) -1 (nil) 
-    (nil)) 
-    
-(insn 17 19 20 1 (nil) (set (reg/i:SI 0 eax) 
-        (reg:SI 58 [ <result> ])) -1 (nil) 
-    (nil)) 
- 
-(insn 20 17 0 1 (nil) (use (reg/i:SI 0 eax)) -1 (nil) 
-    (nil)) 
+(note 14 11 0 NOTE_INSN_FUNCTION_END) 

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?

Greetz
Steven


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]