Do not classify C struct members as a filename
authorLeszek Swirski <leszeks@google.com>
Thu, 25 Jan 2018 16:20:47 +0000 (16:20 +0000)
committerSimon Marchi <simon.marchi@polymtl.ca>
Fri, 2 Feb 2018 03:34:20 +0000 (22:34 -0500)
commit59498c305e6f1db2a1ed8d44cb58f0d24ec092fe
tree5d02582d3c31d0ac78156328185204d487ece91f
parent17545aa1bfa291def4674c6700c1c7a3575ee5c1
Do not classify C struct members as a filename

There is existing logic in C/C++ expression parsing to avoid classifying
names as a filename when they are a field on the this object. This
change extends this logic to also avoid classifying names after a
struct-op (-> or .) as a filename, which otherwise causes a syntax
error.

Thus, it is now possible in the file

    #include <map>
    struct D {
        void map();
    }
    D d;

to call

    (gdb) print d.map()

where previously this would have been a syntax error.

Tested on gdb.cp/*.exp

gdb/ChangeLog:

        * c-exp.y (lex_one_token, classify_name, yylex): Don't classify
        names after a structop as a filename

gdb/testsuite/ChangeLog:

        * gdb.cp/filename.cc, gdb.cp/filename.exp: Test that member
        functions with the same name as an include file are parsed
        correctly.
gdb/ChangeLog
gdb/c-exp.y
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.cp/filename.cc
gdb/testsuite/gdb.cp/filename.exp