This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/56564] movdqa on possibly-8-byte-aligned struct with -O3
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 08 Mar 2013 10:00:54 +0000
- Subject: [Bug c++/56564] movdqa on possibly-8-byte-aligned struct with -O3
- Auto-submitted: auto-generated
- References: <bug-56564-4@http.gcc.gnu.org/bugzilla/>
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"