c++/10427: [3.2/3.3/3.4 regression] Stack corruption with variable-length automatic arrays and virtual destructors
bangerth@dealii.org
bangerth@dealii.org
Thu Apr 17 20:38:00 GMT 2003
Old Synopsis: [3.0/3.2/3.3/3.4 regression] Stack corruption with variable-length automatic arrays and virtual destructors
New Synopsis: [3.2/3.3/3.4 regression] Stack corruption with variable-length automatic arrays and virtual destructors
State-Changed-From-To: open->analyzed
State-Changed-By: bangerth
State-Changed-When: Thu Apr 17 20:38:15 2003
State-Changed-Why:
Confirmed. This small variation shows what happens:
----------------------
#include <iostream>
struct A {
A () { std::cout << "A::A" << std::endl; }
~A() { std::cout << "A::~A" << std::endl;}
};
int main(void) {
int foo=1;
A bar[foo];
foo++;
return 0;
}
----------------------------
g/x> /home/bangerth/bin/gcc-3.4-pre/bin/c++ x.cc
g/x> ./a.out
A::A
A::~A
A::~A
Ups. If we make the destructor virtual, we have to look
up the vtable, but since the expected number of objects
doesn't match the actual number, the vtable pointer is
wrong, and we jump into Nirvana.
W.
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=10427
More information about the Gcc-bugs
mailing list