diff options
author | Steven Bosscher <steven@gcc.gnu.org> | 2003-09-06 13:34:00 +0000 |
---|---|---|
committer | Steven Bosscher <steven@gcc.gnu.org> | 2003-09-06 13:34:00 +0000 |
commit | 03845b47e6a3519de3be01030abdaa20e3595983 (patch) | |
tree | 95933801fe9d7d8c2366530070824dbcb792e031 /gcc | |
parent | b92bc2a028982a808589a187381095c158182446 (diff) | |
download | gcc-03845b47e6a3519de3be01030abdaa20e3595983.zip gcc-03845b47e6a3519de3be01030abdaa20e3595983.tar.gz gcc-03845b47e6a3519de3be01030abdaa20e3595983.tar.bz2 |
re PR c/9862 (spurious warnings with -W -finline-functions)
PR c/9862
* c-decl.c (c_expand_body_1): Move return warning from here...
(finish_function): ...to here.
* gcc.dg/20030906-1.c: New test.
* gcc.dg/20030906-2.c: Likewise.
From-SVN: r71134
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-decl.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/20030906-1.c | 21 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/20030906-2.c | 21 |
5 files changed, 61 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0d57ffd..8d7e360 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-09-06 Steven Bosscher <steven@gcc.gnu.org> + + PR c/9862 + * c-decl.c (c_expand_body_1): Move return warning from here... + (finish_function): ...to here. + 2003-09-05 Geoffrey Keating <geoffk@apple.com> * config/rs6000/darwin.h (PREFERRED_RELOAD_CLASS): Always return diff --git a/gcc/c-decl.c b/gcc/c-decl.c index f16fe7c..f4896f3 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -6129,6 +6129,13 @@ finish_function () && DECL_INLINE (fndecl)) warning ("no return statement in function returning non-void"); + /* With just -Wextra, complain only if function returns both with + and without a value. */ + if (extra_warnings + && current_function_returns_value + && current_function_returns_null) + warning ("this function may return with or without a value"); + /* We're leaving the context of this function, so zap cfun. It's still in DECL_SAVED_INSNS, and we'll restore it in tree_rest_of_compilation. */ cfun = NULL; @@ -6178,13 +6185,6 @@ c_expand_body_1 (tree fndecl, int nested_p) tree_rest_of_compilation (fndecl); - /* With just -Wextra, complain only if function returns both with - and without a value. */ - if (extra_warnings - && current_function_returns_value - && current_function_returns_null) - warning ("this function may return with or without a value"); - if (DECL_STATIC_CONSTRUCTOR (fndecl)) { if (targetm.have_ctors_dtors) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d28f2d1..65f499d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2003-09-06 Steven Bosscher <steven@gcc.gnu.org> + + PR c/9862 + * gcc.dg/20030906-1.c: New test. + * gcc.dg/20030906-2.c: Likewise. + 2003-09-06 Nathan Sidwell <nathan@codesourcery.com> PR c++/12167 diff --git a/gcc/testsuite/gcc.dg/20030906-1.c b/gcc/testsuite/gcc.dg/20030906-1.c new file mode 100644 index 0000000..57d80f0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/20030906-1.c @@ -0,0 +1,21 @@ +/* Bug 9862 -- Spurious warnings with -finline-functions. + Copyright (C) 2003 Free Software Foundation Inc. */ + +/* { dg-do compile } */ +/* { dg-options "-O -finline-functions -Wextra" } */ + +extern int i; +extern int foo (void); +extern int bar (void); + +int foo (void) +{ + if( i ) return 0; + else return 1; +} /* { dg-bogus "may return with or without a value" } */ + +int bar (void) +{ + if( i ) return; + else return 1; +} /* { dg-warning "may return with or without a value" } */ diff --git a/gcc/testsuite/gcc.dg/20030906-2.c b/gcc/testsuite/gcc.dg/20030906-2.c new file mode 100644 index 0000000..8f3d378 --- /dev/null +++ b/gcc/testsuite/gcc.dg/20030906-2.c @@ -0,0 +1,21 @@ +/* Bug 9862 -- Spurious warnings with -finline-functions. + Copyright (C) 2003 Free Software Foundation Inc. */ + +/* { dg-do compile } */ +/* { dg-options "-O -finline-functions -Wextra" } */ + +extern int i; +extern int foo (void); +extern int bar (void); + +int foo (void) +{ + if( i ) return; + else return 1; +} /* { dg-warning "may return with or without a value" } */ + +int bar (void) +{ + if( i ) return 0; + else return 1; +} |