This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/22605] New: Allocation of structures across stack slots
- From: "ianw at gelato dot unsw dot edu dot au" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 22 Jul 2005 04:54:52 -0000
- Subject: [Bug c/22605] New: Allocation of structures across stack slots
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Hi,
gcc 4 seems quite a bit smarter at keeping the stack smaller, and as you can see
below allocates the 8 byte structure across two stack slots.
It did break something, which drew this to my attention, and James Wilson
already some analsysis in
http://www.gelato.unsw.edu.au/archives/linux-ia64/0507/1885.html. Quoting him
> If gcc-3.4 and earlier, some structures (BLKmode structures) were being
> over-aligned when allocated to stack slots. They always got the maximum
> alignment (16 bytes for IA-64) instead of their natural alignment. It
> isn't clear why. I think this was an accident of implementation. We
> were basing variable alignment on modes instead of type alignment, and
> since some BLKmode structures do require max alignment, we had to give
> it to all of them.
We came to the conclusion that we are unsure if this is a bug or a feature. I
am unsure if the larger stack space required is a good trade off against
possible better code.
Thanks,
-i
--- sample ---
ianw@lime:/tmp$ cat test.c
#include <stdio.h>
struct disk_stat {
int fd;
unsigned count;
};
int main(void)
{
int blah;
struct disk_stat test;
printf("%p\n", &blah);
printf("%p\n", &test);
}
ianw@lime:/tmp$ gcc-3.4 -o test test.c
ianw@lime:/tmp$ ./test
0x60000fffffcdf480
0x60000fffffcdf490
ianw@lime:/tmp$ gcc-4.0 -o test test.c
ianw@lime:/tmp$ ./test
0x60000fffffd57490
0x60000fffffd57494
--
Summary: Allocation of structures across stack slots
Product: gcc
Version: 4.0.1
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: ianw at gelato dot unsw dot edu dot au
CC: gcc-bugs at gcc dot gnu dot org
GCC target triplet: ia64-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22605