This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Fortran, (RFC) patch] PR49110/51055 Assignment to alloc. deferred-length character vars


Jakub Jelinek wrote:
On Tue, Dec 18, 2012 at 04:40:10PM +0100, Tobias Burnus wrote:
Looks mostly okay, however, I fear that for

subroutine foo()
character(len=:), allocatable :: str
allocate(str, stat=istat)
end subroutine foo

compiled with "-fno-automatic", gfortran will still generate the
non-GFC_PREFIX-mangled string.
That doesn't compile:
Error: Allocate-object at (1) with a deferred type parameter requires either a type-spec or SOURCE tag or a MOLD tag

Sorry for the bad example. I added the allocate just to mark the variable as used (otherwise no decl is generated); but my cut-down example was wrong. Try:


subroutine foo()
  character(len=:), allocatable :: str
  print *, allocated(str)
end subroutine foo


Or one of the examples from PR55733. The example above gives currently (w/o your patch):


  static character(kind=1)[1:.str] * str = 0B;
  integer(kind=4) .str;


Where would be TREE_STATIC set on the length variable with -fno-automatic,
and on which testcase?

As written, TREE_STATIC is currently not set (which is a bug, cf. PR55733); I think one needs a patch like:


--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -1107,3 +1107,4 @@ gfc_create_string_length (gfc_symbol * sym)

-      if (sym->attr.save || sym->ns->proc_name->attr.flavor == FL_MODULE)
+      if (sym->attr.save || sym->ns->proc_name->attr.flavor == FL_MODULE
+         || gfc_option.flag_max_stack_var_size == 0)
        TREE_STATIC (length) = 1;


Tobias



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]