aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorJanne Blomqvist <jb@gcc.gnu.org>2019-08-11 12:42:41 +0300
committerJanne Blomqvist <jb@gcc.gnu.org>2019-08-11 12:42:41 +0300
commit543202079c79535652361818185ff534a0161a39 (patch)
treef56421276cff2b50b3afe7fe74fa112cf222c9be /gcc/fortran
parent4c9dbb967f3948630ae9cc79283c62e01399737f (diff)
downloadgcc-543202079c79535652361818185ff534a0161a39.zip
gcc-543202079c79535652361818185ff534a0161a39.tar.gz
gcc-543202079c79535652361818185ff534a0161a39.tar.bz2
PR fortran/91413 Generate warning when making array static
When moving a local variable from the stack to static storage, the procedure is no longer safe to be called recursively or concurrently from multiple threads. Thus generate a warning when this is done. Also double the default limit for switching from stack to static. Regtested on x86_64-pc-linux-gnu. gcc/fortran/ChangeLog: 2019-08-11 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/91413 * invoke.texi (-fmax-stack-var-size): Document increased default. * options.c (gfc_post_options): Increase default stack var size to 65536 bytes. * trans-decl.c (gfc_finish_var_decl): Generate warning when local array moved to static storage. From-SVN: r274264
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog9
-rw-r--r--gcc/fortran/invoke.texi2
-rw-r--r--gcc/fortran/options.c2
-rw-r--r--gcc/fortran/trans-decl.c10
4 files changed, 21 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 51dc893..d554991 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,12 @@
+2019-08-11 Janne Blomqvist <jb@gcc.gnu.org>
+
+ PR fortran/91413
+ * invoke.texi (-fmax-stack-var-size): Document increased default.
+ * options.c (gfc_post_options): Increase default stack var size to
+ 65536 bytes.
+ * trans-decl.c (gfc_finish_var_decl): Generate warning when local
+ array moved to static storage.
+
2019-08-10 Steven G. Kargl <kargl@gcc.gnu.org>
* decl.c (match_old_style_init): Use a clearer error message.
diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi
index 3c1b2ac..1039c608 100644
--- a/gcc/fortran/invoke.texi
+++ b/gcc/fortran/invoke.texi
@@ -1720,7 +1720,7 @@ This option currently only affects local arrays declared with constant
bounds, and may not apply to all character variables.
Future versions of GNU Fortran may improve this behavior.
-The default value for @var{n} is 32768.
+The default value for @var{n} is 65536.
@item -fstack-arrays
@opindex @code{fstack-arrays}
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index ef37ccc..146be2f 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -437,7 +437,7 @@ gfc_post_options (const char **pfilename)
/* Set default. */
if (flag_max_stack_var_size == -2)
- flag_max_stack_var_size = 32768;
+ flag_max_stack_var_size = 65536;
/* Implement -fno-automatic as -fmax-stack-var-size=0. */
if (!flag_automatic)
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 86c3d3a..2a9b852 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -753,6 +753,16 @@ gfc_finish_var_decl (tree decl, gfc_symbol * sym)
|| sym->attr.allocatable)
&& !DECL_ARTIFICIAL (decl))
{
+ gfc_warning (OPT_Wsurprising,
+ "Array %qs at %L is larger than limit set by"
+ " %<-fmax-stack-var-size=%>, moved from stack to static"
+ " storage. This makes the procedure unsafe when called"
+ " recursively, or concurrently from multiple threads."
+ " Consider using %<-frecursive%>, or increase the"
+ " %<-fmax-stack-var-size=%> limit, or change the code to"
+ " use an ALLOCATABLE array.",
+ sym->name, &sym->declared_at);
+
TREE_STATIC (decl) = 1;
/* Because the size of this variable isn't known until now, we may have