Correctly handle ARM targets.
* g++.dg/init/new45.C (cookie_size): New constant set to a value appropriate for the target. (operator new[]): Use it. From-SVN: r230987
This commit is contained in:
parent
1e5d7fd638
commit
ed48be0ef3
|
@ -1,3 +1,9 @@
|
|||
2015-11-26 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
* g++.dg/init/new45.C (cookie_size): New constant set to a value
|
||||
appropriate for the target.
|
||||
(operator new[]): Use it.
|
||||
|
||||
2015-11-26 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/67238
|
||||
|
|
|
@ -23,13 +23,25 @@ struct POD {
|
|||
|
||||
enum { N = 123 };
|
||||
|
||||
#if defined (__arm__) && defined (__ARM_EABI__)
|
||||
// On ARM EABI the cookie is always 8 bytes as per Section 3.2.2 of
|
||||
// http://infocenter.arm.com/help/topic/com.arm.doc.ihi0041d/IHI0041D_cppabi.pdf
|
||||
static const size_t cookie_size = 8;
|
||||
#else
|
||||
// On all other targets, the cookie size is the size of size_t
|
||||
// GCC, and ideally the C++ standard, should provide an API to
|
||||
// retrieve this constant.)
|
||||
static const size_t cookie_size = sizeof (size_t);
|
||||
#endif
|
||||
|
||||
inline __attribute__ ((always_inline))
|
||||
void* operator new[] (size_t n)
|
||||
{
|
||||
// Verify that array new is invoked with an argument large enough
|
||||
// for the array and a size_t cookie to store the number of elements.
|
||||
// (This holds for classes with user-defined types but not POD types).
|
||||
if (n != N * sizeof (UDClass) + sizeof n) abort ();
|
||||
|
||||
if (n != N * sizeof (UDClass) + cookie_size) abort ();
|
||||
return malloc (n);
|
||||
}
|
||||
|
||||
|
@ -60,7 +72,7 @@ void* operator new[] (size_t n, UDClass *p)
|
|||
// Verify that placement array new overload for a class type with
|
||||
// a user-defined ctor and dtor is invoked with an argument large
|
||||
// enough for the array and a cookie.
|
||||
if (n != N * sizeof (UDClass) + sizeof n) abort ();
|
||||
if (n != N * sizeof (UDClass) + cookie_size) abort ();
|
||||
return p;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue