Bug: variable memory allocation in gcc3

Flaym flaym@pandora.be
Sun Aug 17 21:37:00 GMT 2003


Hey everyone!

On one of the boards I frequently visit, someone asked a rather simple 
question about assembly.
I was very surprised with his gcc output though. Below is a full 
description of how to
reproduce what looks like a bug.

[ Thread where the question is asked: 
http://www.deny.de/phpbb2/viewtopic.php?t=9478 ]

How to reproduce it:

Take this very small C code:

void function(int a) { char buffer[1]; }
main() { function(1); }

If you compile it with gcc -S, you'll see subl $4, %esp under .function.
Change buffer[1] to buffer[3], $4 becomes $24.
But make that buffer[8], and $4 becomes $8.
Now... why would gcc allocate three times more variable space on the stack 
for buffer[3] than for buffer[8]?

This problem seems to be gcc3 specific, gcc 2.95 substracts the %esp with 
$32 for all three cases. I compiled this with 3.2.1 20020924 Debian 
prerelease.

Optimizing doesn't help either. If I change the code to:

void function(int a) { char buffer[1]="f"; printf("%s",buffer); }
main() { function(1); }

I get $16, $32 and $16 for buffer[i] with i = 1, 3 and 8 respectively.

Since I don't see why a buf[3] should get (two or even three times) more 
memory assigned than buf[8],
I assume this is a bug.

Thanks in advance for looking at this issue,
Flaym



More information about the Gcc-bugs mailing list