re PR fortran/68829 (Segfaults with -Ofast due to large array on stack)
authorThomas Koenig <tkoenig@gcc.gnu.org>
Mon, 7 Aug 2017 16:43:05 +0000 (16:43 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Mon, 7 Aug 2017 16:43:05 +0000 (16:43 +0000)
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

gcc/ChangeLog
gcc/doc/invoke.texi
gcc/fortran/ChangeLog
gcc/fortran/options.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/o_fast_stacksize.f90 [new file with mode: 0644]

index ec8311568f324b054f039a2b17d5f9392caf1eed..d77a93323e160bb56f25f42fa4da10d438ef094c 100644 (file)
@@ -1,3 +1,9 @@
+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  Wilco Dijkstra  <wdijkstr@arm.com>
 
        * config/aarch64/aarch64.c (aarch64_pushwb_single_reg):
index 5ae9dc4128d5bd2abc15e6b1982051b798f73b70..5ee5b0e7b6d23badc95f0190c3af92a6ddcbdf40 100644 (file)
@@ -7278,7 +7278,8 @@ Disregard strict standards compliance.  @option{-Ofast} enables all
 @option{-O3} optimizations.  It also enables optimizations that are not
 valid for all standard-compliant programs.
 It turns on @option{-ffast-math} and the Fortran-specific
-@option{-fno-protect-parens} and @option{-fstack-arrays}.
+@option{-fstack-arrays}, unless @option{-fmax-stack-var-size} is
+specified, and @option{-fno-protect-parens}.
 
 @item -Og
 @opindex Og
index 7c10d8c59f3c32b90917610dccc37132e2ff09d7..e52bd0654aeb21d0baedfb9ca5ac664088240019 100644 (file)
@@ -1,3 +1,10 @@
+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-01  Thomas König  <tkoenig@gcc.gnu.org>
 
        PR fortran/79312
index 1af76aa81ec440fbc4d045fbc7ec1e2f63f7f0f1..283c8354e06e90dd5783b26db64b10ec37ab3926 100644 (file)
@@ -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;
index 00de4c2bd8df99bb5f365a3c4926f8284594d0f0..6a07467cecfda32bbbfe66361f8b13ecad17e925 100644 (file)
@@ -1,3 +1,9 @@
+2017-08-07  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/68829
+       PR fortran/81701
+       * gfortran.dg/o_fast_stacksize.90:  New test.
+
 2017-08-07  Wilco Dijkstra  <wdijkstr@arm.com>
 
        PR middle-end/46932
diff --git a/gcc/testsuite/gfortran.dg/o_fast_stacksize.f90 b/gcc/testsuite/gfortran.dg/o_fast_stacksize.f90
new file mode 100644 (file)
index 0000000..a373d15
--- /dev/null
@@ -0,0 +1,17 @@
+! { dg-do compile }
+! { dg-options "-Ofast -fmax-stack-var-size=100 -fdump-tree-original" }
+MODULE foo
+CONTAINS
+  SUBROUTINE mysum(a)
+    INTEGER :: a(:)
+    WRITE(6,*) SUM(a)
+  END SUBROUTINE
+END MODULE foo
+
+USE foo
+INTEGER, ALLOCATABLE :: a(:)
+INTEGER, PARAMETER :: N=2**26 ! 256Mb array
+ALLOCATE(a(N)) ; a=1
+CALL mysum(a*a)
+END
+! { dg-final { scan-tree-dump-times "__builtin_malloc" 2 "original" } }