------- Comment #1 from carrot at google dot com  2009-06-09 07:35 -------
Created an attachment (id=17969)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=17969&action=view)
simple class with empty virtual destructor

Some tree dump result

1. The tree dump of early stage:
cat test_class.cpp.003t.original

;; Function virtual base::~base() (null)
;; enabled by -tree-original

{
 <<cleanup_point <<< Unknown tree: expr_stmt
 (void) (((struct base *) this)->_vptr.base = &_ZTV4base + 8) >>>
>>;
}
<D.1756>:;
if ((bool) (__in_chrg & 1))
 {
   <<cleanup_point <<< Unknown tree: expr_stmt
 operator delete ((void *) this) >>>
>>;
 }
return this;

2. The tree dump of late stage, the reset of vptr is redundant.

cat test_class.cpp.130t.final_cleanup

;; Function base::~base() (_ZN4baseD2Ev)

base::~base() (struct base * const this)
{
<bb 2>:
 this->_vptr.base = &_ZTV4base[2];
 return this;

}

;; Function virtual base::~base() (_ZN4baseD1Ev)

virtual base::~base() (struct base * const this)
{
<bb 2>:
 this->_vptr.base = &_ZTV4base[2];
 return this;

}

;; Function virtual base::~base() (_ZN4baseD0Ev)

virtual base::~base() (struct base * const this)
{
<bb 2>:
 this->_vptr.base = &_ZTV4base[2];
 operator delete (this);
 return this;

}


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40382

Reply via email to