Core issue 901

Core issue 901
	* libsupc++/vec.cc (__cxa_vec_new2, __cxa_vec_new3): Handle NULL
	dealloc.
	* call.c (build_op_delete_call): If this is for a new-expression
	and the op delete is deleted, do nothing.

From-SVN: r150073
This commit is contained in:
Jason Merrill 2009-07-24 23:57:20 -04:00 committed by Jason Merrill
parent 05b5c4e874
commit 67a6e81679
6 changed files with 37 additions and 2 deletions

View file

@ -1,5 +1,9 @@
2009-07-24 Jason Merrill <jason@redhat.com>
Core issue 901
* call.c (build_op_delete_call): If this is for a new-expression
and the op delete is deleted, do nothing.
Core issue 702
* call.c (compare_ics): Give list-initialization of std::init_list
priority over conversion to scalar, too.

View file

@ -4595,6 +4595,10 @@ build_op_delete_call (enum tree_code code, tree addr, tree size,
if (DECL_CLASS_SCOPE_P (fn))
perform_or_defer_access_check (TYPE_BINFO (type), fn, fn);
/* Core issue 901: It's ok to new a type with deleted delete. */
if (DECL_DELETED_FN (fn) && alloc_fn)
return NULL_TREE;
if (placement)
{
/* The placement args might not be suitable for overload

View file

@ -1,5 +1,7 @@
2009-07-24 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/defaulted11.C: New.
* g++.dg/cpp0x/initlist23.C: New.
2009-07-24 Janus Weil <janus@gcc.gnu.org>

View file

@ -0,0 +1,15 @@
// Core issue 901
// { dg-options "-std=c++0x" }
struct A
{
A(); ~A();
void operator delete (void *) = delete;
void operator delete[] (void *) = delete;
};
int main()
{
A* ap = new A;
ap = new A[2];
}

View file

@ -1,3 +1,9 @@
2009-07-24 Jason Merrill <jason@redhat.com>
Core issue 901
* libsupc++/vec.cc (__cxa_vec_new2, __cxa_vec_new3): Handle NULL
dealloc.
2009-07-24 Joseph Myers <joseph@codesourcery.com>
* include/c_global/cwchar (swprintf, vswprintf): Do not use if

View file

@ -104,7 +104,10 @@ namespace __cxxabiv1
{
{
uncatch_exception ue;
dealloc(base - padding_size);
// Core issue 901 will probably be resolved such that a
// deleted operator delete means not freeing memory here.
if (dealloc)
dealloc(base - padding_size);
}
__throw_exception_again;
}
@ -142,7 +145,8 @@ namespace __cxxabiv1
{
{
uncatch_exception ue;
dealloc(base - padding_size, size);
if (dealloc)
dealloc(base - padding_size, size);
}
__throw_exception_again;
}