c++: Final module preparations
authorNathan Sidwell <nathan@acm.org>
Fri, 11 Dec 2020 19:10:40 +0000 (11:10 -0800)
committerNathan Sidwell <nathan@acm.org>
Fri, 11 Dec 2020 19:15:30 +0000 (11:15 -0800)
commit262784be3dcf91a712502b1f4f73e72155171f20
tree14271ae9e3e5bc5af0dc299565c458b7627cd6d9
parent02fc65c7263c75d222758d6c652b83e543872edf
c++: Final module preparations

This adds the final few preparations to drop modules in.  I'd missed a
couple of changes to core compiler -- a new pair of preprocessor
options, and marking the boundary of fixed and lazy global trees.

For C++, we need to add module.cc to the GTY scanner.  Parsing final
cleanups needs a few tweaks for modules.  Lambdas used to initialize a
global (for instance) get an extra scope, but we now need to point
that object to the lambda too.  Finally template instantiation needs
to do lazy loading before looking at the available instantiations and
specializations.

gcc/
* gcc.c (cpp_unique_options): Add Mmodules, Mno-modules.
* tree-core.h (enum tree_index): Add TI_MODULE_HWM.
gcc/cp/
* config-lang.in (gtfiles): Add cp/module.cc.
* decl2.c (c_parse_final_cleanups): Add module support.
* lambda.c (record_lambda_scope): Call maybe_attach_decl.
* module.cc (maybe_attach_decl, lazy_load_specializations): Stubs.
(finish_module_procesing): Stub.
* pt.c (lookup_template_class_1): Lazy load specializations.
(instantiate_template_1): Likewise.
gcc/cp/config-lang.in
gcc/cp/decl2.c
gcc/cp/lambda.c
gcc/cp/module.cc
gcc/cp/pt.c
gcc/gcc.c
gcc/tree-core.h