[C++ PATCH] namespace using directives
https://gcc.gnu.org/ml/gcc-patches/2019-05/msg01245.html * 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. From-SVN: r271416
This commit is contained in:
parent
ab904df5f9
commit
0841bc1563
3 changed files with 17 additions and 22 deletions
|
@ -1,3 +1,14 @@
|
|||
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
|
||||
|
|
|
@ -2668,9 +2668,7 @@ struct GTY(()) lang_decl_ns {
|
|||
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
|
||||
|
@ -3259,10 +3257,6 @@ struct GTY(()) lang_decl {
|
|||
#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)
|
||||
|
|
|
@ -589,7 +589,7 @@ name_lookup::search_usings (tree scope)
|
|||
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);
|
||||
|
||||
|
@ -651,7 +651,7 @@ name_lookup::queue_namespace (using_queue *queue, int depth, tree scope)
|
|||
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;
|
||||
}
|
||||
|
@ -5272,21 +5272,11 @@ has_using_namespace_std_directive_p ()
|
|||
{
|
||||
/* 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;
|
||||
}
|
||||
|
||||
|
@ -7253,7 +7243,7 @@ finish_namespace_using_directive (tree target, tree attribs)
|
|||
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);
|
||||
|
@ -7404,7 +7394,7 @@ push_namespace (tree name, bool make_inline)
|
|||
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))
|
||||
|
|
Loading…
Add table
Reference in a new issue