From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32666 invoked by alias); 17 Apr 2003 20:38:16 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 32645 invoked by uid 48); 17 Apr 2003 20:38:15 -0000 Date: Thu, 17 Apr 2003 20:38:00 -0000 Message-ID: <20030417203815.32644.qmail@sources.redhat.com> To: 188527@bugs.debian.org, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org, nobody@gcc.gnu.org, ttimonen@users.sourceforge.net From: bangerth@dealii.org Reply-To: bangerth@dealii.org, 188527@bugs.debian.org, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org, nobody@gcc.gnu.org, ttimonen@users.sourceforge.net, gcc-gnats@gcc.gnu.org Subject: Re: c++/10427: [3.2/3.3/3.4 regression] Stack corruption with variable-length automatic arrays and virtual destructors X-SW-Source: 2003-04/txt/msg00814.txt.bz2 List-Id: 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 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