diff options
author | Janne Blomqvist <jb@gcc.gnu.org> | 2019-08-11 12:42:41 +0300 |
---|---|---|
committer | Janne Blomqvist <jb@gcc.gnu.org> | 2019-08-11 12:42:41 +0300 |
commit | 543202079c79535652361818185ff534a0161a39 (patch) | |
tree | f56421276cff2b50b3afe7fe74fa112cf222c9be /gcc/fortran | |
parent | 4c9dbb967f3948630ae9cc79283c62e01399737f (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/fortran/invoke.texi | 2 | ||||
-rw-r--r-- | gcc/fortran/options.c | 2 | ||||
-rw-r--r-- | gcc/fortran/trans-decl.c | 10 |
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 |