aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/module.cc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2020-12-09 04:52:51 -0800
committerNathan Sidwell <nathan@acm.org>2020-12-09 04:56:47 -0800
commitcf97b970fe598740ee0833729bcdce5dc3913f2d (patch)
tree4ab0ae5991d8bceef81fc69d7457c9b21fea2adf /gcc/cp/module.cc
parent72217b5ddb2a15e2606f4b15b147dd59fe8e6216 (diff)
downloadgcc-cf97b970fe598740ee0833729bcdce5dc3913f2d.zip
gcc-cf97b970fe598740ee0833729bcdce5dc3913f2d.tar.gz
gcc-cf97b970fe598740ee0833729bcdce5dc3913f2d.tar.bz2
c++: Decl module-specific semantic processing
This adds the module-specific logic to the various declaration processing routines in decl.c and semantic.c. I also adjust the rtti type creation, as those are all in the global module, so we need to temporarily clear the module_kind, when they are being created. Finally, I added init and fini module processing with the initialier giving a fatal error if you try and turn it on (so don't do that yet). gcc/cp/ * decl.c (duplicate_decls): Add module-specific redeclaration logic. (cxx_init_decl_processing): Export the global namespace, maybe initialize modules. (start_decl): Reject local-extern in a module, adjust linkage of template var. (xref_tag_1): Add module-specific redeclaration logic. (start_enum): Likewise. (finish_enum_value_list): Export unscoped members of an exported enum. (grokmethod): Implement p1779 linkage of in-class defined functions. * decl2.c (no_linkage_error): Imports are ok. (c_parse_final_cleanups): Call fini_modules. * lex.c (cxx_dup_lang_specific): Clear some module flags in the copy. * module.cc (module_kind): Define. (module_may_redeclare, set_defining_module): Stubs. (init_modules): Error on modules. (fini_modules): Stub. * rtti.c (push_abi_namespace): Save and reset module_kind. (pop_abi_namespace): Restore module kind. (build_dynamic_cast_1, tinfo_base_init): Adjust. * semantics.c (begin_class_definition): Add module-specific logic. (expand_or_defer_fn_1): Keep bodies of more fns when modules_p.
Diffstat (limited to 'gcc/cp/module.cc')
-rw-r--r--gcc/cp/module.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc
index 948ca2a..a961e3b 100644
--- a/gcc/cp/module.cc
+++ b/gcc/cp/module.cc
@@ -65,6 +65,9 @@ along with GCC; see the file COPYING3. If not see
#include "intl.h"
#include "langhooks.h"
+/* What the current TU is. */
+unsigned module_kind;
+
module_state *
get_module (tree, module_state *, bool)
{
@@ -99,12 +102,23 @@ get_originating_module (tree, bool)
return 0;
}
+bool
+module_may_redeclare (tree)
+{
+ return true;
+}
+
void
set_instantiating_module (tree)
{
}
void
+set_defining_module (tree)
+{
+}
+
+void
set_originating_module (tree, bool)
{
}
@@ -120,3 +134,16 @@ preprocessed_module (cpp_reader *)
{
}
+void
+init_modules (cpp_reader *)
+{
+ /* Do not turn on yet. */
+ if (modules_p ())
+ fatal_error (input_location,
+ "Shtopp! What are you doing? This is not ready yet.");
+}
+
+void
+fini_modules ()
+{
+}