From 1c4320eb2a7a997a4388a7d51153b4d2e2e17ab3 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Tue, 21 May 2019 15:31:28 +0000 Subject: [PATCH] [C++ PATCH] Using decls https://gcc.gnu.org/ml/gcc-patches/2019-05/msg01411.html * name-lookup.c (do_nonmember_using_decl): Drop INSERT_P parameter. Document. (finish_nonmember_using_decl): Adjust do_nonmember_using_decl calls. Remove stray FIXME comment. From-SVN: r271471 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/name-lookup.c | 39 ++++++++++++++++++--------------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2095e1f5b4b..972bc36c0be 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2019-05-21 Nathan Sidwell + * name-lookup.c (do_nonmember_using_decl): Drop INSERT_P + parameter. Document. + (finish_nonmember_using_decl): Adjust do_nonmember_using_decl + calls. Remove stray FIXME comment. + * name-lookup.h (struct cp_binding_level): Drop usings field. (finish_namespace_using_decl, finish_local_using_decl): Replace with ... (finish_nonmember_using_decl): ... this. diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 1c21adba682..0dcaf651656 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -3882,15 +3882,16 @@ pushdecl_outermost_localscope (tree x) return ret; } -/* Process a local-scope or namespace-scope using declaration. - FIXME - is the nominated scope to search for NAME. VALUE_P and TYPE_P - point to the binding for NAME in the current scope and are - updated. */ +/* Process a local-scope or namespace-scope using declaration. LOOKUP + is the result of qualified lookup (both value & type are + significant). FN_SCOPE_P indicates if we're at function-scope (as + opposed to namespace-scope). *VALUE_P and *TYPE_P are the current + bindings, which are altered to reflect the newly brought in + declarations. */ static bool do_nonmember_using_decl (name_lookup &lookup, bool fn_scope_p, - bool insert_p, tree *value_p, tree *type_p) + tree *value_p, tree *type_p) { tree value = *value_p; tree type = *type_p; @@ -3957,7 +3958,7 @@ do_nonmember_using_decl (name_lookup &lookup, bool fn_scope_p, } } - if (!found && insert_p) + if (!found) /* Unlike the decl-pushing case we don't drop anticipated builtins here. They don't cause a problem, and we'd like to match them with a future declaration. */ @@ -3972,7 +3973,7 @@ do_nonmember_using_decl (name_lookup &lookup, bool fn_scope_p, diagnose_name_conflict (lookup.value, value); failed = true; } - else if (insert_p) + else value = lookup.value; if (lookup.type && lookup.type != type) @@ -3982,21 +3983,18 @@ do_nonmember_using_decl (name_lookup &lookup, bool fn_scope_p, diagnose_name_conflict (lookup.type, type); failed = true; } - else if (insert_p) + else type = lookup.type; } - if (insert_p) + /* If value is empty, shift any class or enumeration name back. */ + if (!value) { - /* If value is empty, shift any class or enumeration name back. */ - if (!value) - { - value = type; - type = NULL_TREE; - } - *value_p = value; - *type_p = type; + value = type; + type = NULL_TREE; } + *value_p = value; + *type_p = type; return failed; } @@ -5080,7 +5078,7 @@ finish_nonmember_using_decl (tree scope, tree name) tree value = MAYBE_STAT_DECL (*slot); tree type = MAYBE_STAT_TYPE (*slot); - do_nonmember_using_decl (lookup, false, true, &value, &type); + do_nonmember_using_decl (lookup, false, &value, &type); if (STAT_HACK_P (*slot)) { @@ -5110,7 +5108,7 @@ finish_nonmember_using_decl (tree scope, tree name) /* DR 36 questions why using-decls at function scope may not be duplicates. Disallow it, as C++11 claimed and PR 20420 implemented. */ - do_nonmember_using_decl (lookup, true, true, &value, &type); + do_nonmember_using_decl (lookup, true, &value, &type); if (!value) ; @@ -5123,7 +5121,6 @@ finish_nonmember_using_decl (tree scope, tree name) } else /* Install the new binding. */ - // FIXME: Short circuit P_L_B push_local_binding (name, value, true); if (!type) -- 2.30.2