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