On 10/5/20 10:17 AM, Jakub Jelinek wrote:
On Mon, Oct 05, 2020 at 09:39:01AM -0400, Nathan Sidwell wrote:
My change to namespace-scope spell corrections ignored the issue that
different targets might have different builtins, and therefore perturb
iteration order.  This fixes it by using an intermediate array of
identifier, which we sort before considering.

         gcc/cp/
         * name-lookup.c (maybe_add_fuzzy_decl): New.
         (maybe_add_fuzzy_binding): New.
         (consider_binding_level): Use intermediate sortable vector for
         namespace bindings.
         gcc/testsuite/
         * c-c++-common/spellcheck-reserved.c: Restore diagnostic.

Won't that be unnecessarily expensive?
I mean, as implemented, it will push into the vector all non-artificial
decls, so perhaps tens of thousands of them into the vector, then qsort the 
vector
and only then consider it.

Well, we're giving a diagnostic, so expensive isn't really a consideration

So, either the code could hand-inline parts of what consider method
considers and only push into vectors decls that have the currently best
distance (and when encountering a better one truncate the vector before
pushing in).
Or add spellcheck.h consider alternative that would from candidates with the
same distance choose some particular one (e.g. the one where strcmp says it
compares earlier).
The
     if (min_candidate_distance >= m_best_distance)
would probably need changing to > and then have dist == m_best_distance
handling.

I tried fiddling with the distance metric, but that wasn't promising. It's simply too coarse.

nathan

--
Nathan Sidwell

Reply via email to