This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: max-stack-var-size
- From: canqun at nudt dot edu dot cn
- To: Paul Brook <paul at nowt dot org>
- Cc: S.Bosscher <S dot Bosscher at student dot tudelft dot nl>,gcc-patches at gcc dot gnu dot org, fortran at gcc dot gnu dot org
- Date: Mon, 10 Nov 2003 18:49:39 +0800 (HKT)
- Subject: Re: max-stack-var-size
- Reply-to: canqun at nudt dot edu dot cn
Paul Brook <paul@nowt.org>:
> On Friday 07 November 2003 7:58 am, canqun@nudt.edu.cn
wrote:
> > It seems that recursive function is the only case that
> > its local variables should be placed on stack. Is it
> > true? If so, add an extra condition to avoid such case
> > will let it work.
> >
> > + /* Keep variables larger than max-stack-var-size
> > off stack. */
> > + if (!(sym->ns->proc_name->attr.recursive)
> > && !gfc_can_put_var_on_stack (DECL_SIZE_UNIT
> > (decl)))
> > + TREE_STATIC (decl) = 1;
>
> This would be fine, preferably accompanied by a testcase.
>
> Paul
>
>
I attached a test program for this case. Is it OK to
apply the patch and commit the testcase ?
Canqun Yang
! Program to test the stack variable size limit.
program stack
call sub1
call sub2 (1)
contains
! Local variables larger than 32768 in byte size shall be placed in static
! storage area, while others be put on stack by default.
subroutine sub1
real a, b(32768/4), c(32768/4+1)
integer m, n(1024,4), k(1024,1024)
a = 10.0
b = 20.0
c = 30.0
m = 10
n = 20
k = 30
if ((a .ne. 10.0).or.(b(1) .ne. 20.0).or.(c(1) .ne. 30.0)) call abort
if ((m .ne. 10).or.(n(256,4) .ne. 20).or.(k(1,1024) .ne. 30)) call abort
end
! Local variables defined in recursive subroutine are always put on stack.
recursive subroutine sub2 (n)
real a (32769)
a (1) = 42
if (n .ge. 1) call sub2 (n-1)
if (a(1) .ne. 42) call abort
a (1) = 0
end
end