Re: C++ nested class bug/questions

Simon Marchi via Gdb <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
On 2021-06-22 7:27 a.m., Willgerodt, Felix via Gdb wrote:
> Hello everyone,
> 
> I was debugging a program similar to the one attached and noticed a couple
> of unexpected things happening. I compiled it with ”-g -O0” and g++ 11.1.0
> (clang showed similar behaviour) and saw this:
> 
> (gdb) bt
> #0  DF::vvv (this=0x7fffffffd120) at foo.cc:11
> #1  0x0000555555555180 in foo () at foo.cc:16
> #2  0x00005555555551a7 in main () at foo.cc:20
> (gdb) ptype abcd
> type = class DF::FFFF {
>   private:
>     int ffff;
> }
> (gdb) ptype FFFF
> No symbol "FFFF" in current context.
> (gdb) ptype DF::
> FFFF   vvv()  
> (gdb) ptype DF::FFFF
> There is no field named FFFF
> (gdb) ptype 'DF::FFFF'
> type = class DF::FFFF {
>   private:
>     int ffff;
> }
> (gdb)
> 
> (The fourth command shows tab completion.)
> 
> The problems I see are:
> 1) I think it shouldn’t be DF::FFFF.
> 2) 'ptype FFFF’ should just work as it is in the current scope.
> 3) There shouldn’t be a need to quote DF:FFFF, right? Although that might just be a side-effect here.
> 4) The fact that a suggestion from tab completion doesn’t work is annoying. This is probably also be a side-effect.
> 
> Before debugging this further, I wanted to see if there are any comments/suggestions.
> Am I even right about point 1? I couldn’t really find anything definitive
> in my favourite cpp reference on this type of nesting. g++ and clang output FFFF as
> foo()::DF::vvv()::FFFF as far as I can see.
> 
> I don’t see any obvious problems in the dwarf that is produced.
> 
> Thanks,
> Felix

I'm not a reference on this topic, but at first glance I agree with you.

Simon
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.