Thread View: gnu.g++.bug
1 messages
1 total messages
Started by Bryan Boreham
Fri, 27 Oct 1989 18:09
Pointer-to-virtual-function loser
Author: Bryan Boreham
Date: Fri, 27 Oct 1989 18:09
Date: Fri, 27 Oct 1989 18:09
88 lines
2126 bytes
2126 bytes
Program:
class firble
{
public:
int bar;
virtual void Print();
};
class smartptr
{
public:
int foo;
firble* operator->();
};
int main()
{
typedef void (firble::*FPTR) ();
FPTR x;
smartptr y;
(y->*x)(); // This is the interesting line.
return 0;
}
Compilation:
cc1plus test5.cc -quiet -dumpbase test5.cc -Wall -noreg -version -o test5.s
GNU C++ version 1.36.0- (based on GCC 1.36) (68k, MIT syntax) compiled by GNU C version 1.36.
default target switches: -m68020 -mc68020 -m68881 -mbitfield
Assembly: (for a Sun 3)
#NO_APP
gcc_compiled.:
.text
.even
.globl _main
_main:
link a6,#-8
movel a2,sp@-
jbsr ___main
movel d0,d0
tstl a6@(-4)
jle L2 <------ test the high bit to see if this is virtual.
movel a6@(-4),a2
jra L3
L2: <------ only get here if x points to a virtual fn.
movel a6,d0
subql #8,d0
movel d0,sp@-
jbsr _op$component__8smartptre
addqw #4,sp
movel d0,a0
movel a6@(-4),d0
asll #3,d0
movel a0@(4),a1
movel a1@(4,d0:l),a2
L3:
movel a0,sp@-
jbsr a2@
clrl d0
jra L1
clrl d0
jra L1
L1:
movel a6@(-12),a2
unlk a6
rts
So the operator-> is only called if the pointer passed is to a virtual
function. This doesn't seem right, especially since a0 doesn't contain
anything interesting at L3 in the non-virtual case.
This happened in g++ 1.35 too. I hope it isn't a language feature.
Bryan Boreham bryan@kewill.uucp
Software Engineer || bryan%kewill@uunet.uu.net
Kewill Systems PLC || ... uunet!mcvax!ukc!root44!kewill!bryan
Walton-On-Thames
Surrey, England Telephone: (+44) 932 248 328
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads