aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven Bosscher <steven@gcc.gnu.org>2003-09-06 13:34:00 +0000
committerSteven Bosscher <steven@gcc.gnu.org>2003-09-06 13:34:00 +0000
commit03845b47e6a3519de3be01030abdaa20e3595983 (patch)
tree95933801fe9d7d8c2366530070824dbcb792e031 /gcc
parentb92bc2a028982a808589a187381095c158182446 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/c-decl.c14
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/20030906-1.c21
-rw-r--r--gcc/testsuite/gcc.dg/20030906-2.c21
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;
+}