diff options
author | Jakub Jelinek <jakub@redhat.com> | 2005-09-26 22:06:37 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2005-09-26 22:06:37 +0200 |
commit | d05d9ac771ec6e7f7a1f0f0417106b0c73a9943d (patch) | |
tree | e2d56418b775f560e8f4f39554652bf96430a511 /gcc/fortran | |
parent | d674eb2f5c198a128ea401681e2f0937587e6369 (diff) | |
download | gcc-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/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/fortran/options.c | 4 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 2 | ||||
-rw-r--r-- | gcc/fortran/symbol.c | 2 |
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; } |