[prev in list] [next in list] [prev in thread] [next in thread]
List: gcc-fortran
Subject: [Patch, Fortran, committed] Fix -fno-automatic string length static regression
From: Tobias Burnus <burnus () net-b ! de>
Date: 2012-12-19 23:10:32
Message-ID: 50D24968.4040507 () net-b ! de
[Download RAW message or body]
The check whether the string length should be static or not with
-fno-automatic failed to take automatic arrays into account. There are
three possibilities for string lengths:
a) They can be constant
b) They can be based on a nonconstant expression
c) They can be deferred
(b) is an automatic variable; (a) and (c) might be static, but for (a)
it doesn't matter whether the variable is static or not. Hence, only
deferred-length variables have to be considered.
Approved by Paul on IRC and committed as Rev. 194621 after a successful
bootstrap plus regtesting. A test case is, e.g., gfortran.dg/pr26246_2.f90.
Tobias
["committed.diff" (text/x-patch)]
Index: gcc/fortran/ChangeLog
===================================================================
--- gcc/fortran/ChangeLog (Revision 194620)
+++ gcc/fortran/ChangeLog (Arbeitskopie)
@@ -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>
Index: gcc/fortran/trans-decl.c
===================================================================
--- gcc/fortran/trans-decl.c (Revision 194620)
+++ gcc/fortran/trans-decl.c (Arbeitskopie)
@@ -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.
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic