Re: GDB syntax error if class members overlap C++ header file names

Simon Marchi <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
On 2018-02-13 10:37, Paul Smith wrote:
> Has anyone had any thoughts about
> https://sourceware.org/bugzilla/show_bug.cgi?id=22231
> 
> This is a really unfortunate bug, because there are so many useful
> symbol names which are also C++ header files!  Just ran into this again
> with "queue".
> 
> Quoted from the bug:
> 
>> I've discovered that if you compile a C++ program with -ggdb3 (not
>> -g) then any C++ header file (sans .h extension) that is included
>> will cause a syntax error whenever you try to print that name.  Also,
>> if you try to print a class member with that name it will also fail.
>> 
>> I've tried this with GDB 7.7, 7.11, and 8.0 and all behave the same
>> way.  I've used both GCC 6.2 and 6.3.
> 
> And I've tried 8.1 as well just to be sure; same behavior:
> 
>> (gdb) p memory
>> A syntax error in expression, near `'.
>> 
>> This will be the same for any other C++ (without .h) header that is
>> included.  If you change to #include <memory.h> then you won't get
>> this error (you'll get 'No symbole "memory" in current context.' as
>> expected).
>> 
>> If you create a local variable or an auto variable named "memory",
>> GDB will print it properly.
>> 
>> However, if you have a class member named "memory", GDB again won't
>> parse it;
> 
>> (gdb) p foo.memory
>> A syntax error in expression, near `'.
>> 
>> 
>> 
>> If you enable debugging you'll see:
>> 
>> (gdb) set debug parser on
>> (gdb) p memory
>> Starting parse
>> Entering state 0
>> Reading a token: Next token is token FILENAME (bval<0x1a66ac0>)
>> Shifting token FILENAME (bval<0x1a66ac0>)
>> Entering state 47
>> Reducing stack by rule 107 (line 877):
>>    $1 = token FILENAME (bval<0x1a66ac0>)
>> -> $$ = nterm block ()
>> Stack now 0
>> Entering state 57
>> Reading a token: Now at end of input.
>> A syntax error in expression, near `'.

Hi Paul,

This looks like an issue that has been fixed recently, but it's not in 
8.1, only master.

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=59498c305e6f1db2a1ed8d44cb58f0d24ec092fe

Can you verify if it works for 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.