Saturday, 5 August 2006

alloca



なんか、Fedora Core のgcc 4 で、alloca のtest routine が動かなくなってる。gcc 3 では動くのにね。gdb も道連れなので、ちょっと追求する気がしない。adb 欲しいよう。 とか書くと、alloca はsystem依存だから動かないのが当然だみたいな切れ方をする奴がいるのも知っているけど...

main()
{
 int a[0];
  printf("#0020:%d %d\n",g1(100),f1(0,1,a,2));
}

int
g()
{
  int k = 0,i;

  char *p = alloca(asize<100?100:asize);
  for(i=0;i<100;i++) p[i]=i;
  for(i=0;i<100;i++) k += p[i];
  return k;
}

int
f1(int i,int j,int *l,int k)
{
  *l = 3;
  printf("#0062:f1 i=%d j=%d *l=%0x k=%d\n",i,j,*l,k);
  if (i++ >20) return *l;
  return f1(i,j,(int*)alloca(asize),k);
}

とかいうテストルーチンらしいです。f1 で必要なスタックコピーは出力されているようだが...

と、思ったら、
 int a[0];
これか! ありがちなミスだね。(そんなことはないか...)
 int a[1];

No comments: