diff options
author | Tobias Burnus <burnus@net-b.de> | 2012-12-20 00:05:49 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2012-12-20 00:05:49 +0100 |
commit | 26c08c0323ca8094d4841634c4bf04c14be23811 (patch) | |
tree | 9afc547179607fb347353c4d0ce3bb267874eed5 /gcc | |
parent | 502bfcbc801fee24af5c1a015a4799c443b2a08e (diff) | |
download | gcc-26c08c0323ca8094d4841634c4bf04c14be23811.zip gcc-26c08c0323ca8094d4841634c4bf04c14be23811.tar.gz gcc-26c08c0323ca8094d4841634c4bf04c14be23811.tar.bz2 |
re PR fortran/55733 (-fno-automatic: Fails for scalar allocatables)
2012-12-19 Tobias Burnus <burnus@net-b.de>
PR fortran/55733
* trans-decl.c (gfc_create_string_length): Avoid setting
TREE_STATIC for automatic variables with -fno-automatic.
From-SVN: r194621
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-decl.c | 8 |
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 2da48f3..6a24ef7 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,4 +1,10 @@ 2012-12-19 Tobias Burnus <burnus@net-b.de> + + PR fortran/55733 + * trans-decl.c (gfc_create_string_length): Avoid setting + TREE_STATIC for automatic variables with -fno-automatic. + +2012-12-19 Tobias Burnus <burnus@net-b.de> Jakub Jelinek <jakub@redhat.com> Janus Weil <janus@gcc.gnu.org> diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 3202840..588f55a 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -1089,9 +1089,15 @@ gfc_create_string_length (gfc_symbol * sym) tree length; const char *name; + /* The string length variable shall be in static memory if it is either + explicitly SAVED, a module variable or with -fno-automatic. Only + relevant is "len=:" - otherwise, it is either a constant length or + it is an automatic variable. */ bool static_length = sym->attr.save || sym->ns->proc_name->attr.flavor == FL_MODULE - || gfc_option.flag_max_stack_var_size == 0; + || (gfc_option.flag_max_stack_var_size == 0 + && sym->ts.deferred && !sym->attr.dummy + && !sym->attr.result && !sym->attr.function); /* Also prefix the mangled name. We need to call GFC_PREFIX for static variables as some systems do not support the "." in the assembler name. |