c++: Set more DECL_CONTEXTs

I discovered we were not setting DECL_CONTEXT in a few cases, and
grokfndecl's control flow wasn't making it clear that we were doing it
in all cases.

	gcc/cp/
	* cp-gimplify.c (cp_genericize_r): Set IMPORTED_DECL's context.
	* cp-objcp-common.c (cp_pushdecl): Set decl's context.
	* decl.c (grokfndecl): Make DECL_CONTEXT setting clearer.
This commit is contained in:
Nathan Sidwell 2020-07-28 08:57:36 -07:00
parent 0cd58a9f09
commit f3665bd111
3 changed files with 8 additions and 8 deletions

View File

@ -1495,6 +1495,7 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data)
{
tree using_directive = make_node (IMPORTED_DECL);
TREE_TYPE (using_directive) = void_type_node;
DECL_CONTEXT (using_directive) = current_function_decl;
IMPORTED_DECL_ASSOCIATED_DECL (using_directive) = decl;
DECL_CHAIN (using_directive) = BLOCK_VARS (block);

View File

@ -332,11 +332,12 @@ cp_get_global_decls ()
return NAMESPACE_LEVEL (global_namespace)->names;
}
/* Push DECL into the current scope. */
/* Push DECL into the current (namespace) scope. */
tree
cp_pushdecl (tree decl)
{
DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
return pushdecl (decl);
}

View File

@ -9560,7 +9560,9 @@ grokfndecl (tree ctype,
/* If this decl has namespace scope, set that up. */
if (in_namespace)
set_decl_namespace (decl, in_namespace, friendp);
else if (!ctype)
else if (ctype)
DECL_CONTEXT (decl) = ctype;
else
DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
/* `main' and builtins have implicit 'C' linkage. */
@ -9588,12 +9590,8 @@ grokfndecl (tree ctype,
if (deletedp)
DECL_DELETED_FN (decl) = 1;
if (ctype)
{
DECL_CONTEXT (decl) = ctype;
if (funcdef_flag)
check_class_member_definition_namespace (decl);
}
if (ctype && funcdef_flag)
check_class_member_definition_namespace (decl);
if (ctype == NULL_TREE && DECL_MAIN_P (decl))
{