// { dg-do assemble }
|
// { dg-do assemble }
|
|
|
// Copyright (C) 1999 Free Software Foundation, Inc.
|
// Copyright (C) 1999 Free Software Foundation, Inc.
|
// Contributed by Nathan Sidwell 15 Apr 1999
|
// Contributed by Nathan Sidwell 15 Apr 1999
|
|
|
// delete (void *)e and delete[] (void *)e result in undefined behavior
|
// delete (void *)e and delete[] (void *)e result in undefined behavior
|
// [expr.delete/3]. Check we warn about them
|
// [expr.delete/3]. Check we warn about them
|
// operator new functions can only return NULL, if their exceptions
|
// operator new functions can only return NULL, if their exceptions
|
// specification is `throw()'. All other cases must return a non-null pointer
|
// specification is `throw()'. All other cases must return a non-null pointer
|
// [expr.new/13].
|
// [expr.new/13].
|
|
|
typedef __SIZE_TYPE__ size_t;
|
typedef __SIZE_TYPE__ size_t;
|
|
|
void *operator new(size_t)
|
void *operator new(size_t)
|
{
|
{
|
return 0; // { dg-error "" } cannot return NULL
|
return 0; // { dg-error "" } cannot return NULL
|
}
|
}
|
void *operator new[](size_t)
|
void *operator new[](size_t)
|
{
|
{
|
return 0; // { dg-error "" } cannot return NULL
|
return 0; // { dg-error "" } cannot return NULL
|
}
|
}
|
|
|
struct X
|
struct X
|
{
|
{
|
void *operator new(size_t)
|
void *operator new(size_t)
|
{
|
{
|
return 0; // { dg-error "" } cannot return NULL
|
return 0; // { dg-error "" } cannot return NULL
|
}
|
}
|
void *operator new[](size_t)
|
void *operator new[](size_t)
|
{
|
{
|
return 0; // { dg-error "" } cannot return NULL
|
return 0; // { dg-error "" } cannot return NULL
|
}
|
}
|
};
|
};
|
|
|
struct Y
|
struct Y
|
{
|
{
|
void *operator new(size_t) throw()
|
void *operator new(size_t) throw()
|
{
|
{
|
return 0; // ok
|
return 0; // ok
|
}
|
}
|
void *operator new[](size_t) throw()
|
void *operator new[](size_t) throw()
|
{
|
{
|
return 0; // ok
|
return 0; // ok
|
}
|
}
|
};
|
};
|
|
|
void fn(double *d, void *v)
|
void fn(double *d, void *v)
|
{
|
{
|
delete d; // ok
|
delete d; // ok
|
delete v; // { dg-warning "" } deleting void
|
delete v; // { dg-warning "" } deleting void
|
delete[] d; // ok
|
delete[] d; // ok
|
delete[] v; // { dg-warning "" } deleting void
|
delete[] v; // { dg-warning "" } deleting void
|
}
|
}
|
|
|