c++: Module lang hook overriding
authorNathan Sidwell <nathan@acm.org>
Fri, 11 Dec 2020 14:42:26 +0000 (06:42 -0800)
committerNathan Sidwell <nathan@acm.org>
Fri, 11 Dec 2020 14:44:26 +0000 (06:44 -0800)
This installs stub lang hooks for modules and creates the module dump file.

gcc/cp/
* cp-lang.c (LANG_HOOKS_PREPROCESS_MAIN_FILE): Override.
(LANG_HOOKS_PREPROCESS_OPTIONS): Override.
(LANG_HOOKS_PREPROCESS_TOKEN): Override.
* cp-objcp-common.c (cp_register_dumps): Add module dump.
(cp_handle_option): New.
* cp-objcp-common.h (cp_handle_option): Declare.
(LANG_HOOKS_HANDLE_OPTION): Override.
* cp-tree.h (module_dump_id): Declare.
* module.cc (module_dump_id): Define.
(module_begin_main_file, handle_module_option)
(module_preproces_options): Stubs.

gcc/cp/cp-lang.c
gcc/cp/cp-objcp-common.c
gcc/cp/cp-objcp-common.h
gcc/cp/cp-tree.h
gcc/cp/module.cc

index 9e980bc6de97906012557094c4c70d62cbff2a10..5d2aef45a7deba5b4aa4921338fa59a0159dd61e 100644 (file)
@@ -77,6 +77,12 @@ static tree cxx_enum_underlying_base_type (const_tree);
 #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_PREPROCESS_MAIN_FILE
+#define LANG_HOOKS_PREPROCESS_MAIN_FILE module_begin_main_file
+#undef LANG_HOOKS_PREPROCESS_OPTIONS
+#define LANG_HOOKS_PREPROCESS_OPTIONS module_preprocess_options
+#undef LANG_HOOKS_PREPROCESS_TOKEN
+#define LANG_HOOKS_PREPROCESS_TOKEN module_token_pre
 
 #if CHECKING_P
 #undef LANG_HOOKS_RUN_LANG_SELFTESTS
index 7ff4d3951b63c860950a8ad74634d973f52ed8df..84f0b5986e1950e9761fa2eb22024e575dada143 100644 (file)
@@ -438,6 +438,9 @@ cp_register_dumps (gcc::dump_manager *dumps)
   class_dump_id = dumps->dump_register
     (".class", "lang-class", "lang-class", DK_lang, OPTGROUP_NONE, false);
 
+  module_dump_id = dumps->dump_register
+    (".module", "lang-module", "lang-module", DK_lang, OPTGROUP_NONE, false);
+
   raw_dump_id = dumps->dump_register
     (".raw", "lang-raw", "lang-raw", DK_lang, OPTGROUP_NONE, false);
 }
@@ -551,4 +554,16 @@ cp_common_init_ts (void)
   c_common_init_ts ();
 }
 
+/* Handle C++-specficic options here.  Punt to c_common otherwise.  */
+
+bool
+cp_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value,
+                 int kind, location_t loc,
+                 const struct cl_option_handlers *handlers)
+{
+  if (handle_module_option (unsigned (scode), arg, value))
+    return true;
+  return c_common_handle_option (scode, arg, value, kind, loc, handlers);
+}
+
 #include "gt-cp-cp-objcp-common.h"
index 0936f166d5b7694ea5e39cc52e881e30c48548bb..4b5b96fedbc27a88770a1fc84961b82177ce8182 100644 (file)
@@ -34,6 +34,8 @@ extern tree cp_unit_size_without_reusable_padding (tree);
 extern tree cp_get_global_decls ();
 extern tree cp_pushdecl (tree);
 extern void cp_register_dumps (gcc::dump_manager *);
+extern bool cp_handle_option (size_t, const char *, HOST_WIDE_INT, int,
+                             location_t, const struct cl_option_handlers *);
 extern tree cxx_make_type_hook                 (tree_code);
 extern tree cxx_simulate_enum_decl (location_t, const char *,
                                    vec<string_int_pair>);
@@ -63,7 +65,7 @@ extern tree cxx_simulate_enum_decl (location_t, const char *,
 #undef LANG_HOOKS_REGISTER_DUMPS
 #define LANG_HOOKS_REGISTER_DUMPS cp_register_dumps
 #undef LANG_HOOKS_HANDLE_OPTION
-#define LANG_HOOKS_HANDLE_OPTION c_common_handle_option
+#define LANG_HOOKS_HANDLE_OPTION cp_handle_option
 #undef LANG_HOOKS_HANDLE_FILENAME
 #define LANG_HOOKS_HANDLE_FILENAME c_common_handle_filename
 #undef LANG_HOOKS_POST_OPTIONS
index 5cd2999ca85bd347b9e5d7e28cf9ca8abc08573a..63170fc013d5624bfdc74abbcf2671b218318284 100644 (file)
@@ -6330,6 +6330,7 @@ extern cp_parameter_declarator *no_parameters;
 
 /* Various dump ids.  */
 extern int class_dump_id;
+extern int module_dump_id;
 extern int raw_dump_id;
 
 /* in call.c */
index 11eb6dabb04188dfb8d61ee1f7fa02cf0300de5a..02b5af811896c411c5d6a4a75605207f0fcf7cc1 100644 (file)
@@ -65,6 +65,9 @@ along with GCC; see the file COPYING3.  If not see
 #include "intl.h"
 #include "langhooks.h"
 
+/* Id for dumping module information.  */
+int module_dump_id;
+
 /* What the current TU is.  */
 unsigned module_kind;
 
@@ -189,6 +192,11 @@ preprocessed_module (cpp_reader *)
 {
 }
 
+void
+module_begin_main_file (cpp_reader *, line_maps *, const line_map_ordinary *)
+{
+}
+
 void
 init_modules (cpp_reader *)
 {
@@ -207,3 +215,14 @@ void
 fini_modules ()
 {
 }
+
+bool
+handle_module_option (unsigned, const char *, int)
+{
+  return false;
+}
+
+void
+module_preprocess_options (cpp_reader *)
+{
+}