🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

objects not created/destroyed

#2139
From: Micheal Tiemann
Date: Mon, 08 Jan 1990 03:01
247 lines
5369 bytes
   Date: Sun, 7 Jan 90 18:48:54 -0800
   From: rjc@cs.ucla.edu (Robert Collins)

   Sun4/330, SunOS 4.0.3, latest version of g++-1.36.2

   Michael,

   Here is a short piece of code, it's compilation and execution, and the
   assembler produced for the code.

   The code calculates the size of an array of objects, and creates the array.
   The bug is that the array is not created (nor destroyed).  This was not
   any easy one to track down--naturally the program didn't just die
   immediately nor consistently...things are never that easy...

   Thanks,
   rob collins
   rjc@cs.ucla.edu


   Script started on Sun Jan  7 18:39:08 1990
   pollux% cat a.cc
   #include <stdio.h>

   class foo {
     private:
       int i;
     public:
       foo(int i = 1);
       ~foo();
   };

   foo::foo(int init) : i(init) { printf("constructing foo\n"); }
   foo::~foo() { printf("destructing foo\n"); }

   void bar(const float, const unsigned);

   main()
   {
       bar(5.3, 1);
   }

   void bar(const float r, unsigned i)
   {
       unsigned n = (unsigned) (r * (float) i);
       foo k[n];
   }

   pollux% g++ -v a.cc
   g++ version 1.36.2 (based on GCC 1.36)
    /usr/local/lib/gcc-cpp -+ -v -undef -D__GNUC__ -D__GNUG__ -D__cplusplus -Dsparc -Dsun -Dunix -D__sparc__ -D__sun__ -D__unix__ a.cc /usr/tmp/cca01001.cpp
   GNU CPP version 1.36.91
    /usr/local/lib/gcc-cc1plus /usr/tmp/cca01001.cpp -quiet -dumpbase a.cc -version -o /usr/tmp/cca01001.s
   GNU C++ version 1.36.2 (based on GCC 1.36) (sparc) compiled by GNU C version 1.36.
   default target switches: -mfpu -mepilogue
    /usr/local/lib/gcc-as -o a.o /usr/tmp/cca01001.s
    /usr/local/lib/gcc-ld -e start -dc -dp /lib/crt0.o a.o -lg++ /usr/local/lib/gcc-gnulib -lc
   pollux% a.out
   pollux% g++ -S a.cc
   pollux% cat a.s
   gcc_compiled.:
   .text
   LC0:
	   .ascii "constructing foo\12\0"
	   .align 4
   .global ___3fooi
	   .proc 1
   ___3fooi:
	   !#PROLOGUE# 0
	   save %sp,-112,%sp
	   !#PROLOGUE# 1
	   mov %i0,%l0
	   st %i1,[%fp+72]
	   ld [%fp+72],%o1
	   st %o1,[%l0]
	   sethi %hi(LC0),%o0
	   or %lo(LC0),%o0,%o0
	   call _printf,0
	   nop
	   mov %l0,%i0
   L1:
	   ret
	   restore
   LC1:
	   .ascii "destructing foo\12\0"
	   .align 4
   .global __$_foo
	   .proc 1
   __$_foo:
	   !#PROLOGUE# 0
	   save %sp,-112,%sp
	   !#PROLOGUE# 1
	   mov %i0,%l0
	   st %i1,[%fp+72]
	   sethi %hi(LC1),%o0
	   or %lo(LC1),%o0,%o0
	   call _printf,0
	   nop
   L3:
	   ld [%fp+72],%o0
	   tst %o0
	   be L4
	   nop
	   mov %l0,%o0
	   call ___builtin_delete,0
	   nop
	   b L5
	   nop
   L4:
   L5:
   L2:
	   ret
	   restore
	   .align 4
   LC2:
	   .single 0r5.29999999999999982236e+00
	   .align 4
   .global _main
	   .proc 1
   _main:
	   !#PROLOGUE# 0
	   save %sp,-112,%sp
	   !#PROLOGUE# 1
	   call ___main,0
	   nop
	   mov %o0,%o0
	   sethi %hi(LC2),%g1
	   ld [%g1+%lo(LC2)],%o0
	   mov 1,%o1
	   call _bar__FfUi,0
	   nop
	   mov 0,%i0
	   b L6
	   nop
   L6:
	   ret
	   restore
	   .align 4
   LC3:
	   .single 0r4.29496729600000000000e+09
	   .align 4
   .global _bar__FfUi
	   .proc 1
   _bar__FfUi:
	   !#PROLOGUE# 0
	   save %sp,-120,%sp
	   !#PROLOGUE# 1
	   st %g0,[%fp-16]
	   st %g0,[%fp-12]
	   st %i0,[%fp+68]
	   st %i1,[%fp+72]
	   ld [%fp+72],%f2
	   fitos %f2,%f2
	   ld [%fp-16],%f0
	   fcmpes %f2,%f0
	   nop
	   fbge L8
	   nop
	   sethi %hi(LC3),%g1
	   ld [%g1+%lo(LC3)],%f3
	   fadds %f2,%f3,%f2
   L8:
	   ld [%fp+68],%f3
	   fmuls %f2,%f3,%f2
	   fstod %f2,%f2
	   std %f2,[%fp-8]
	   ldd [%fp-8],%o0
	   call ___fixunsdfsi,0
	   nop
	   st %o0,[%fp-20]
	   ld [%fp-20],%o0
	   sll %o0,2,%l0
	   mov %sp,%l1
	   mov %l0,%o0
	   add %o0,7,%o1
	   srl %o1,3,%o0
	   sll %o0,3,%o0
	   sub %sp,%o0,%sp
	   mov %sp,%l2
	   add %l2,92,%l2
	   mov 0,%l3
	   mov %l2,%l3
	   mov %l2,%l4
	   ld [%fp-20],%o0
	   add %o0,-1,%l5
	   tst %l5
	   bl L9
	   nop
   L10:
	   mov %l4,%o0
	   mov 1,%o1
	   call ___3fooi,0
	   nop
	   add %l4,4,%l4
   L12:
	   add %l5,-1,%l5
	   cmp %l5,-1
	   be L11
	   nop
	   b L10
	   nop
   L11:
   L9:
	   ld [%fp-20],%o0
	   add %o0,-1,%l6
	   tst %l6
	   bl L13
	   nop
	   ld [%fp-20],%o0
	   add %o0,-1,%o0
	   add %o0,1,%o0
	   sll %o0,2,%o0
	   add %l2,%o0,%l7
   L14:
	   add %l7,-4,%l7
	   tst %l7
	   be L17
	   nop
	   mov %l7,%o0
	   mov 0,%o1
	   call __$_foo,0
	   nop
	   b L18
	   nop
   L17:
   L18:
   L16:
	   add %l6,-1,%l6
	   cmp %l6,-1
	   be L15
	   nop
	   b L14
	   nop
   L15:
   L13:
	   mov %l1,%sp
   L7:
	   ret
	   restore
   pollux% 
   script done on Sun Jan  7 18:40:21 1990

Not a bug in g++.ztar.Z put on trix.ai.mit.edu (128.52.32.6) this
morning.  Please use that as "latest test release".

Michael
Technical Details
Message-ID: <9001080301.AA02215@corn-chex>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!clyde.concordia.ca!uunet!tut.cis.ohio-state.edu!AI.MIT.EDU!tiemann
References: <9001080248.AA04109@maui.cs.ucla.edu>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!clyde.concordia.ca!uunet!tut.cis.ohio-state.edu!AI.MIT.EDU!tiemann
From: tiemann@AI.MIT.EDU (Micheal Tiemann)
Newsgroups: gnu.g++.bug
Subject: objects not created/destroyed
Message-ID: <9001080301.AA02215@corn-chex>
Date: 8 Jan 90 03:01:04 GMT
References: <9001080248.AA04109@maui.cs.ucla.edu>
Sender: daemon@tut.cis.ohio-state.edu
Distribution: gnu
Organization: GNUs Not Usenet
Lines: 247