------- Additional Comments From reichelt at gcc dot gnu dot org 2005-02-22
17:56 -------
Here's a slightly reduced testcase.
===================================================
#include<stdio.h>
struct A
{
A() : i() {}
A (const A&);
~A()
{
printf ("Destructor: i = %d\n", i);
}
A& operator= (const A &a)
{
static int count=0;
i = a.i + 1;
printf ("Assignment %d\n", ++count);
return *this;
}
int i;
};
struct B
{
A x[2][2];
};
int main()
{
B b;
b = b;
}
===================================================
With versions prior to gcc 3.3 we get the output
Assignment 1
Assignment 2
Assignment 3
Assignment 4
Destructor: i = 1
Destructor: i = 1
Destructor: i = 1
Destructor: i = 1
With gcc 3.3 and later we get
Destructor: i = 0
Destructor: i = 0
Destructor: i = 0
Destructor: i = 0
--
What |Removed |Added
----------------------------------------------------------------------------
CC| |reichelt at gcc dot gnu dot
| |org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20142