aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-09-26 22:06:37 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2005-09-26 22:06:37 +0200
commitd05d9ac771ec6e7f7a1f0f0417106b0c73a9943d (patch)
treee2d56418b775f560e8f4f39554652bf96430a511 /gcc/fortran
parentd674eb2f5c198a128ea401681e2f0937587e6369 (diff)
downloadgcc-d05d9ac771ec6e7f7a1f0f0417106b0c73a9943d.zip
gcc-d05d9ac771ec6e7f7a1f0f0417106b0c73a9943d.tar.gz
gcc-d05d9ac771ec6e7f7a1f0f0417106b0c73a9943d.tar.bz2
re PR fortran/23677 (-fno-automatic does not accept legal save statements)
PR fortran/23677 * symbol.c (gfc_is_var_automatic): Return true if character length is non-constant rather than constant. * resolve.c (gfc_resolve): Don't handle !gfc_option.flag_automatic here. * options.c (gfc_post_options): Set gfc_option.flag_max_stack_var_size to 0 for -fno-automatic. * gfortran.fortran-torture/execute/save_1.f90: New test. * gfortran.dg/save_1.f90: New test. From-SVN: r104661
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog10
-rw-r--r--gcc/fortran/options.c4
-rw-r--r--gcc/fortran/resolve.c2
-rw-r--r--gcc/fortran/symbol.c2
4 files changed, 16 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 76b0344..a376443 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,13 @@
+2005-09-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/23677
+ * symbol.c (gfc_is_var_automatic): Return true if character length
+ is non-constant rather than constant.
+ * resolve.c (gfc_resolve): Don't handle !gfc_option.flag_automatic
+ here.
+ * options.c (gfc_post_options): Set gfc_option.flag_max_stack_var_size
+ to 0 for -fno-automatic.
+
2005-09-23 Paul Thomas <pault@gcc.gnu.org>
PR fortran/16861
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index 693ac71..48df674 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -223,6 +223,10 @@ gfc_post_options (const char **pfilename)
if (gfc_option.flag_second_underscore == -1)
gfc_option.flag_second_underscore = gfc_option.flag_f2c;
+ /* Implement -fno-automatic as -fmax-stack-var-size=0. */
+ if (!gfc_option.flag_automatic)
+ gfc_option.flag_max_stack_var_size = 0;
+
return false;
}
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 88e7d18..a048da5 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -5107,7 +5107,7 @@ gfc_resolve (gfc_namespace * ns)
gfc_traverse_ns (ns, resolve_values);
- if (!gfc_option.flag_automatic || ns->save_all)
+ if (ns->save_all)
gfc_save_all (ns);
iter_stack = NULL;
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index acae453..de2de4b 100644
--- a/gcc/fortran/symbol.c
+++ b/gcc/fortran/symbol.c
@@ -2345,7 +2345,7 @@ gfc_is_var_automatic (gfc_symbol * sym)
/* Check for non-constant length character variables. */
if (sym->ts.type == BT_CHARACTER
&& sym->ts.cl
- && gfc_is_constant_expr (sym->ts.cl->length))
+ && !gfc_is_constant_expr (sym->ts.cl->length))
return true;
return false;
}