------- Comment #6 from michael dot baudin at gmail dot com  2008-04-18 15:07 
-------
Subject: Re:  Recursive function with allocatable array

I used the -fdump-tree-original option to compare the version produced on this
source code with allocatable and pointer.
Only the allocatable contains the following statements :

  static struct t_type subpattern = {};
  subpattern.chars.data = 0B;

I understand that the statement "  subpattern.chars.data = 0B;" allows
to free the array when it goes out of scope, as the standard says about
allocatable arrays (which explains why it is not in the pointer version) :

  if (subpattern.chars.data != 0B)
    {
      __builtin_free (subpattern.chars.data);
    }
  subpattern.chars.data = 0B;

The statement "static struct t_type subpattern = {};", which is not in the
pointer version, is the cause of the problem so that the
solution is to remove it : at second call, the array has been
initialiazed to null, and because it is static, it memory is still deallocated
on recursive calls.
An allocatable array in a recursive subroutine should not be static
(in fortran,
that means having the SAVE attribute), isn't it ?
Am I right ?

Best regards,

Michaƫl


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35959

Reply via email to