public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] decl lang hooks
@ 2017-05-08 19:29 Nathan Sidwell
  2017-05-08 21:54 ` Joseph Myers
  2017-05-09 11:09 ` Marek Polacek
  0 siblings, 2 replies; 12+ messages in thread
From: Nathan Sidwell @ 2017-05-08 19:29 UTC (permalink / raw)
  To: GCC Patches; +Cc: Joseph Myers

[-- Attachment #1: Type: text/plain, Size: 547 bytes --]

cp/name-lookup has a twisty maze of forwarding functions.  One reason is 
that a couple of the names are used directly by c-common.c.  However, we 
now have lang hooks for these things.

This patch changes the C++ FE to override the pushdecl and getdecl lang 
hooks.  In addition to simply overriding them there, I had to fixup a 
couple of places in c-family/c-common.c and 
objc/objc-gnu-runtime-abi-01.c to use the pushdecl hook.

This patch doesn't reduce the twisty maze, but will enable me to do so 
shortly.

ok?

nathan
-- 
Nathan Sidwell

[-- Attachment #2: hook.diff --]
[-- Type: text/x-patch, Size: 4497 bytes --]

2017-05-08  Nathan Sidwell  <nathan@acm.org>

	gcc/c/
	* c-tree.h (pushdecl): Declare.
	gcc/cp/
	* cp-lang.c (get_global_decls, cxx_pushdecl): New.
	(LANG_HOOKS_GETDECLS, LANG_HOOKS_PUSHDECL): Override.
	* name-lookup.h (pushdecl_top_level): Declare.
	gcc/c-family/
	* c-common.c (c_register_builtin_type): Use pushdecl lang_hook.
	* c-common.h (pushdecl_top_level, pushdecl): Don't declare here.
	gcc/objc/
	* objc-gnu-runtime-abi-01.c (objc_add_static_instance): Use
	pushdecl lang_hook.

Index: c/c-tree.h
===================================================================
--- c/c-tree.h	(revision 247751)
+++ c/c-tree.h	(working copy)
@@ -506,6 +506,7 @@ extern tree c_break_label;
 extern tree c_cont_label;
 
 extern bool global_bindings_p (void);
+extern tree pushdecl (tree);
 extern void push_scope (void);
 extern tree pop_scope (void);
 extern void c_bindings_start_stmt_expr (struct c_spot_bindings *);
Index: c-family/c-common.c
===================================================================
--- c-family/c-common.c	(revision 247751)
+++ c-family/c-common.c	(working copy)
@@ -2589,7 +2589,7 @@ c_register_builtin_type (tree type, cons
   DECL_ARTIFICIAL (decl) = 1;
   if (!TYPE_NAME (type))
     TYPE_NAME (type) = decl;
-  pushdecl (decl);
+  lang_hooks.decls.pushdecl (decl);
 
   registered_builtin_types = tree_cons (0, type, registered_builtin_types);
 }
Index: c-family/c-common.h
===================================================================
--- c-family/c-common.h	(revision 247751)
+++ c-family/c-common.h	(working copy)
@@ -588,8 +588,7 @@ extern tree push_stmt_list (void);
 extern tree pop_stmt_list (tree);
 extern tree add_stmt (tree);
 extern void push_cleanup (tree, tree, bool);
-extern tree pushdecl_top_level (tree);
-extern tree pushdecl (tree);
+
 extern tree build_modify_expr (location_t, tree, tree, enum tree_code,
 			       location_t, tree, tree);
 extern tree build_array_notation_expr (location_t, tree, tree, enum tree_code,
Index: cp/cp-lang.c
===================================================================
--- cp/cp-lang.c	(revision 247751)
+++ cp/cp-lang.c	(working copy)
@@ -35,6 +35,8 @@ static tree cp_eh_personality (void);
 static tree get_template_innermost_arguments_folded (const_tree);
 static tree get_template_argument_pack_elems_folded (const_tree);
 static tree cxx_enum_underlying_base_type (const_tree);
+static tree get_global_decls ();
+static tree cxx_pushdecl (tree);
 
 /* Lang hooks common to C++ and ObjC++ are declared in cp/cp-objcp-common.h;
    consequently, there should be very few hooks below.  */
@@ -78,6 +80,10 @@ static tree cxx_enum_underlying_base_typ
 #define LANG_HOOKS_EH_RUNTIME_TYPE build_eh_type_type
 #undef LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE
 #define LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE cxx_enum_underlying_base_type
+#undef LANG_HOOKS_GETDECLS
+#define LANG_HOOKS_GETDECLS get_global_decls
+#undef LANG_HOOKS_PUSHDECL
+#define LANG_HOOKS_PUSHDECL cxx_pushdecl
 
 /* Each front end provides its own lang hook initializer.  */
 struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
@@ -229,5 +235,21 @@ tree cxx_enum_underlying_base_type (cons
   return underlying_type;
 }
 
+/* Return the list of decls in the global namespace.  */
+
+static
+tree get_global_decls ()
+{
+  return NAMESPACE_LEVEL (global_namespace)->names;
+}
+
+/* Push DECL into the current scope.  */
+
+static
+tree cxx_pushdecl (tree decl)
+{
+  return pushdecl (decl);
+}
+
 #include "gt-cp-cp-lang.h"
 #include "gtype-cp.h"
Index: cp/name-lookup.h
===================================================================
--- cp/name-lookup.h	(revision 247752)
+++ cp/name-lookup.h	(working copy)
@@ -342,4 +342,6 @@ extern tree innermost_non_namespace_valu
 extern cxx_binding *outer_binding (tree, cxx_binding *, bool);
 extern void cp_emit_debug_info_for_using (tree, tree);
 
+extern tree pushdecl_top_level			(tree);
+
 #endif /* GCC_CP_NAME_LOOKUP_H */
Index: objc/objc-gnu-runtime-abi-01.c
===================================================================
--- objc/objc-gnu-runtime-abi-01.c	(revision 247751)
+++ objc/objc-gnu-runtime-abi-01.c	(working copy)
@@ -888,7 +888,7 @@ objc_add_static_instance (tree construct
   /* We may be writing something else just now.
      Postpone till end of input. */
   DECL_DEFER_OUTPUT (decl) = 1;
-  pushdecl_top_level (decl);
+  lang_hooks.decls.pushdecl (decl);
   rest_of_decl_compilation (decl, 1, 0);
 
   /* Add the DECL to the head of this CLASS' list.  */

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2017-05-13  6:16 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-08 19:29 [PATCH] decl lang hooks Nathan Sidwell
2017-05-08 21:54 ` Joseph Myers
2017-05-09 11:36   ` Nathan Sidwell
2017-05-11 17:56     ` Rainer Orth
2017-05-11 18:20       ` Nathan Sidwell
2017-05-12  7:27         ` Richard Biener
2017-05-13  1:40           ` Nathan Sidwell
2017-05-13  6:59             ` Richard Biener
2017-05-11 19:16       ` Nathan Sidwell
2017-05-12 18:47         ` Mike Stump
2017-05-09 11:09 ` Marek Polacek
2017-05-09 11:18   ` Nathan Sidwell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).