whitcomb@VIVALDI.BERKELEY.EDU (Gregg Whitcomb) (01/17/90)
machine: vax/ultrix gdb 3.4 g++ 1.36.3 (gcc 1.36.92) description: printing class with two base types displays the wrong fields and values for the second base class. gdb reports an internal error during symbol read. ------------ #include <stdio.h> struct base1 { int b1; base1() {b1=0; }; }; struct base2 { int b2; base2() {b2=0; }; }; struct multipleDerived : base1, base2 { }; main() { multipleDerived d; d.b1 = 1; d.b2 = 2; printf("num1=%d num2=%d\n", d.b1, d.b2); } ------------ ic% g++ -g minheret.cc ic% gdb a.out GDB 3.4, Copyright (C) 1989 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 /net/vivaldi/users/whitcomb/test/g++/a.out...done. Type "help" for a list of commands. (gdb) l Reading in symbols for minheret.cc...Internal error: type offset non-zero in loo kup_basetype_typedone. 5 base1() {b1=0; }; 6 }; 7 struct base2 { 8 int b2; 9 base2() {b2=0; }; 10 }; 11 struct multipleDerived : base1, base2 { }; 12 13 main() 14 { (gdb) 15 multipleDerived d; 16 d.b1 = 1; 17 d.b2 = 2; 18 printf("num1=%d num2=%d\n", d.b1, d.b2); 19 } (gdb) break 18 Breakpoint 1 at 0x8e: file minheret.cc, line 18. (gdb) run Starting program: /net/vivaldi/users/whitcomb/test/g++/a.out Bpt 1, main (1, 2147468132, 2147468140) (minheret.cc line 18) 18 printf("num1=%d num2=%d\n", d.b1, d.b2); (gdb) p d $1 = { <base1> = {b1 = 1} <base2> = {b1 = 0} members of multipleDerived: } (gdb) n num1=1 num2=2 0xa0 18 printf("num1=%d num2=%d\n", d.b1, d.b2); (gdb) --------------- -Gregg (whitcomb@vivaldi.berkeley.edu)