+2019-05-20 Nathan Sidwell <nathan@acm.org>
+
+ * cp-tree.h (struct lang_decl_ns): Remove usings field.
+ (DECL_NAMESPACE_USING): Delete.
+ * name-lookup.c (name_lookup::search_usings): Use namespace's
+ binding scope.
+ (name_lookup::queue_namespae): Likewise.
+ (finish_namespace_using_directive, push_namespace): Likewise.
+ (has_using_namespace_std_directive): Just search the entire
+ binding stack.
+
2019-05-20 Jonathan Wakely <jwakely@redhat.com>
PR c++/90532 Ensure __is_constructible(T[]) is false
struct lang_decl_base base;
cp_binding_level *level;
- /* using directives and inline children. These need to be va_gc,
- because of PCH. */
- vec<tree, va_gc> *usings;
+ /* Inline children. These need to be va_gc, because of PCH. */
vec<tree, va_gc> *inlinees;
/* Hash table of bound decls. It'd be nice to have this inline, but
#define DECL_NAMESPACE_INLINE_P(NODE) \
TREE_LANG_FLAG_0 (NAMESPACE_DECL_CHECK (NODE))
-/* In a NAMESPACE_DECL, a vector of using directives. */
-#define DECL_NAMESPACE_USING(NODE) \
- (LANG_DECL_NS_CHECK (NODE)->usings)
-
/* In a NAMESPACE_DECL, a vector of inline namespaces. */
#define DECL_NAMESPACE_INLINEES(NODE) \
(LANG_DECL_NS_CHECK (NODE)->inlinees)
return true;
bool found = false;
- if (vec<tree, va_gc> *usings = DECL_NAMESPACE_USING (scope))
+ if (vec<tree, va_gc> *usings = NAMESPACE_LEVEL (scope)->using_directives)
for (unsigned ix = usings->length (); ix--;)
found |= search_qualified ((*usings)[ix], true);
queue = queue_namespace (queue, depth, (*inlinees)[ix]);
/* Queue its using targets. */
- queue = queue_usings (queue, depth, DECL_NAMESPACE_USING (scope));
+ queue = queue_usings (queue, depth, NAMESPACE_LEVEL (scope)->using_directives);
return queue;
}
{
/* Look at local using-directives. */
for (cp_binding_level *level = current_binding_level;
- level->kind != sk_namespace;
+ level;
level = level->level_chain)
if (using_directives_contain_std_p (level->using_directives))
return true;
- /* Look at this namespace and its ancestors. */
- for (tree scope = current_namespace; scope; scope = CP_DECL_CONTEXT (scope))
- {
- if (using_directives_contain_std_p (DECL_NAMESPACE_USING (scope)))
- return true;
-
- if (scope == global_namespace)
- break;
- }
-
return false;
}
if (target == error_mark_node)
return;
- add_using_namespace (DECL_NAMESPACE_USING (current_namespace),
+ add_using_namespace (current_binding_level->using_directives,
ORIGINAL_NAMESPACE (target));
emit_debug_info_using_namespace (current_namespace,
ORIGINAL_NAMESPACE (target), false);
SET_DECL_ASSEMBLER_NAME (ns, anon_identifier);
if (!make_inline)
- add_using_namespace (DECL_NAMESPACE_USING (current_namespace),
+ add_using_namespace (current_binding_level->using_directives,
ns);
}
else if (TREE_PUBLIC (current_namespace))