http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56564
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |WAITING Last reconfirmed| |2013-03-08 Summary|[4.7 Regression] movdqa on |movdqa on |possibly-8-byte-aligned |possibly-8-byte-aligned |struct with -O3 |struct with -O3 Ever Confirmed|0 |1 Known to fail| |4.6.4, 4.7.2, 4.8.0 --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> 2013-03-08 10:00:54 UTC --- This instruction appears in an EH region of function _ZN5boost16exception_detail27get_static_exception_objectINS0_10bad_alloc_EEENS_13exception_ptrEv (AFAIK). It's defined twice, once weak and aligned 8 and once strong and aligned 16, so AFAIK it _is_ aligned properly. .align 8 .type _ZGVZN5boost16exception_detail27get_static_exception_objectINS0_10bad_alloc_EEENS_13exception_ptrEvE2ep, @gnu_unique_object .size _ZGVZN5boost16exception_detail27get_static_exception_objectINS0_10bad_alloc_EEENS_13exception_ptrEvE2ep, 8 _ZGVZN5boost16exception_detail27get_static_exception_objectINS0_10bad_alloc_EEENS_13exception_ptrEvE2ep: .zero 8 .weak _ZZN5boost16exception_detail27get_static_exception_objectINS0_10bad_alloc_EEENS_13exception_ptrEvE2ep .section .bss._ZZN5boost16exception_detail27get_static_exception_objectINS0_10bad_alloc_EEENS_13exception_ptrEvE2ep,"awG",@nobits,_ZZN5boost16exception_detail27get_static_exception_objectINS0_10bad_alloc_EEENS_13exception_ptrEvE2ep,comdat .align 16 .type _ZZN5boost16exception_detail27get_static_exception_objectINS0_10bad_alloc_EEENS_13exception_ptrEvE2ep, @gnu_unique_object .size _ZZN5boost16exception_detail27get_static_exception_objectINS0_10bad_alloc_EEENS_13exception_ptrEvE2ep, 16 _ZZN5boost16exception_detail27get_static_exception_objectINS0_10bad_alloc_EEENS_13exception_ptrEvE2ep: .zero 16 and readelf shows: [192] .bss._ZZN5boost16 NOBITS 0000000000000000 00001ca0 0000000000000010 0000000000000000 WAG 0 0 16 with alignment of 16. > This crashes if >_ZZN5boost16exception_detail27get_static_exception_objectINS0_10bad_alloc_EEENS_13exception_ptrEvE2ep > comes from another object file where it is declared with 8-byte alignment. so this would be a bug and a violation of ODR(?) What's this "other object file"? The code piece in question is: template <class Exception> exception_ptr get_static_exception_object() { Exception ba; exception_detail::clone_impl<Exception> c(ba); static exception_ptr ep(shared_ptr<exception_detail::clone_base const>(new exception_detail::clone_impl<Exception>(c))); return ep; } OTOH, not sure what increases the alignment of that object from it's type-alignmend. Same alignment is emitted with 4.8 and also 4.6 - so you must be unlucky with that other object file (compiled with which compiler?) Please also attach preprocessed source of the "other object file"