🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: gnu.g++.bug
Article #1899

operator delete()

#1899
From: James Clark
Date: Mon, 24 Apr 1989 11:28
76 lines
1857 bytes
There's a bug in version 1.34.2 g++'s handling of the member version
of operator delete. This can lead to operator delete getting called
twice for the same object.

Script started on Mon Apr 24 11:55:22 1989
jclark% cat bug.c
#include <stdio.h>


struct A {
  void *operator new(long);
  void operator delete(void *);
  virtual ~A();
};

struct B : A {
  ~B();
};


struct C : B {
  ~C();
};

void *A::operator new(long n)
{
  fprintf(stderr, "A::operator new(%d)\n", n);
  return new char[n];
}

void A::operator delete(void *p)
{
  fprintf(stderr, "A::operator delete(%d)\n", p);
}

A::~A()
{
  fprintf(stderr, "A::~A()\n");
}

B::~B()
{
  fprintf(stderr, "B::~B()\n");
}

C::~C()
{
  fprintf(stderr, "C::~C()\n");
}

main()
{
  A *p = new C;
  delete p;
}
jclark% ./g++ -g -v -B./ bug.c
g++ version 1.34.2
 /usr/local/lib/gcc-cpp -+ -v -undef -D__GNU__ -D__GNUG__ -Dsparc -Dsun -Dunix -D__sparc__ -D__sun__ -D__unix__ bug.c /tmp/cca25922.cpp
GNU CPP version 1.34
 ./c++ /tmp/cca25922.cpp -quiet -dumpbase bug.c -g -version -o /tmp/cca25922.s
GNU C++ version 1.34.2 (sparc) compiled by GNU C version 1.34.
 as /tmp/cca25922.s -o bug.o
 ./ld++ -C -C ./crt0+.o bug.o -lg++ /usr/local/lib/gcc-gnulib -lg -lc
jclark% a.out
A::operator new(4)
C::~C()
B::~B()
A::~A()
A::operator delete(43056)
A::operator delete(43056)
jclark% exit
jclark% 
script done on Mon Apr 24 11:55:55 1989

James Clark
jjc@jclark.uucp
Technical Details
Message-ID: <8904241128.AA25942@jclark.uucp>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!UUNET.UU.NET!jclark!jjc

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!UUNET.UU.NET!jclark!jjc
From: jclark!jjc@UUNET.UU.NET (James Clark)
Newsgroups: gnu.g++.bug
Subject: operator delete()
Message-ID: <8904241128.AA25942@jclark.uucp>
Date: 24 Apr 89 11:28:12 GMT
Sender: daemon@tut.cis.ohio-state.edu
Distribution: gnu
Organization: GNUs Not Usenet
Lines: 76