jjc@UUNET.UU.NET (James Clark) (05/12/89)
I'm having problems with virtual base classes:
Script started on Thu May 11 18:53:46 1989
jclark% cat test.c
#include <stdio.h>
struct A {
int n;
void set(int);
void print();
};
void A::set(int i)
{
n = i;
}
void A::print()
{
fprintf(stderr, "%d\n", n);
}
struct B : virtual A {
};
main()
{
B *p = new B;
p->set(5);
p->print();
fprintf(stderr, "p->n = %d\n", p->n);
}
jclark% make test
/u/local/g++/g++ -B/u/local/g++/ -g -v -I. -sun4 -o test test.c
g++ version 1.35.0-
/usr/local/lib/gcc-cpp -+ -v -I. -undef -D__GNU__ -D__GNUG__ -Dsparc -Dsun -Dunix -D__sparc__ -D__sun__ -D__unix__ test.c /tmp/cca25650.cpp
GNU CPP version 1.35
/u/local/g++/cc1plus /tmp/cca25650.cpp -quiet -dumpbase test.c -noreg -version -G -o /tmp/cca25650.s
GNU C++ version 1.35.0- (sparc) compiled by GNU C version 1.35.
as /tmp/cca25650.s -o test.o
/u/local/g++/ld++ -o test -C -C /u/local/g++/crt0+.o test.o -lg++ /usr/local/lib/gcc-gnulib -lg -lc
/u/local/g++/g++: unrecognized option `-sun4'
jclark% test
Segmentation fault (core dumped)
jclark% gdb test core
GDB 3.1, Copyright (C) 1988 Free Software Foundation, Inc.
There is ABSOLUTELY NO WARRANTY for GDB; type "info warranty" for details.
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "info copying" to see the conditions.
Reading symbol data from /u/jjc/test/test...done.
Core file is from "test".
Program terminated with signal 11, Segmentation fault.
Type "help" for a list of commands.
(gdb) where
#0 0x2120 in set_PSA_SI ($this=(struct A *) 0x0, i=5) (test.c line 11)
#1 0x2198 in main () (test.c line 26)
(gdb) quit
jclark% exit
jclark%
script done on Thu May 11 18:54:21 1989
If I've understood virtual base classes, this ought to have worked.
James Clark
jjc@jclark.uucptiemann@YAHI.STANFORD.EDU (Michael Tiemann) (05/12/89)
I'm having problems with virtual base classes:
Script started on Thu May 11 18:53:46 1989
jclark% cat test.c
#include <stdio.h>
struct A {
int n;
void set(int);
void print();
};
void A::set(int i)
{
n = i;
}
void A::print()
{
fprintf(stderr, "%d\n", n);
}
struct B : virtual A {
};
main()
{
B *p = new B;
p->set(5);
p->print();
fprintf(stderr, "p->n = %d\n", p->n);
}
Here is what I get with this morning's compiler:
yahi% a.out
5
p->n = 5ekrell@ulysses.att.com (06/05/89)
With a pre-release cfront 2.0, I get: 5 p->n = 5 so it looks like you found a g++ bug.