This is the mail archive of the
gdb-prs@sources.redhat.com
mailing list for the GDB project.
Re: c++/1209: Enums as template parameters produce "can't find class" errors
- From: Daniel Jacobowitz <drow at mvista dot com>
- To: nobody at sources dot redhat dot com
- Cc: gdb-prs at sources dot redhat dot com,
- Date: 13 May 2003 02:48:00 -0000
- Subject: Re: c++/1209: Enums as template parameters produce "can't find class" errors
- Reply-to: Daniel Jacobowitz <drow at mvista dot com>
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