diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2019-07-18 08:22:50 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2019-07-18 08:22:50 +0000 |
commit | d119bf79862015d4ba3c7f8774835c216c9a26ed (patch) | |
tree | db4fe14a0e4fcf55af28f562d8bf0dc1ed398f2e /gcc | |
parent | d1f2e4c1027b826cf3ba353e86c37589f63f8efe (diff) | |
download | gcc-d119bf79862015d4ba3c7f8774835c216c9a26ed.zip gcc-d119bf79862015d4ba3c7f8774835c216c9a26ed.tar.gz gcc-d119bf79862015d4ba3c7f8774835c216c9a26ed.tar.bz2 |
Fix -Wreturn-type for static naked functions in C
This patch extends the fix for PR53633 to include static functions,
which were giving a bogus -Wreturn-type warning for C but not for C++.
2019-07-18 Richard Sandiford <richard.sandiford@arm.com>
gcc/c/
PR c/53633
* c-decl.c (finish_function): Check targetm.warn_func_return
before issuing a -Wreturn-type warning.
gcc/testsuite/
* c-c++-common/pr53633-2.c: New test.
From-SVN: r273568
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/c/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c/c-decl.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/pr53633-2.c | 19 |
4 files changed, 30 insertions, 0 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 927fa91..ee0c559 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,9 @@ +2019-07-18 Richard Sandiford <richard.sandiford@arm.com> + + PR c/53633 + * c-decl.c (finish_function): Check targetm.warn_func_return + before issuing a -Wreturn-type warning. + 2019-07-12 Alexandre Oliva <oliva@adacore.com> * gimple-parser.c (c_parser_gimple_try_stmt): New. diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c index d75648a..0d107ad 100644 --- a/gcc/c/c-decl.c +++ b/gcc/c/c-decl.c @@ -9687,6 +9687,7 @@ finish_function (void) /* Normally, with -Wreturn-type, flow will complain, but we might optimize out static functions. */ && !TREE_PUBLIC (fndecl) + && targetm.warn_func_return (fndecl) && warning (OPT_Wreturn_type, "no return statement in function returning non-void")) TREE_NO_WARNING (fndecl) = 1; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 69e82b5..f9f1789 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-07-18 Richard Sandiford <richard.sandiford@arm.com> + + * c-c++-common/pr53633-2.c: New test. + 2019-07-17 Alexandre Oliva <oliva@adacore.com> PR middle-end/81824 diff --git a/gcc/testsuite/c-c++-common/pr53633-2.c b/gcc/testsuite/c-c++-common/pr53633-2.c new file mode 100644 index 0000000..c26cb10 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr53633-2.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target naked_functions } */ +/* { dg-options "-O2 -Wall" } */ +/* Check that we do not get warnings about missing return statements + or bogus looking noreturn functions. */ +static int __attribute__((naked)) +foo (void) +{ + __asm__ (""); +} + +static int __attribute__((naked,noreturn)) +bar (void) +{ + __asm__ (""); +} + +int foo_caller (void) { return foo (); } +int bar_caller (void) { return bar (); } |