https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86329

--- Comment #6 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Author: dmalcolm
Date: Thu Feb 14 23:02:45 2019
New Revision: 268909

URL: https://gcc.gnu.org/viewcvs?rev=268909&root=gcc&view=rev
Log:
C++: don't offer bogus "._0" suggestions (PR c++/86329)

PR c++/86329 reports that the C++ frontend can offer bogus suggestions like:

  #include <string>

  int compare()
  {
    return __n1 - __n2;
  }

suggested.cc: In function 'int compare()':
suggested.cc:5:10: error: '__n1' was not declared in this scope
   return __n1 - __n2;
          ^~~~
suggested.cc:5:10: note: suggested alternative: '._61'
   return __n1 - __n2;
          ^~~~
          ._61
suggested.cc:5:17: error: '__n2' was not declared in this scope
   return __n1 - __n2;
                 ^~~~
suggested.cc:5:17: note: suggested alternative: '._72'
   return __n1 - __n2;
                 ^~~~
                 ._72

The dot-prefixed names are an implementation detail of how we implement
anonymous enums found in the header files, generated via
anon_aggrname_format in make_anon_name.

This patch uses anon_aggrname_p to filter them out when considering
which names to suggest.

gcc/cp/ChangeLog:
        Backport of r262199 from trunk.
        2018-06-27  David Malcolm  <dmalc...@redhat.com>

        PR c++/86329
        * name-lookup.c (consider_binding_level): Filter out names that
        match anon_aggrname_p.

gcc/testsuite/ChangeLog:
        Backport of r262199 from trunk.
        2018-06-27  David Malcolm  <dmalc...@redhat.com>

        PR c++/86329
        * g++.dg/lookup/pr86329.C: New test.


Added:
    branches/gcc-8-branch/gcc/testsuite/g++.dg/lookup/pr86329.C
Modified:
    branches/gcc-8-branch/gcc/cp/ChangeLog
    branches/gcc-8-branch/gcc/cp/name-lookup.c
    branches/gcc-8-branch/gcc/testsuite/ChangeLog

Reply via email to