http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53900
Bug #: 53900
Summary: Too optimistic on a alignment assert
Classification: Unclassified
Product: gcc
Version: 4.7.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: [email protected]
ReportedBy: [email protected]
Created attachment 27766
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=27766
an example triggering the issue.
Since gcc 4.7 the assertion of the attached piece of code is resolved at
compile-time while there is no guaranty, for instance when using a non-aligned
memory allocator, or on some systems where function arguments cannot be
aligned.
Here is the output with gcc-4.7:
$ g++-4.7 -m32 alignedassert.cpp && ./a.out
0x8321008
0x832100c
no assertion!
And with gcc 4.6:
$ g++-4.6 -m32 alignedassert.cpp && ./a.out
0x9322008
a.out: alignedassert.cpp:12: Foo::Foo(): Assertion `(std::ptrdiff_t(array) &
std::ptrdiff_t(0xf))==0' failed.
Aborted
Or without the -m32 flag:
$ g++-4.7 alignedassert.cpp && ./a.out
0xde3010
0xde3014
$ g++-4.6 alignedassert.cpp && ./a.out
0x1f03010
0x1f03014
a.out: alignedassert.cpp:12: Foo::Foo(): Assertion `(std::ptrdiff_t(array) &
std::ptrdiff_t(0xf))==0' failed.
Aborted