Package: g++ Version: 4.0.0-2 Severity: normal Hi, I've found a regression in g++-4.0 when optimization is turned on. Compile the attached example source code with:
g++ -Wall -O3 -c bug.cc g++ produces the warning: bug.cc:9: warning: control may reach end of non-void function 'char* f(char*)' being inlined This is wrong, as should be obvious, since every possible control path in f() either leads to a return or a throw. g++ 3.x correctly analyses the code and does not generate a warning. The attached file is almost minimal; it seems to depend on the specific if condition in f() and the fact that pointers are being used. I haven't found a way to further simplify the case without making the error go away. This particular case happens only with -O3, but I've also found another case that happens with -O1 (same warning message). It's embedded in some rather involved code, so I'll forward it to this bug later after I reduce it to a minimal test case. T -- I'm still trying to find a pun for "punishment"...
char *f(char *cp) { if (!cp || *cp=='\0') { throw "error"; } else { return 0; } } char *h(char *cp) { return f(cp); }