------- Comment #2 from burnus at gcc dot gnu dot org  2010-02-26 07:44 -------
Created an attachment (id=19966)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=19966&action=view)
Improved patch

This patch changes:

a) There was a bug, which causes that non-SAVEd variables in procedures where
not re-initialized if they were (TREE_)STATIC due to -fmax-stack-var-size=1. I
now check also for is_main_program.  (wrong-code)

b) Initializing the static variables in such cases is pointless if one needs to
initialize them explicitly afterwards. (missed optimization - will at least
increase the file size.)

(Note: I build the patch, I have not regtested it, but I think it is very
unlikely that it fails. What I wrote before still holds: The value for the
actual argument to the dummy "dealloc" should be checked - esp. in
trans-openmp.f90.)


Example: Have a look at the dump of. You should not see
  static struct t1 x = {.a={-43, -43, ...
  static struct t1 y = {.a={-43, -43, ...
but you should see
  t1.2.a[S.3 + -1] = -43;
  y.b.data = 0B;
  t2.0.a[S.1 + -1] = -43;


! { dg-options "-fmax-stack-var-size=1" }
module m
  type t1
    integer :: a(200) = -43
  end type t1
  type t2
    integer :: a(200) = -43
    integer, allocatable :: b(:)
  end type t2
contains
  subroutine sub()
    type(t1) :: x
    type(t2) :: y
    if (x%a(1) /= -43) call abort()
    if (y%a(1) /= -43) call abort()
!    if (any (x%a /= -43)) call abort()
!    if (any (y%a /= -43)) call abort()
  end subroutine sub
end module m

use m
call sub()
call sub()
end


-- 

burnus at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  Attachment #19962|0                           |1
        is obsolete|                            |


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

Reply via email to