Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Simon Marchi <simon.marchi@polymtl.ca>
To: psmith@gnu.org
Cc: gdb@sourceware.org
Subject: Re: GDB syntax error if class members overlap C++ header file names
Date: Tue, 13 Feb 2018 15:52:00 -0000	[thread overview]
Message-ID: <dd1db98b3b460fe3d9fe7ab39499a701@polymtl.ca> (raw)
In-Reply-To: <1518536232.1130.9.camel@gnu.org>

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


  reply	other threads:[~2018-02-13 15:52 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-13 15:37 Paul Smith
2018-02-13 15:52 ` Simon Marchi [this message]
2018-02-13 16:52   ` Paul Smith

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=dd1db98b3b460fe3d9fe7ab39499a701@polymtl.ca \
    --to=simon.marchi@polymtl.ca \
    --cc=gdb@sourceware.org \
    --cc=psmith@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox