From 5d66ea591949cab2683ea77fefdf9fefeb4a4104 Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Sun, 11 Dec 2011 22:37:55 +0100 Subject: [PATCH] re PR fortran/50923 (No warning if function return value is not set) 2011-12-11 Tobias Burnus PR fortran/50923 * trans-decl.c (generate_local_decl): Set TREE_NO_WARNING only if the front end has printed a warning. (gfc_generate_function_code): Fix unset-result warning. 2011-12-11 Tobias Burnus PR fortran/50923 * gfortran.dg/warn_function_without_result_2.f90: New. From-SVN: r182213 --- gcc/fortran/ChangeLog | 7 +++++++ gcc/fortran/trans-decl.c | 19 ++++++++++--------- gcc/testsuite/ChangeLog | 5 +++++ .../warn_function_without_result_2.f90 | 19 +++++++++++++++++++ 4 files changed, 41 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/warn_function_without_result_2.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index be149aa1e316..313336c48997 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2011-12-11 Tobias Burnus + + PR fortran/50923 + * trans-decl.c (generate_local_decl): Set TREE_NO_WARNING only + if the front end has printed a warning. + (gfc_generate_function_code): Fix unset-result warning. + 2011-12-11 Thomas Koenig PR fortran/51338 diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 25703f0c52ba..50f137287eb4 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -4184,10 +4184,16 @@ generate_local_decl (gfc_symbol * sym) "declared INTENT(OUT) but was not set and " "does not have a default initializer", sym->name, &sym->declared_at); + if (sym->backend_decl != NULL_TREE) + TREE_NO_WARNING(sym->backend_decl) = 1; } else if (gfc_option.warn_unused_dummy_argument) - gfc_warning ("Unused dummy argument '%s' at %L", sym->name, + { + gfc_warning ("Unused dummy argument '%s' at %L", sym->name, &sym->declared_at); + if (sym->backend_decl != NULL_TREE) + TREE_NO_WARNING(sym->backend_decl) = 1; + } } /* Warn for unused variables, but not if they're inside a common @@ -4232,11 +4238,6 @@ generate_local_decl (gfc_symbol * sym) mark the symbol now, as well as in traverse_ns, to prevent getting stuck in a circular dependency. */ sym->mark = 1; - - /* We do not want the middle-end to warn about unused parameters - as this was already done above. */ - if (sym->attr.dummy && sym->backend_decl != NULL_TREE) - TREE_NO_WARNING(sym->backend_decl) = 1; } else if (sym->attr.flavor == FL_PARAMETER) { @@ -4851,11 +4852,11 @@ gfc_generate_function_code (gfc_namespace * ns) if (result == NULL_TREE) { /* TODO: move to the appropriate place in resolve.c. */ - if (warn_return_type && !sym->attr.referenced && sym == sym->result) + if (warn_return_type && sym == sym->result) gfc_warning ("Return value of function '%s' at %L not set", sym->name, &sym->declared_at); - - TREE_NO_WARNING(sym->backend_decl) = 1; + if (warn_return_type) + TREE_NO_WARNING(sym->backend_decl) = 1; } else gfc_add_expr_to_block (&body, gfc_generate_return ()); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1ee6b0dbb623..eb5578e42aeb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-12-11 Tobias Burnus + + PR fortran/50923 + * gfortran.dg/warn_function_without_result_2.f90: New. + 2011-12-11 Thomas Koenig PR fortran/51338 diff --git a/gcc/testsuite/gfortran.dg/warn_function_without_result_2.f90 b/gcc/testsuite/gfortran.dg/warn_function_without_result_2.f90 new file mode 100644 index 000000000000..25fd0b73a75a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/warn_function_without_result_2.f90 @@ -0,0 +1,19 @@ +! { dg-do compile } +! { dg-options "-Wall" } +! +! PR fortran/50923 +! +module m +contains + integer pure function f() ! { dg-warning "Return value of function 'f' at .1. not set" } + end function f + integer pure function g() result(h) ! { dg-warning "Return value 'h' of function 'g' declared at .1. not set" } + end function g + integer pure function i() + i = 7 + end function i + integer pure function j() result(k) + k = 8 + end function j +end module m +! { dg-final { cleanup-modules "mod" } } -- 2.47.2