c++: Set more DECL_CONTEXTs
authorNathan Sidwell <nathan@acm.org>
Tue, 28 Jul 2020 15:57:36 +0000 (08:57 -0700)
committerNathan Sidwell <nathan@acm.org>
Tue, 28 Jul 2020 16:01:32 +0000 (09:01 -0700)
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.

gcc/cp/cp-gimplify.c
gcc/cp/cp-objcp-common.c
gcc/cp/decl.c

index 0e949e29c5c62b0ddd4ae5f459448a09d19a9cb7..f8695835684ce6a6e2adf0245fd0ce5a520d08d9 100644 (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);
index dfd8be978b4001c2e90e04c5a4be7759cd088077..fecf866988047136e293c2f27cb8697e3963ae05 100644 (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);
 }
 
index 385b1f3a0c4ee86a4b68f8fd4402e06ca2a0e963..b4beaa94257bc1818dae6f72ea95757d21adc0d4 100644 (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))
     {