On Tue, Jun 04, 2019 at 11:13:14AM -0400, Nathan Sidwell wrote:
> -  /* Type found, check if it is in the allowed scopes, ignoring cleanup
> -     and template parameter scopes.  */
> -  if (val)
> +  if (b->kind != sk_namespace)
> +    /* Look in non-namespace scopes.  */
> +    for (cxx_binding *iter = NULL;
> +      (iter = outer_binding (name, iter, /*class_p=*/ true)); )
> +      {
> +     /* First check we're supposed to be looking in this scope --
> +        if we're not, we're done.  */
> +     for (; b != iter->scope; b = b->level_chain)
> +       if (!(b->kind == sk_cleanup
> +             || b->kind == sk_template_parms
> +             || b->kind == sk_function_parms
> +             || (b->kind == sk_class
> +                 && scope == ts_within_enclosing_non_class)))
> +         return NULL_TREE;

[...]

> +  /* Now check if we can look in namespace scope.  */
> +  for (; b->kind != sk_namespace; b = b->level_chain)
> +    if (!(b->kind == sk_cleanup
> +       || b->kind == sk_template_parms
> +       || b->kind == sk_function_parms
> +       || (b->kind == sk_class
> +           && scope == ts_within_enclosing_non_class)))
> +      return NULL_TREE;

Looks like we could break that out into a new predicate function?
Something like allowed_scope_p?

Marek

Reply via email to