gcc/
* doc/invoke.texi (Warning Options): Document changes.
gcc/c/
* c-typeck.cc (c_finish_return): Issue a permerror
for mismatching pointers to builtins. For mismatching
other pointers, issue a pedpermerror.
gcc/testsuite/
* gcc.dg/20030906-1.c: Compile with -fpermissive due to
expected -Wreturn-mismatch error.
* gcc.dg/20030906-1a.c: New test. Copied from
gcc.dg/20030906-1.c. Expect the error.
* gcc.dg/20030906-2.c: Compile with -fpermissive due to
expected -Wreturn-mismatch error.
* gcc.dg/20030906-2a.c: New test. Copied from
gcc.dg/20030906-2.c. Expect the error.
* gcc.dg/Wreturn-mismatch-1.c: Compile with -fpermissive due to
expected -Wreturn-mismatch error.
* gcc.dg/Wreturn-mismatch-1a.c: New test. Copied from
gcc.dg/Wreturn-mismatch-1.c. Expect the error.
* gcc.dg/Wreturn-mismatch-2.c: Compile with -fpermissive due to
expected -Wreturn-mismatch error.
* gcc.dg/Wreturn-mismatch-2a.c: New test. Copied from
gcc.dg/Wreturn-mismatch-2.c. Expect the error.
* gcc.dg/diagnostic-range-bad-return.c: Compile with
-fpermissive due to expected -Wreturn-mismatch error.
* gcc.dg/diagnostic-range-bad-return-2.c: New test.
Copied from gcc.dg/diagnostic-range-bad-return.c. Expect the
error.
* gcc.dg/pr105635-2.c: Expect -Wreturn-mismatch error.
* gcc.dg/pr23075.c: Build with -fpermissive due to
expected -Wreturn-mismatch error.
* gcc.dg/pr23075-2.c: New test. Copied from gcc.dg/pr23075.c.
Expect the error.
* gcc.dg/pr29521.c: Compile with -fpermissive due to expected
-Wreturn-mismatch error.
* gcc.dg/pr29521-a.c: New test. Copied from gcc.dg/pr29521.c.
Expect error.
* gcc.dg/pr67730.c: Compile with -fpermissive due to expected
-Wreturn-mismatch error.
* gcc.dg/pr67730-a.c: New test. Copied from
gcc.dg/pr67730-a.c. Expect error.
* gcc.target/powerpc/conditional-return.c: Compile with
-fpermissive due to expected-Wreturn-mismatch error.
---
gcc/c/c-typeck.cc | 6 ++-
gcc/doc/invoke.texi | 6 ++-
gcc/testsuite/gcc.dg/20030906-1.c | 2 +-
gcc/testsuite/gcc.dg/20030906-1a.c| 21
gcc/testsuite/gcc.dg/20030906-2.c | 2 +-
gcc/testsuite/gcc.dg/20030906-2a.c| 21
gcc/testsuite/gcc.dg/Wreturn-mismatch-1.c | 2 +-
gcc/testsuite/gcc.dg/Wreturn-mismatch-1a.c| 40 ++
gcc/testsuite/gcc.dg/Wreturn-mismatch-2.c | 2 +-
gcc/testsuite/gcc.dg/Wreturn-mismatch-2a.c| 41 +++
.../gcc.dg/diagnostic-range-bad-return-2.c| 52 +++
.../gcc.dg/diagnostic-range-bad-return.c | 2 +-
gcc/testsuite/gcc.dg/pr105635-2.c | 2 +-
gcc/testsuite/gcc.dg/pr23075-2.c | 14 +
gcc/testsuite/gcc.dg/pr23075.c| 2 +-
gcc/testsuite/gcc.dg/pr29521-a.c | 15 ++
gcc/testsuite/gcc.dg/pr29521.c| 2 +-
gcc/testsuite/gcc.dg/pr67730-a.c | 11
gcc/testsuite/gcc.dg/pr67730.c| 2 +-
.../gcc.target/powerpc/conditional-return.c | 2 +-
20 files changed, 234 insertions(+), 13 deletions(-)
create mode 100644 gcc/testsuite/gcc.dg/20030906-1a.c
create mode 100644 gcc/testsuite/gcc.dg/20030906-2a.c
create mode 100644 gcc/testsuite/gcc.dg/Wreturn-mismatch-1a.c
create mode 100644 gcc/testsuite/gcc.dg/Wreturn-mismatch-2a.c
create mode 100644 gcc/testsuite/gcc.dg/diagnostic-range-bad-return-2.c
create mode 100644 gcc/testsuite/gcc.dg/pr23075-2.c
create mode 100644 gcc/testsuite/gcc.dg/pr29521-a.c
create mode 100644 gcc/testsuite/gcc.dg/pr67730-a.c
diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc
index 9d7bdbb4523..be376758b82 100644
--- a/gcc/c/c-typeck.cc
+++ b/gcc/c/c-typeck.cc
@@ -11192,7 +11192,9 @@ c_finish_return (location_t loc, tree retval, tree
origtype)
&& valtype != NULL_TREE && TREE_CODE (valtype) != VOID_TYPE)
{
no_warning = true;
- if (emit_diagnostic (flag_isoc99 ? DK_PEDWARN : DK_WARNING,
+ if (emit_diagnostic (flag_isoc99 && !flag_pedantic_errors
+ ? DK_PERMERROR
+ : flag_isoc99 ? DK_PEDWARN : DK_WARNING,
loc, OPT_Wreturn_mismatch,
"% with no value,"
" in function returning non-void"))
@@ -11205,7 +11207,7 @@ c_finish_return (location_t loc, tree retval, tree
origtype)
current_function_returns_null = 1;
bool warned_here;
if (TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
- warned_here = pedwarn
+ warned_here = pedpermerror
(xloc, OPT_Wreturn_mismatch,
"% with a value, in