C++ PATCH to build_delete
Jason Merrill
jason@redhat.com
Fri Jan 19 07:08:00 GMT 2001
Fixes g++.other/dtor12.C:
struct A
{
~A() {}
};
const A a = {};
int main()
{
a.A::~A(); // gets bogus error - const violation
}
I also tweaked another piece of not-quite-correct logic that may or may not
have been hurting things.
2001-01-19 Jason Merrill <jason@redhat.com>
* init.c (build_delete): Always call convert_force to strip cv-quals.
*** init.c.~1~ Fri Jan 19 14:22:41 2001
--- init.c Fri Jan 19 14:22:49 2001
*************** build_delete (type, addr, auto_delete, f
*** 3228,3237 ****
if (TREE_SIDE_EFFECTS (addr))
addr = save_expr (addr);
! if (TREE_CONSTANT (addr))
! addr = convert_pointer_to (type, addr);
! else
! addr = convert_force (build_pointer_type (type), addr, 0);
ref = build_indirect_ref (addr, NULL_PTR);
}
--- 3228,3234 ----
if (TREE_SIDE_EFFECTS (addr))
addr = save_expr (addr);
! addr = convert_force (build_pointer_type (type), addr, 0);
ref = build_indirect_ref (addr, NULL_PTR);
}
*************** build_delete (type, addr, auto_delete, f
*** 3240,3246 ****
if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
{
! if (auto_delete == sfk_base_destructor)
return void_zero_node;
return build_op_delete_call
--- 3237,3243 ----
if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
{
! if (auto_delete != sfk_deleting_destructor)
return void_zero_node;
return build_op_delete_call
More information about the Gcc-patches
mailing list