printing VTT pointer?
Michael Elizabeth Chastain
mec@shout.net
Sun Jun 29 23:35:00 GMT 2003
I'm chasing down some regressions from gcc 3.2.2 to gcc 3.3.
There are three C++ stabs+ scripts with regressions.
Here's a difference from inherit.exp.
The class definitions are:
class vA { public: int va; int vc; };
class vB : public virtual vA { public: int vb; int vx; };
vB g_vB;
And the output from five different compilers is:
# gcc 2.95.3 -gstabs+
print g_vB^M
$73 = {<vA> = {va = 3, vx = 4}, _vb$vA = 0x804970c, vb = 5, vx = 6}^M
(gdb) PASS: gdb.c++/inherit.exp: print g_vB
# gcc 3.2.3 -gstabs+
print g_vB^M
$73 = {<vA> = {va = 3, vx = 4}, _vptr.vB = 0x804fe6c, vb = 5, vx = 6}^M
(gdb) PASS: gdb.c++/inherit.exp: print g_vB (FIXME v3 vtbl ptr)
# gcc 3.3 -gstabs+
print g_vB^M
$73 = {<vA> = {va = 3, vx = 4}, _vptr.vB = 0x804ea74 <VTT for vB>, vb = 5, vx = 6}^M
(gdb) FAIL: gdb.c++/inherit.exp: print g_vB
# gcc gcc-3_3-branch -gstabs+
print g_vB^M
$73 = {<vA> = {va = 3, vx = 4}, _vptr.vB = 0x804eab4 <VTT for vB>, vb = 5, vx = 6}^M
(gdb) FAIL: gdb.c++/inherit.exp: print g_vB
# gcc HEAD -gstabs+
print g_vB^M
$73 = {<vA> = {va = 3, vx = 4}, _vptr.vB = 0x8094bac, vb = 5, vx = 6}^M
(gdb) PASS: gdb.c++/inherit.exp: print g_vB (FIXME v3 vtbl ptr)
Sometimes gdb does not print a VTT, and sometimes gdb prints a VTT.
When it does print a VTT, the value is correct (it matches what I see
with x/w in the right location).
The VTT goes away again with gcc HEAD, which is annoying.
What's the right thing for the test script to expect? Should it require
the "<VTT for vB>" output? Or should it accept the output with or
without "<VTT for vb>"? Or is it actually correctly written, as is,
where it forbids "<VTT for vB>"?
Michael C
More information about the Gdb
mailing list