c++: Hash table iteration for namespace-member spelling suggestions

Nathan Sidwell nathan@acm.org
Fri Oct 2 18:23:27 GMT 2020


For 'no such binding' errors, we iterate over binding levels to find a
close match.  At the namespace level we were using DECL_ANTICIPATED to
skip undeclared builtins.  But (a) there are other unnameable things
there and (b) decl-anticipated is about to go away.  This changes the
namespace scanning to iterate over the hash table, and look at
non-hidden bindings.  This does mean we look at fewer strings
(hurrarh), but the order we meet them is somewhat 'random'.  Our
distance measure is not very fine grained, and a couple of testcases
change their suggestion.  I notice for the c/c++ common one, we now
match the output of the C compiler.  For the other one we think 'int'
and 'int64_t' have the same distance from 'int64', and now meet the
former first.  That's a little unfortunate.  If it's too problematic I
suppose we could sort the strings via an intermediate array before
measuring distance.

         gcc/cp/
         * name-lookup.c (consider_decl): New, broken out of ...
         (consider_binding_level): ... here.  Iterate the hash table for
         namespace bindings.
         gcc/testsuite/
         * c-c++-common/spellcheck-reserved.c: Adjust diagnostic.
         * g++.dg/spellcheck-typenames.C: Adjust diagnostic.

pushing to trunk

nathan

-- 
Nathan Sidwell
-------------- next part --------------
A non-text attachment was scrubbed...
Name: spello.diff
Type: text/x-patch
Size: 6380 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20201002/0ea1ce99/attachment.bin>


More information about the Gcc-patches mailing list