------- Comment #21 from mikulas at artax dot karlin dot mff dot cuni dot cz 2009-08-08 10:41 ------- Hmm, it still generates the stack frame (and the alignment itself) when there are structures containing long long and with -malign-double.
Example, compile with -O2 -fomit-frame-pointer -mpreferred-stack-boundary=2 -malign-double: struct s { long long a; int b; }; void f(struct s *x); void g(void) { struct s x; f(&x); } --- the stack is aligned although it doesn't have to be. Output: g: pushl %ebp movl %esp, %ebp andl $-8, %esp subl $20, %esp leal 4(%esp), %eax movl %eax, (%esp) call f leave ret I compile the whole project with -malign-double (so I must use it on all modules, even integer ones, as it's ABI thing) and I compile integer-only parts with -mpreferred-stack-boundary=2. I don't know if you can extend that hack for "structures containing long long" ... but the whole stack alignment thing really needs to be redesigned for gcc-4.5. -- mikulas at artax dot karlin dot mff dot cuni dot cz changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED Resolution|FIXED | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40667