aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/options.c
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2017-08-07 16:43:05 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2017-08-07 16:43:05 +0000
commit950a884bcb5a0123791df98679a2b6367b4e2beb (patch)
tree905385db157c5257f02a6ab7e4910db31dd1c8ae /gcc/fortran/options.c
parentebeeb49c4437466db2c9b706b541da47e99f1fe9 (diff)
downloadgcc-950a884bcb5a0123791df98679a2b6367b4e2beb.zip
gcc-950a884bcb5a0123791df98679a2b6367b4e2beb.tar.gz
gcc-950a884bcb5a0123791df98679a2b6367b4e2beb.tar.bz2
re PR fortran/68829 (Segfaults with -Ofast due to large array on stack)
2017-08-07 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/68829 * doc/invoke.texi: Document change in behvaior for -Ofast for Fortran. 2017-08-07 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/68829 PR fortran/81701 * options.c: Make -Ofast honor -fmax-stack-var-size. * invoke.texi: Document change. 2017-08-07 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/68829 PR fortran/81701 * gfortran.dg/o_fast_stacksize.90: New test. From-SVN: r250923
Diffstat (limited to 'gcc/fortran/options.c')
-rw-r--r--gcc/fortran/options.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index 1af76aa..283c835 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -235,7 +235,9 @@ gfc_post_options (const char **pfilename)
if (flag_protect_parens == -1)
flag_protect_parens = !optimize_fast;
- if (flag_stack_arrays == -1)
+ /* -Ofast sets implies -fstack-arrays unless an explicit size is set for
+ stack arrays. */
+ if (flag_stack_arrays == -1 && flag_max_stack_var_size == -2)
flag_stack_arrays = optimize_fast;
/* By default, disable (re)allocation during assignment for -std=f95,
@@ -380,6 +382,10 @@ gfc_post_options (const char **pfilename)
flag_max_stack_var_size = -1;
}
+ /* Set flag_stack_arrays correctly. */
+ if (flag_stack_arrays == -1)
+ flag_stack_arrays = 0;
+
/* Set default. */
if (flag_max_stack_var_size == -2)
flag_max_stack_var_size = 32768;