c: Fix warning after an error on a return statment [PR60440]
Like r5-6912-g3dbb84276aca10 but this is for the C front-end. Basically we have an error on a return statement, we just return error_mark_node and then the warning happens as there is no return statement. Anyways instead mark the current function for supression of the warning instead. PR c/60440 gcc/c/ChangeLog: * c-typeck.cc (c_finish_return): Mark the current function for supression of the -Wreturn-type if there was an error on the return statement. gcc/testsuite/ChangeLog: * gcc.dg/Wreturn-mismatch-2.c: Change dg-warning for the last -Wreturn-type to dg-bogus. * gcc.dg/pr60440-1.c: New test. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
This commit is contained in:
parent
aa55a6a30b
commit
cf65235e03
3 changed files with 17 additions and 2 deletions
|
@ -12765,7 +12765,12 @@ c_finish_return (location_t loc, tree retval, tree origtype, bool musttail_p)
|
|||
|
||||
current_function_returns_value = 1;
|
||||
if (t == error_mark_node)
|
||||
return NULL_TREE;
|
||||
{
|
||||
/* Suppress -Wreturn-type for this function. */
|
||||
if (warn_return_type)
|
||||
suppress_warning (current_function_decl, OPT_Wreturn_type);
|
||||
return NULL_TREE;
|
||||
}
|
||||
|
||||
save = in_late_binary_op;
|
||||
if (C_BOOLEAN_TYPE_P (TREE_TYPE (res))
|
||||
|
|
|
@ -37,5 +37,5 @@ int
|
|||
f7 (void)
|
||||
{
|
||||
return f1 (); /* { dg-error "void value not ignored as it ought to be" } */
|
||||
} /* { dg-warning "control reaches end of non-void\[^\n\r\]*-Wreturn-type" } */
|
||||
} /* { dg-bogus "control reaches end of non-void\[^\n\r\]*-Wreturn-type" } */
|
||||
|
||||
|
|
10
gcc/testsuite/gcc.dg/pr60440-1.c
Normal file
10
gcc/testsuite/gcc.dg/pr60440-1.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wreturn-type" } */
|
||||
|
||||
/* PR c/60440 */
|
||||
/* Don't warn for a missing return when there was an error
|
||||
on the return stamtent. */
|
||||
|
||||
int f(int a) {
|
||||
return a + b; /* { dg-error "undeclared" } */
|
||||
} /* { dg-bogus "control reaches end of non-void function" } */
|
Loading…
Add table
Reference in a new issue