The following warning is produced when -fno-automatic and -frecursive
are used at the same time:
f951: Warning: Flag '-fno-automatic' overwrites '-frecursive'
This is a reasonable warning, however, recursion can be used with the
-fno-automatic flag where recursion is enabled using -frecusive instead
of explicitly using the recursive keyword.
If all relevant subroutines local variables are explicitly declared
automatic then recursion will work and the warning becomes a nuisance
when -Werror is used in the build environment.
This patch allows the warning to be switched off using a new option,
-Woverwrite-recursive, initialised to on.
I don't have a test case for this as I don't know how to test for a
warning that isn't related to a line of code.
It is a very simple patch, can the test case be omitted?
ChangeLog
gcc/fortran
Mark Eggleston <mark.eggles...@codethink.com>
* lang.opt: Add option -Woverwrite-recursive initialised as on.
* option.c (gfc_post_options): Output warning only if it is enabled.
--
https://www.codethink.co.uk/privacy.html
>From cfdcde8229ebed15304c1adb8085365f8ad5970a Mon Sep 17 00:00:00 2001
From: Mark Eggleston <markeggles...@codethink.com>
Date: Tue, 16 Apr 2019 09:09:12 +0100
Subject: [PATCH 09/12] Suppress warning with -Wno-overwrite-recursive
The message "Warning: Flag '-fno-automatic' overwrites '-frecursive'" is
output by default when -fno-automatic and -frecursive are used together.
It warns that recursion may be broken, however if all the relavent variables
in the recursive procedure have automatic attributes the warning is
unnecessary so -Wno-overwrite-recursive can be used to suppress it. This
will allow compilation when warnings are regarded as errors.
Suppress warning with -Wno-overwrite-recursive
---
gcc/fortran/lang.opt | 4 ++++
gcc/fortran/options.c | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
index 2aba57d00b5..7d9fd3e048c 100644
--- a/gcc/fortran/lang.opt
+++ b/gcc/fortran/lang.opt
@@ -289,6 +289,10 @@ Wopenmp-simd
Fortran
; Documented in C
+Woverwrite-recursive
+Fortran Warning Var(warn_overwrite_recursive) Init(1)
+Warn that -fno-automatic may break recursion.
+
Wpedantic
Fortran
; Documented in common.opt
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index 03e14338578..1721f93f673 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -411,7 +411,7 @@ gfc_post_options (const char **pfilename)
&& flag_max_stack_var_size != 0)
gfc_warning_now (0, "Flag %<-fno-automatic%> overwrites %<-fmax-stack-var-size=%d%>",
flag_max_stack_var_size);
- else if (!flag_automatic && flag_recursive)
+ else if (!flag_automatic && flag_recursive && warn_overwrite_recursive)
gfc_warning_now (0, "Flag %<-fno-automatic%> overwrites %<-frecursive%>");
else if (!flag_automatic && flag_openmp)
gfc_warning_now (0, "Flag %<-fno-automatic%> overwrites %<-frecursive%> implied by "
--
2.11.0