http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60337
--- Comment #5 from Dominik Vogt <vogt at linux dot vnet.ibm.com> --- With -O2 and -O3 all three cases generate the proper alignment With -O1 only foo() has the proper alignment With -O0 none of the cases has the proper alignment ==> Code compiled with -O0 and -O3 accidentally uses a different ABI. Power shows the same erratic behaviour, on amd64 alignment works with all -O{0,1,2,3}.