This is the mail archive of the gdb-prs@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: c++/1209: Enums as template parameters produce "can't find class" errors


The following reply was made to PR c++/1209; it has been noted by GNATS.

From: Daniel Jacobowitz <drow@mvista.com>
To: ervan@tharas.com
Cc: gdb-gnats@sources.redhat.com, ramesh@tharas.com
Subject: Re: c++/1209: Enums as template parameters produce "can't find class" errors
Date: Mon, 12 May 2003 22:42:18 -0400

 On Tue, May 13, 2003 at 01:07:12AM -0000, ervan@tharas.com wrote:
 > 
 > >Number:         1209
 > >Category:       c++
 > >Synopsis:       Enums as template parameters produce "can't find class" errors
 > >Confidential:   no
 > >Severity:       non-critical
 > >Priority:       medium
 > >Responsible:    unassigned
 > >State:          open
 > >Class:          sw-bug
 > >Submitter-Id:   net
 > >Arrival-Date:   Tue May 13 01:08:01 UTC 2003
 > >Closed-Date:
 > >Last-Modified:
 > >Originator:     Ervan Darnell
 > >Release:        5.3
 > >Organization:
 > >Environment:
 > Red Hat Linux on i686 and using g++ 3.2.2 both to compile gdb 
 > and the test program.
 > >Description:
 > When an integer-style template parameter is specified with 
 > an enum, the demangler sees the integer value but the stabs
 > encodes the enum name.  For instance:
 > 
 > enum GNetConn {  GSimpleNetConn,  GLongNetConn };
 > 
 > template <GNetConn T>
 > class Sub2 : public Base { ....
 > 
 > Will cause the stabs to have Sub2<GsimpleNetConn> but the 
 > demangling will report Sub2<(GNetConn) 0>.  While logically
 > the same, gdb cannot find the correct class based on the 
 > (GNetConn) 0 cast:
 > 
 > warning: can't find class named `SubSub<(GNetConn)0>', as given by C++ RTTI
 > 
 > and it fails completely to print anything (the full 
 > attached example has another level of subclassing). 
 > Even when the proper cast is explicitly given, it still reports 
 > the error, but at least it works:
 >  p *(SubSub<GSimpleNetConn>*)z
 > warning: can't find class named `SubSub<(GNetConn)0>', as given by C++ RTTI
 > warning: can't find class named `SubSub<(GNetConn)0>', as given by C++ RTTI
 > $7 = warning: can't find class named `SubSub<(GNetConn)0>', as given by C++ RTTI
 > {<Sub2<GSimpleNetConn>> = {<Base> = {_vptr.Base = 0x8049af0, i = 6}, 
 >     k = 6}, t = 5}  
 > 
 > 
 > This bears some resemblance to PR.488.
 > >How-To-Repeat:
 > g++ -g gdbprob.cc
 > gdb ./a.out
 > then breakpoint in foo and print argument z.  The attachment
 > contains the full gdb interaction.
 
 Thanks for the testcase.  I don't have time to investigate right now,
 but to leave myself a note for later:
   The demangler normally produces the SubSub<(GNetConn)0> form when using
 DMGL_VERBOSE, and the SubSub<GSimpleNetConn> form otherwise.  I can't
 see where GDB is being inconsistent, but the trick to this one will be
 tracking down where the demangler is returning the overly-verbose form.
 
 > >Fix:
 > 
 > >Release-Note:
 > >Audit-Trail:
 > >Unformatted:
 > ----gnatsweb-attachment----
 > Content-Type: application/octet-stream; name="gdbprob.cc"
 > Content-Transfer-Encoding: base64
 > Content-Disposition: attachment; filename="gdbprob.cc"
 > 
 > Ly8gVGVtcGxhdGluZyBiYXNlZCBvbiBlbnVtcyBjb25mdXNlcyBnZGIgCi8vIEluIHRoZSBmb2xs
 > b3dpbmcsICJ4IiBjYW4gYmUgcHJpbnRlZCBpbiB0aGUgZGVidWdnZXIKLy8gYnV0ICJ5c2ltcGxl
 > IiBjYW5ub3QuIAoKY2xhc3MgQmFzZSB7CiAgICBpbnQgaTsKcHVibGljOgogICAgQmFzZSAoaW50
 > IGkpIDogaShpKSB7fTsKICAgIHZpcnR1YWwgaW50IGdldCgpIHsgcmV0dXJuIGk7IH0KfTsKCmNs
 > YXNzIFN1YjEgOiBwdWJsaWMgQmFzZSB7CiAgICBpbnQgajsKcHVibGljOgogICAgU3ViMSAoaW50
 > IGkpIDogQmFzZShpKzEpLCBqKGkrMSkge307CiAgICB2aXJ0dWFsIGludCBnZXQoKSB7IHJldHVy
 > biBCYXNlOjpnZXQoKSsxMDsgfQp9OwoKZW51bSBHTmV0Q29ubiB7CiAgR1NpbXBsZU5ldENvbm4s
 > CiAgR0xvbmdOZXRDb25uCn07CgoKdGVtcGxhdGUgPEdOZXRDb25uIFQ+CmNsYXNzIFN1YjIgOiBw
 > dWJsaWMgQmFzZSB7CiAgICBpbnQgazsKcHVibGljOgogICAgU3ViMiAoaW50IGkpIDogQmFzZShp
 > KzIpLCBrKGkrMikge307CiAgICB2aXJ0dWFsIGludCBnZXQoKSB7IHJldHVybiBCYXNlOjpnZXQo
 > KSsyMDsgfQp9OwoKdGVtcGxhdGUgPEdOZXRDb25uIFQ+CmNsYXNzIFN1YlN1YiA6IHB1YmxpYyBT
 > dWIyPFQ+IHsKICAgIGludCB0OwpwdWJsaWM6CiAgICBTdWJTdWIgKGludCBpLCBpbnQgdCkgOiBT
 > dWIyPFQ+KGkpLCB0KHQpIHt9OwogICAgdmlydHVhbCBpbnQgZ2V0KCkgeyByZXR1cm4gU3ViMjxU
 > Pjo6Z2V0KCkrMTAwOyB9Cn07CgppbnQgZm9vIChCYXNlKiB6KSB7CiAgICByZXR1cm4gei0+Z2V0
 > KCk7Cn0KCmludCBtYWluICgpIHsKICAgIFN1YjEgeCgzKTsKICAgIFN1YlN1YjxHU2ltcGxlTmV0
 > Q29ubj4gKnlzaW1wbGUgPSBuZXcgU3ViU3ViPEdTaW1wbGVOZXRDb25uPig0LDUpOwogICAgU3Vi
 > U3ViPEdMb25nTmV0Q29ubj4gKnlsb25nID0gbmV3IFN1YlN1YjxHTG9uZ05ldENvbm4+KDQsIDYp
 > OwogICAgaW50IHogPSBmb28oJngpICsgZm9vKHlzaW1wbGUpOwogICAgcmV0dXJuIDA7Cn0KCiNp
 > ZiBFWEFNUExFX09GX1RFU1RJTkdfQVRfTElOVVhfQ09NTUFORF9MSU5FCgo+Z2RiIC12CkdOVSBn
 > ZGIgNS4zCkNvcHlyaWdodCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpHREIg
 > aXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
 > c2UsIGFuZCB5b3UgYXJlCndlbGNvbWUgdG8gY2hhbmdlIGl0IGFuZC9vciBkaXN0cmlidXRlIGNv
 > cGllcyBvZiBpdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuClR5cGUgInNob3cgY29weWluZyIg
 > dG8gc2VlIHRoZSBjb25kaXRpb25zLgpUaGVyZSBpcyBhYnNvbHV0ZWx5IG5vIHdhcnJhbnR5IGZv
 > ciBHREIuICBUeXBlICJzaG93IHdhcnJhbnR5IiBmb3IgZGV0YWlscy4KVGhpcyBHREIgd2FzIGNv
 > bmZpZ3VyZWQgYXMgImk2ODYtcGMtbGludXgtZ251Ii4KPmcrKyAtdgpSZWFkaW5nIHNwZWNzIGZy
 > b20gL2ltcG9ydC9tYW54L3Rvb2xzL2djYy9kaXN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
 > Z251LzMuMi4yL3NwZWNzCkNvbmZpZ3VyZWQgd2l0aDogLi4vZ2NjLTMuMi4yL2NvbmZpZ3VyZSAt
 > LXByZWZpeD0vaW1wb3J0L21hbngvdG9vbHMvZ2NjL2Rpc3QgLS1lbmFibGUtbGFuZ3VhZ2VzPWMs
 > YysrClRocmVhZCBtb2RlbDogcG9zaXgKZ2NjIHZlcnNpb24gMy4yLjIKPmcrKyAtZyBnZGJwcm9i
 > LmNjCj5nZGIgLi9hLm91dApHTlUgZ2RiIDUuMwpDb3B5cmlnaHQgMjAwMiBGcmVlIFNvZnR3YXJl
 > IEZvdW5kYXRpb24sIEluYy4KR0RCIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdO
 > VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgeW91IGFyZQp3ZWxjb21lIHRvIGNoYW5nZSBp
 > dCBhbmQvb3IgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25z
 > LgpUeXBlICJzaG93IGNvcHlpbmciIHRvIHNlZSB0aGUgY29uZGl0aW9ucy4KVGhlcmUgaXMgYWJz
 > b2x1dGVseSBubyB3YXJyYW50eSBmb3IgR0RCLiAgVHlwZSAic2hvdyB3YXJyYW50eSIgZm9yIGRl
 > dGFpbHMuClRoaXMgR0RCIHdhcyBjb25maWd1cmVkIGFzICJpNjg2LXBjLWxpbnV4LWdudSIuLi4K
 > KGdkYikgYiBtYWluCkJyZWFrcG9pbnQgMSBhdCAweDgwNDg3NTk6IGZpbGUgZ2RicHJvYi5jYywg
 > bGluZSA0Ni4KKGdkYikgcnVuClN0YXJ0aW5nIHByb2dyYW06IC9ob21lL2VydmFuL2J1Z3MvMTQw
 > NC9hLm91dCAKCkJyZWFrcG9pbnQgMSwgbWFpbiAoKSBhdCBnZGJwcm9iLmNjOjQ2CjQ2CSAgICBT
 > dWIxIHgoMyk7CihnZGIpIG4gMwo0OQkgICAgaW50IHogPSBmb28oJngpICsgZm9vKHlzaW1wbGUp
 > OwooZ2RiKSBwIHgKJDEgPSB7PEJhc2U+ID0ge192cHRyLkJhc2UgPSAweDgwNDliNDAsIGkgPSA0
 > fSwgaiA9IDR9CihnZGIpIHAgKnlzaW1wbGUKd2FybmluZzogY2FuJ3QgZmluZCBjbGFzcyBuYW1l
 > ZCBgU3ViU3ViPChHTmV0Q29ubikwPicsIGFzIGdpdmVuIGJ5IEMrKyBSVFRJCiQyID0gezxTdWIy
 > PEdTaW1wbGVOZXRDb25uPj4gPSB7PEJhc2U+ID0ge192cHRyLkJhc2UgPSAweDgwNDlhZjAsIGkg
 > PSA2fSwgCiAgICBrID0gNn0sIHQgPSA1fSAgLS0tICoqKiB3b3JrZWQgaGVyZSwgZGVzcGl0ZSB3
 > YXJuaW5nCihnZGIpIHMKZm9vKEJhc2UqKSAoej0weGJmZmZmMTkwKSBhdCBnZGJwcm9iLmNjOjQy
 > CjQyCSAgICByZXR1cm4gei0+Z2V0KCk7CihnZGIpIHNldCBwcmludCBvYmplY3Qgb24KKGdkYikg
 > cCAqegokNCA9IChTdWIxKSB7PEJhc2U+ID0ge192cHRyLkJhc2UgPSAweDgwNDliNDAsIGkgPSA0
 > fSwgaiA9IDR9ICAtLS0gKioqKiAgd29ya2VkIGhlcmUKKGdkYikgZmluClJ1biB0aWxsIGV4aXQg
 > ZnJvbSAjMCAgZm9vKEJhc2UqKSAoej0weGJmZmZmMTkwKSBhdCBnZGJwcm9iLmNjOjQyCjB4MDgw
 > NDg4NjMgaW4gbWFpbiAoKSBhdCBnZGJwcm9iLmNjOjQ5CjQ5CSAgICBpbnQgeiA9IGZvbygmeCkg
 > KyBmb28oeXNpbXBsZSk7ClZhbHVlIHJldHVybmVkIGlzICQ1ID0gMTQKKGdkYikgcwpmb28oQmFz
 > ZSopICh6PTB4ODA0OWVmOCkgYXQgZ2RicHJvYi5jYzo0Mgo0MgkgICAgcmV0dXJuIHotPmdldCgp
 > OwooZ2RiKSBwICp6Cndhcm5pbmc6IGNhbid0IGZpbmQgY2xhc3MgbmFtZWQgYFN1YlN1YjwoR05l
 > dENvbm4pMD4nLCBhcyBnaXZlbiBieSBDKysgUlRUSQokNiA9IHdhcm5pbmc6IGNhbid0IGZpbmQg
 > Y2xhc3MgbmFtZWQgYFN1YlN1YjwoR05ldENvbm4pMD4nLCBhcyBnaXZlbiBieSBDKysgUlRUSQp7
 > X3ZwdHIuQmFzZSA9IDB4ODA0OWFmMCwgaSA9IDZ9IC0tLSAqKioqIGZhaWxlZCBoZXJlCihnZGIp
 > IHAgKihTdWJTdWI8R1NpbXBsZU5ldENvbm4+Kil6Cndhcm5pbmc6IGNhbid0IGZpbmQgY2xhc3Mg
 > bmFtZWQgYFN1YlN1YjwoR05ldENvbm4pMD4nLCBhcyBnaXZlbiBieSBDKysgUlRUSQp3YXJuaW5n
 > OiBjYW4ndCBmaW5kIGNsYXNzIG5hbWVkIGBTdWJTdWI8KEdOZXRDb25uKTA+JywgYXMgZ2l2ZW4g
 > YnkgQysrIFJUVEkKJDcgPSB3YXJuaW5nOiBjYW4ndCBmaW5kIGNsYXNzIG5hbWVkIGBTdWJTdWI8
 > KEdOZXRDb25uKTA+JywgYXMgZ2l2ZW4gYnkgQysrIFJUVEkKezxTdWIyPEdTaW1wbGVOZXRDb25u
 > Pj4gPSB7PEJhc2U+ID0ge192cHRyLkJhc2UgPSAweDgwNDlhZjAsIGkgPSA2fSwgCiAgICBrID0g
 > Nn0sIHQgPSA1fSAgLS0tICoqKiB3b3JrZWQgaGVyZSB3aXRoIGV4cGxpY2l0IGNhc3QgCiNlbmRp
 > Zgo=
 > 
 
 -- 
 Daniel Jacobowitz
 MontaVista Software                         Debian GNU/Linux Developer


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]