Merge commit '84110515b93' into devel/c++-modules
diff --git a/ChangeLog.modules b/ChangeLog.modules
new file mode 100644
index 0000000..5b69a87
--- /dev/null
+++ b/ChangeLog.modules
@@ -0,0 +1,17852 @@
+2021-01-04 Nathan Sidwell <nathan@acm.org>
+
+ Th, th, th, that's all folks!
+
+ There are a couple of cleanups it might be worth retrying in stage
+ 1.
+ gcc/cp/decl.c (fixup_anonymous_aggr): I don't think we set these
+ bits prematurely anymore?
+ gcc/gcc.c (process_command): We just seem to be doing the same @
+ processing ass add_infile?
+
+ Merge trunk a5469584f61
+
+ Merge trunk 6288183377a
+
+2020-12-21 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk e798f081925
+
+ gcc/cp/
+ * module.cc (has_definition): Check VAR_DECL's LANG_SPECIFIC.
+ gcc/testsuite/
+ * g++.dg/modules/gvar_[ab].C: New.
+
+2020-12-18 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 35b8d268746
+
+2020-12-15 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 433703843b3
+
+ Merge trunk 0feb237657c
+
+2020-12-14 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * diagnostic-core.h (progname): Remove comment.
+
+ Merge trunk 62c5ea52288
+ preprocessor: Deferred macro support
+
+ Named pipe support
+ gcc/cp
+ * mapper-client.cc (module_client::open_module): Allow named pipes.
+ gcc/
+ * doc/invoke.texi (C++ Module Mapper): Document.
+
+ libcpp/
+ * include/cpplib.h (struct cpp_macro): Rename imported field.
+ (struct cpp_hashnode): Update deferred doc.
+ * macro.c (_cpp_new_macro): Adjust.
+ (cpp_get_deferred_macro, get_deferred_or_lazy_macro): Assert more.
+ gcc/cp/
+ * module.cc (module_state::read_define): Adjust.
+ (module_state::install_macros): Likewise.
+
+2020-12-11 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 9324f7a25c7
+ c++: Avoid considering some conversion ops
+
+ gcc/cp/
+ * decl2.c (c_parse_final_cleanups): Refactor.
+
+ Merge trunk 1c6b86b50d4
+ c++: module test harness
+
+2020-12-10 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk e6e4b20de33
+ c++: name lookup API for modules
+
+ Merge trunk 4f1d8bd5096
+ c++: modules & using-decls
+
+ Merge trunk afc14c8d0a9
+ c++: modularize spelling suggestions
+
+2020-12-09 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (member_vec_dedup): Remove gratuitous chaining.
+ (check_local_shadow): No need to check for clone.
+
+ Merge trunk e4c3ec980fa
+ c++: Module-specific error and tree dumping
+
+ gcc/cp/
+ * module.cc (maybe_attach_decl): Use modules_p.
+ (module_preprocess_options): Likewise.
+ * pt.c (lookup_template_class_1)
+ (instantiate_template_specializations): Likewise.
+ * parser.c (cp_lexer_new_main): Rename confusing variable.
+
+ Merge trunk cf97b970fe5
+ c++: Decl module-specific semantic processing
+
+2020-12-08 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 570c312c03e
+ c++: Originating and instantiating module
+
+ Merge trunk dded5f78ccb
+ c++: template and clone fns for modules
+
+ Merge trunk 0bd4fecbea3
+ c++: Fix MODULE_VERSION breakage
+
+2020-12-07 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (comparing_typenames): Replace with ...
+ (map_context_from, map_context_to): ... this.
+ * typeck.c (structural_comptypes): Adjust.
+ * pt.c (comparing_typenames): Delete.
+ (spec_hasher::equal): Adjust.
+ * tree.c (cp_tree_equal): Check map_context_from & to for failed
+ parameter context.
+ * module.cc (map_context_from, map_context_to): Define.
+ (check_mergeable_decl): Set & unset map_context vars.
+ (trees_in::is_matching_decl): Likewise.
+ (module_state::read_cluster): Set & unset
+ comparing_specializations, not comparing_typenames.
+
+ Merge trunk ffb268ffcf9
+ c++: Adjust array type construction
+
+2020-12-04 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 5a26d4a204c
+ c++: Revert dependent-array changes
+
+ Merge trunk 97eaf8c92f9
+ c++: Module API declarations
+
+2020-12-03 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 62fb1b9e0da
+ c++: Fix array type dependency [PR 98107]
+
+ c++tools/
+ * configure.ac: Need ACX_NONCANONICAL_TARGET
+ * configure: Rebuilt.
+
+ c++tools/
+ * Makefile.in (libexecdir): Fix typo.
+
+2020-12-02 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * doc/invoke.texi (C++ Modules): Add CMI section.
+
+ gcc/cp/
+ * cp-tree.h (DECL_MODULE_PURVIEW_P, DECL_MODULE_IMPORT_P)
+ (DECL_MODULE_ENTITY_P): New.
+ (DECL_MODULE_PENDING_SPECIALIZATIONS_P): New.
+ (DECL_MODULE_PENDING_MEMBERS_P): New.
+ (DECL_MODULE_ATTACHMENTS_P): New.
+ (DECL_MODULE_EXPORT_P): New.
+ (struct lang_decl_base): Shrink sel field. Add new
+ module-specific fields.
+
+ gcc/cp/
+ * cp-tree.h (DECL_MODULE_PENDING_SPECIALIZATIONS_P)
+ (DECL_MODULE_PENDING_MEMBERS_P): Use same module_pending_p field.
+ (DECL_ATTACHED_DECLS_P): Rename to ...
+ (DECL_MODULE_ATTACHEMENTS_P): ... this. Use module_pending_p
+ field.
+ (struct lang_decl_base): Replace module_pending_specializations_p,
+ module_pending_members_p, attached_decls_p fields with single
+ module_pending_p field.
+ * module.cc (trees_{in,out}::lang_decl_bools): Only stream
+ module_pending_p for vars & fns.
+ (trees_{in,out}::decl_value): Adjust DECL_MODULE_ATTACHMENTS_P
+ changes.
+ (trees_out::get_merge_kind): Likewise.
+ (trees_in::key_mergeable, maybe_attach_decl): Likewise.
+ * lex.c (cxx_dup_lang_specific_decl): Directly clear some module flags.
+
+ Merge trunk 05f7a2afe8f
+ C++ Module Binding Vector
+
+ Merge trunk 41676a36a04
+ C++ Module keywords
+
+ gcc/cp/
+ * name-lookup.h: Rename MODULE_VECTOR and associated structs &
+ macros to BINDING_VECTOR.
+ * cp-tree.h: Adjust.
+ * cp-tree.def: Adjust.
+ * decl.c: Adjust.
+ * module.cc: Adjust.
+ * name-lookup.c: Adjust.
+ * ptree.c: Adjust.
+ * decl.c: Adjust.
+
+ gcc/cp/
+ * cp-tree.h (struct tree_module_vec): Move to ...
+ * name-lookup.h (struct tree_module_vec): ... here.
+
+ gcc/cp/
+ * lex.c (struct token_coro): Rename to ...
+ (struct module_token_filter): ... here. Adjust through out.
+
+2020-12-01 Nathan Sidwell <nathan@acm.org>
+
+ libcody/
+ Update from upstream, removing deprecated functions.
+
+ Merge trunk 855bb43f6d0
+
+ Merge trunk eae68c434f2
+ testsuite: Adjust pruning
+
+ Merge trunk 83a1beee276
+ libstdc++: Add C++2a synchronization support
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::decl_container): Stream template as
+ well as container. Do not strip (no nudity!)
+ gcc/testsuite/
+ * g++.dg/modules/noexcept-1{.h,_[ab].[HC]}: New.
+
+2020-11-30 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * doc/invoke.texi: Updates from review.
+
+2020-11-24 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 89d9c634dc5
+
+2020-11-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * Make-lang.in: Don't depend VERSION on src dir.
+ * module.cc: Note some potential issues.
+
+ gcc/
+ * doc/invoke.texi (-flang-include-translate-not): Document.
+ gcc/cp/
+ * module.cc (maybe_translate_include): Add not-translate noting.
+ gcc/c-family/
+ * c.opt (flang-include-translate-not): New.
+
+ libcody/
+ Update from upstream, INCLUDE_TRANSLATE response meaning change
+
+2020-11-20 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * doc/invoke.texi: Fixes.
+
+ libcody/
+ Update from upstream.
+
+ gcc/
+ * doc/invoke.texi: Update
+ * doc/cppopts.texi: Update
+
+ gcc/cp/
+ * cp-tree.h (match_mergeable_specialization): Take a spec_entry.
+ * pt.c (match_mergeable_specialization): Likewise.
+ * module.cc (trees_in::decl_value): Adjust.
+ (trees_{in,out}::key_mergeable): Adjust.
+ (specialization_add): Adjust.
+
+ gcc/
+ * doc/invoke.texi: Update
+ * doc/cppopts.texi: Update
+
+ Merge trunk 5bba2215c23
+ c++: Template hash access (
+
+ Merge trunk bf425849f1d
+ preprocessor: main-file cleanup
+
+2020-11-18 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-lang.c (LANG_HOOKS_PREPROCESS_UNDEF): Do not override here.
+ * cp-tree.h (module_cpp_undef): Do not declare.
+ * module.cc (module_cpp_undef): Delete.
+ (handle_module_option): Store cpp_main_search code in flag_header_unit.
+ (module_preprocess_options): Set main_search option here.
+ Conditionally set preprocess_undef lang hook here.
+
+ libcpp/
+ * include/cpplib.h (enum cpp_main_search): Add CMS_header value.
+ * internal.h (cpp_in_system_header): Rename to ...
+ (_cpp_in_system_header): ... here.
+ (cpp_in_primary_file): Rename to ...
+ (_cpp_in_main_source_file): ... here. Compare main_file equality
+ and check main_search value.
+ * lex.c (maybe_va_opt_error, _cpp_lex_direct): Adjust.
+ * macro.c (_cpp_builtin_macro_text): Adjust.
+ (replace_args): Likewise.
+ * directives.c (do_include_next): Adjust.
+ (do_pragma_once, do_pragma_system_header): Likewise.
+ * files.c (struct _cpp_file): Delete main_file field.
+ (pch_open): Check pfile->main_file equality.
+ (make_cpp_file): Drop cpp_reader parm, don't set main_file.
+ (_cpp_find_file): Adjust.
+ (_cpp_stack_file): Check pfile->main_file equality. Drop
+ main_file clearing.
+ (struct report_missing_guard_data): Add cpp_reader field.
+ (report_missing_guard): Check pfile->main_file equality.
+ (_cpp_report_missing_guards): Adjust.
+
+ Merge trunk 92648faa1cb
+ 08-cpp-mkdeps.diff
+ 05-cpp-files.diff
+ 04a-cpp-lexer.diff
+ 32-aix-fixincl.diff
+
+ Merge trunk d3ae802402b
+ 01-langhooks.diff
+ 02-cpp-line-maps.diff
+ 03-cpp-callbacks.diff
+ 19-global-trees.diff
+ 21a-int-cst.diff
+
+2020-11-16 Nathan Sidwell <nathan@acm.org>
+
+ Adjust lang hooks
+ gcc/c-family/
+ * c-opts.c (c_common_init): Drop preprocess_undef
+ gcc/cp/
+ * cp-lang.c (LANG_HOOKS_PREPROCESS_DEFERRED_MACRO): Delete.
+ * cp-tree.h (module_cpp_deferred_macro): Do not declare.
+ * module.cc (module_cpp_deferred_macro): Delete.
+ (module_preprocess_options): Set deferred macro and undef
+ callbacks here.
+ gcc/
+ * langhooks-def.h (LANG_HOOKS_PREPROCESS_UNDEF): Delete.
+ * langhooks.h (struct lang_hooks): Delete
+ preprocess_deferred_macro.
+
+ Constrained partial variable templates
+ gcc/cp/
+ * module.cc (trees_{in,out}::key_mergeable): Variable templates
+ can be partially specialized and constrained.
+ (finish_module_processing): Point at module decl, so ICEs blame
+ that.
+ gcc/testsuite/
+ * g++.dg/modules/var-tpl-concept-1{.h,_[ab].C}: New.
+
+ Merge trunk 63496cbea58
+
+ using enum support
+ gcc/cp/
+ * module.cc (trees_out::mark_class_def): Mark cloned enum consts
+ gcc/testsuite/
+ * g++.dd/modules/using-enum-1_[ab].[HC]: New.
+
+2020-11-13 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk d50310408f5
+ c++: Implement C++20 'using enum'.
+
+ Merge trunk e3b3b59683c
+
+ Fix libiberty linking
+ * g++tools/Makefile.in (LIBIBERTY): New.
+
+ Merge trunk 5fa821bba73
+
+2020-11-12 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 7f851c33411
+ libstdc++: Fix __numeric_traits_integer<__int20> [PR 97798]
+
+ Enum dedup ODR check fix
+ gcc/cp/
+ * tree.c (cp_tree_equal): Allow NON_LVALUE_EXPR &
+ VIEW_CONVERT_EXPR with NULL types.
+ gcc/testsuite/
+ * g++.dg/modules/loc-wrapper-1{.h,_a.H,_b.C}: New.
+
+ * Makefile.def: Fix g++ check implications.
+ * Makefile.in: Rebuilt.
+ gcc/
+ * config.in: Rebuilt.
+ * configure: Rebuilt.
+ * configure.ac: Remove unneeded checks
+ gcc/cp/
+
+ Merge trunk 3c3beb1a813
+
+2020-11-11 Nathan Sidwell <nathan@acm.org>
+
+ c++tools/
+ * resolver.h (module_resolver): Update to new API.
+ * resolver.cc (module_resolver): Likewise.
+
+2020-11-10 Nathan Sidwell <nathan@acm.org>
+
+ Adjust c++tools
+ * Makefile.def (c++tools): Depends on gcc
+ * Makefile.in: Rebuilt
+ c++tools/
+ * mapper.h: Rename to ...
+ * resolver.h: ... here. Move mapper-client to
+ gcc/cp/mapper-client.h
+ * resolver.cc: Adjust.
+ * configure.ac: Fix extraneous ]
+ * configure: Rebuilt.
+ gcc/cp/
+ * mapper-client.h: New, split from c++tools/mapper.h.
+ * mapper-client.cc: Adjust.
+ * mapper-resolver.cc: Adjust.
+ * module.cc: Adjust.
+
+ c++tools/
+ * mapper.h (class mapper_client): Add flag support.
+ gcc/cp/
+ * mapper-client: Likewise.
+ * module.cc (maybe_translate_include): Likewise.
+ (preprocessed_module): Likewise.
+
+ libcody/
+ Rebase on upstream -- $flag support.
+
+ Create c++tools dir
+ * Makefile.def: Add c++tools
+ * Makefile.tpl: Likewise.
+ * configure.ac: Likewise.
+ * Makefile.in: Regenerated.
+ * configure: Regenerated.
+ c++tools/
+ * Makefile.in: New.
+ * configure.ac: New.
+ * config.h.in: Generated
+ * configure: Generated
+ * mapper.h: Moved from gcc/cp.
+ * resolver.cc: Moved from gcc/cp/mapper-resolver.cc
+ * server.cc: Moved from gcc/cp/mapper-server.cc
+ gcc/
+ * configure.ac: Remove mapper-server-specific checks
+ * config.in: Rebuilt.
+ * configure: Rebuilt.
+ gcc/cp/
+ * Make-lang.in: Remove mapper-server.
+ * mapper-client.cc: Adjusted.
+ * mapper-resolver.cc: Moved to c++tools/resolver.cc, replaced with
+ stub here.
+ * mapper.h: Moved to c++tools, replaced with stub here.
+ * module.cc: Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/extern-tpl-1_b.C: Adjust invocation.
+ * g++.dg/modules/inc-xlate-1_e.C: Likewise.
+ * g++.dg/modules/legacy-2_b.H: Likewise.
+ * g++.dg/modules/legacy-6_c.C: Likewise.
+ * g++.dg/modules/legacy-6_d.C: Likewise.
+
+2020-11-09 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk e38cd64ac6c
+ c++: ADL refactor
+
+ Address review comments
+ libcpp/
+ * lex.c (cpp_maybe_module_directive): Add asserts and comments
+ about initial and final state. Remove __builtin_expects.
+ (_cpp_lex_token): Remove __builtin_expect.
+
+2020-11-06 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 4b5f564a5d9
+ libcpp: Provide date routine
+
+ gcc/
+ * tree.c (cache_integer_cst): Document API.
+
+ gcc/cp/
+ * Make-lang.in: Drop git hash collection.
+ gcc/
+ * REVISION: New.
+
+ gcc/cp/
+ * parser.c (cp_parser_diagnose_invalid_type_name): Revert local
+ changes.
+
+ libcpp/
+ * include/cpplib.h (enum CPP_time_kind): New.
+ (cpp_get_date): Declare.
+ * internal.h (struct cpp_reader): Replace source_date_epoch with
+ time_stamp and time_stamp_kind.
+ * init.c (cpp_create_reader): Initialize them.
+ * macro.c (_cpp_builtin_macro_text): Use cpp_get_date.
+ (cpp_get_date): Broken out from _cpp_builtin_macro_text and
+ genericize.
+ gcc/cp/
+ * module.cc (module_state_write_readme): Use new libcpp API.
+
+2020-11-05 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_state::write_Readme): Add cpp_reader parm, use
+ cb_get_source_date_epoch to see if the time is locked.
+
+ gcc/cp/
+ * module.cc (enum merge_kind): Minor remapping.
+ (merge_kind_name): Adjust.
+
+ gcc/cp/
+ * module.cc (depset::fini_partial_redirect): Delete.
+ (depset::hash::add_partial_redirect): Delete.
+ (depset::hash::init_partial_redirect): Delete.
+ (enum merge_kind): Delete MK_tmpl_partial_mask,
+ MK_type_partial_spec.
+ (trees_out::get_merge_kind): Adjust.
+ (trees_{in,out}::key_mergeable): Delete tmpl_partial case.
+ (depset::hash::make_dependency): Directly create the redirect here.
+ (depset::hash::add_specializations): Do not detect partial
+ specializations here.
+
+ gcc/cp/
+ * module.cc (enum depset::entity_kind): Add EK_PARTIAL,
+ EK_DIRECT_HWM.
+ (enum depset::disc_bits): Delete DB_PARTIAL_BIT.
+ (depset::is_partial): Delete.
+ (depset::fini_partial_redirect): Assert EK_PARTIAL.
+ (depset::entity_kind_name): Add EK_PARTIAL.
+ (trees_out::decl_node): Adjust redirect asserts.
+ (trees_out::get_merge_kind): No partial template.
+ (depset::hash::make_dependency): Partials create EK_PARTIAL.
+ (depset::hash::add_partial_entities): Adjust,
+ (depset::hash::add_specializations): Adjust.
+ (depset::hash::add_mergeable): Adjust.
+ (sort_cluster, module_state::write_cluster): Likewise.
+ (module_state::write_{entities,pendings}): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-spec-5_a.C: Adjust scan.
+
+ gcc/cp/
+ * module.cc (depset::hash::add_partial_redirect): Break out
+ helpers ...
+ (depset::fini_partial_redirect): ... this and ...
+ (depset::hash::init_partial_redirect): ... this. Call them.
+ (partial_specializations): New vector.
+ (depset::hash::make_dependency): Deal with partial
+ specializations.
+ (depset::hash::add_partial_entities): New.
+ (deset::hash::add_specializations): We may have added a partial.
+ (module_state::write_cluster): Count partials.
+ (module_state::write_pendings): Likewise.
+ (module_state::write): Add partials.
+ (set_defining_module): Append explicit specializations.
+ gcc/testsuite/
+ * g++.dg/modules/constrained-partial-1_[ab].C: New.
+
+ gcc/cp/
+ * mapper-client.cc (spawn_mapper_program): Use @ to indicate
+ looking in install dir.
+ gcc/
+ * doc/invoke.texi (fmodule-mapper): Document behaviour.
+ gcc/testsuite/
+ * g++.dg/modules/extern-tpl-1_b.C: Adjust options.
+ * g++.dg/modules/inc-xlate-1_e.C: Adjust options.
+ * g++.dg/modules/legacy-2_b.H: Adjust options.
+ * g++.dg/modules/legacy-6_[cdef].C: Adjust options.
+
+2020-11-04 Nathan Sidwell <nathan@acm.org>
+
+ gcc/testsuite/
+ * g++.dg/modules/builtin-3_[ab].C: Adjust for i686
+
+ gcc/cp/
+ * mapper-resolved.cc: define INCLUDE_ALGORITHM.
+
+2020-11-03 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk a52bf016433
+ c++: using-decl instantiation
+
+ Cleanup unnecessary or stale changes.
+ gcc/cp/
+ * class.c (clone_cdtor): Fix erroneous comment.
+ * decl.c (finish_enum_value_list): Revert local change.
+ gcc/
+ * doc/cppopts.texi (EE): Delete stale info.
+ libcpp.
+ * files.c (cpp_main_controlling_macro): Delete.
+ * include/cpplibc.h (cpp_main_controlling_macro): Delete.
+ * mkdeps.c: Rename bmi->cmi
+
+ Merge trunk 444655b6f02
+ c++: cp_tree_equal cleanups
+
+2020-11-02 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * include/cpplib.h (cpp_enable_filename_token): Delete.
+ * macro.c (cpp_enable_filename_token): Delete.
+
+ Merge trunk b2a31e2c341
+
+ gcc/cp/
+ * module.cc (module_state::write_elf): Remove obsolete FIXME.
+
+2020-10-30 Nathan Sidwell <nathan@acm.org>
+
+ Add DECL_ACCESS support
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Stream using_decl decls.
+ (trees_out::lang_decl_vals): Do not stream DECL_ACCESS that is
+ actually an access alterer.
+ (trees_in::read_class_def): Reconstruct DECL_ACCESS.
+ gcc/testsuite/
+ * g++.dg/modules/access-1_[abc].C: New.
+
+ gcc/cp/
+ * module.cc: Address more FIXMES.
+
+ gcc/cp/
+ * cp-tree.h (maybe_check_all_macros): Declare.
+ * module.cc (slurping::release_macros): New.
+ (slurping::~slurping): Use it.
+ (module_state::maybe_completed_reading): Use it.
+ (maybe_check_all_macros): New, broken out of ...
+ (finish_module_processing): ... here. DO NOT CALL.
+ * parser.c (cp_lexer_new_main): Call it here.
+
+ Cache Path Of Instantiation
+ gcc/cp/
+ * cp-tree.h (struct tinst_level): Add path and visible bitmaps.
+ * module.cc (path_of_instantiation): New recursive helper broken
+ out of ...
+ (module_visible_instantiation): ... here. Call it.
+ * pt.c (push_tinst_level_loc): Nullify path and visible bitmaps.
+
+2020-10-29 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc: Address a bunch of FIXMEs.
+
+ Prague anon-enum keying by underlying type
+ gcc/cp/
+ * module.cc (trees_{in,out}::key_mergeable): Stream MK_enum
+ underlying type decl.
+ (check_mergeable_decl): The enum itself is on the ovl list.
+ * name-lookup.c (init_global_partition): Copy the enum for the
+ first member of an anonymous enum.
+ gcc/testsuite/
+ * g++.dg/modules/enum-8_[abcd].[CH]: New.
+
+ gcc/cp/
+ * module.cc (trees_out::get_merge_kind): Resolve FIXMEs.
+ (trees_out::key_mergeable): Likewise.
+
+ gcc/cp/
+ * module.cc (trees_out::get_merge_kind): Only function-scope
+ entities we meet are implicit TYPE_DECLs.
+
+ Merge trunk 9703b8d98c1
+ c++: Stop (most) function-scope entities having a template header
+
+ Merge trunk bafcf452c79
+ opts: Sanity check for param names.
+ gcc/
+ * params.opt: Fixup lazy-load parm name.
+ gcc/testsuite/
+ * g++.dg/modules/freeze-1_d.C: Adjust.
+ * g++.dg/modules/nest-1_c.C: Adjust.
+
+ Merge trunk 53dede0f04b
+ CSE conversions within sincos [Alexandre Oliva]
+
+2020-10-28 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 4289e488ddd
+ c++: Make OMP UDR DECL_LOCAL_DECL_P earlier
+
+ Merge trunk 7d5f38e49e5
+ c++: Refactor push_template_decl
+
+ gcc/cp/
+ * module.cc: More FIXME addressing.
+ (trees_out::get_merge_kind): Assert function-scope entities are
+ not unexpected.
+
+ gcc/cp/
+ * module.cc: More FIXME fixing.
+
+ gcc/cp/
+ * lang-specs.h: Fix -xc++-{,user-,system-}header.
+
+2020-10-27 Nathan Sidwell <nathan@acm.org>
+
+ No special anon-namespace naming
+ gcc/cp/
+ * name-lookup.h (add_imported_namespace): Drop anon name parm.
+ * name-lookup.c (anon_name): Delete.
+ (make_namespace): Nothing special for anonymous namespace.
+ (add_imported_namespace): Likewise.
+ * module.cc (module_state::{read,write}_namespaces): Anon
+ namepspace does not need naming.
+
+ gcc/testsuite/
+ * g++.dg/modules/xtreme-tr1{.h,_a.H,_b.C}: New.
+
+ gcc/cp/
+ * module.cc (trees_out::vec_chained_decls): Detect anonymous
+ struct with typedef name.
+ (trees_{in,out}::add_indirect): Assert TYPE_DECL is typedef or
+ type's TYPE_NAME.
+ (trees_{in,out}::{read,write}_class_def): Cope with anon-structs
+ with typedef names.
+ gcc/testsuite/
+ * g++.dg/modules/tdef-8_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (depset_cmp): Decide strcmp question.
+ (module_state::write_prepare_maps): Document pruning question.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::{read,write}_class_def): Remove
+ nested udt FIXMEs. They are no longer a thing.
+
+ Merge trunk 54380d42e6f
+ c++: Kill nested_udts
+
+2020-10-26 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_{in,out{::type_node): Stream attribs.
+
+ gcc/cp/
+ * module.cc (trees_out::type_node): Stream alignment.
+ (trees_in::type_node): Alignment is a log.
+ gcc/testsuite/
+ * g++.dg/modules/align-type-1_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::tree_list): Address more Fixmes,
+ either by obsoleting them, or coding around their confusion.
+
+ libcody/
+ Rebase on upstream, robustify enable-checking.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::tree_list): New streamers.
+ (trees_{in,out}::{read,write}_class_def): Use them.
+
+ gcc/cp/
+ * module.cc: Remove or clarify more now-obsolete FIXMEs.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Document
+ middle-endy/debugy BLOCK fields. Document OPTIMIZATION_NODE &
+ TARGET_OPTION_NODE issue.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): RESULT_DECL is like PARM_DECL.
+
+ libcody/
+ Rebase on upstream, fix enable-checking & bootstrap
+
+ gcc/cp/
+ * module.cc (trees_in::chained_decls): Chain should always be null.
+
+ libcody/
+ Rebase on upstream, collect new autoconf bits.
+
+2020-10-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc: Address 3 now-irrelevant FIXMES.
+
+ gcc/cp/
+ * module.cc (enum merge_kind): Reorder.
+ (merge_kind_name): Likewise.
+
+ Merge trunk cd8b7d7b24c
+ Link with the configured net lib on vxworks7
+
+ Merge trunk e957b86ca26
+ libstdc++: Rebase include/pstl to current upstream
+ gcc/testsuite/
+ PR 97549 workaround
+ * g++.dg/modules/xtream-header{,-2}.h: Don't include <exception>.
+
+ Merge trunk 310fe80babe
+ Fortran: class.c - update vtable comment
+
+ gcc/cp/
+ * mapper-server.cc: Disable networking when not available.
+
+2020-10-22 Nathan Sidwell <nathan@acm.org>
+
+ libcody/ 9e71a7c Avoid fstatat when unavailable
+ gcc/
+ * configure.ac: Check for fstatat & O_CLOEXEC.
+ * configure: Regenerated.
+ * config.in: Regenerated.
+ gcc/cp/
+ * mapper-resolver.cc: Include config.h, system.h. Cope with lack
+ of fstatat.
+ * module.cc: Workaround lack of O_CLOEXEC.
+
+ Block-scope structures, like wow, why worked so far?
+ gcc/cp/
+ * module.cc (trees_{in,out}::decl_value): Stream local struct
+ definitions.
+ gcc/testsuite/
+ * g++.dg/modules/local-struct-1_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (trees_in::is_matching_decl): Add builtin data
+ copying.
+ (trees_in::read_function_def): Recontextualize parms.
+ * decl.c (duplicate_decls): Refactor builtin copying.
+ gcc/testsuite/
+ * g++.dg/modules/builtin-7_[ab].[HC]: New.
+
+ libcody/
+ * fatal.cc: noexcept fix from Iain Sandoe.
+
+ gcc/cp/
+ * gcc/cp/decl.c (duplicate_decls_): Return error_mark_node for
+ extern "C" collision.
+ * gcc/cp/module.cc (check_mergeable_decl): Check extern "C"-ness.
+ (trees_in::is_matching_decl): Check extern "C" builtin mismatch.
+ Propagate flags on smashing a builtin.
+ gcc/testsuite/
+ * g++.dg/modules/builtin-6_[ab].[HC]: New.
+
+ gcc/cp/
+ * mapper-client.cc: Enable networking only when CODY_NETWORKING
+ * mapper-server.cc: Likewise.
+ libcody/
+ Rebase b26a54f | Enable networking only on known-good systems
+
+2020-10-21 Nathan Sidwell <nathan@acm.org>
+
+ * Makefile.def: Don't build libcody for build. Do not install it
+ either.
+ * Makefile.in: Rebuilt.
+
+ gcc/testsuite/
+ * g++.dg/modules/builtin-3_[ab].C: Scans for darwin, thanks Iain
+
+ AIX fixinclude
+ fixincludes/
+ * inclhack.def (aix_physadr_t): New.
+ * fixincl.x: Regenerated.
+
+ Vector bools
+ gcc/cp/
+ * module.cc (trees_{in,out}::type_node): Deal with non-standard bools.
+ gcc/testsuite/
+ * g++.dg/modules/bool-1{,_[abc]}.[CHh]: New.
+
+ AIX test fix
+ gcc/testsuite/
+ * g++.dg/modules/literals-1_[ab].C: Add -Wno-psabi
+
+2020-10-20 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * Makefile.in (INCLUDES): Add $(CODYINC).
+
+ gcc/cp/
+ * Make-lang.in (GIT_INFO): Support stricter seds.
+
+ Local-extern fix
+ gcc/cp
+ * name-lookup.c (push_local_extern_decl_alias): Fix default arg bug.
+
+ Local-extern fix
+ gcc/cp
+ * name-lookup.c (push_local_extern_decl_alias): Recontextualize
+ alias' parms, drop any default args.
+ gcc/testsuite/
+ * g++.dg/modules/local-extern-2.H: New.
+
+ Libcody by value
+ * Makefile.def: Add libcody as a component library.
+ * Makefile.in: Change libcody from an external library to a
+ component.
+ * Makfile.tpl: Likewise.
+ * configure.ac: Likewise.
+ * configure: Regenerated.
+ gcc/
+ * Makefile.in: Likewise.
+ * configure.ac: Likewise.
+ * configure: Regenerated.
+
+ * libcody/: Import by value.
+
+ gcc/cp/
+ * module.cc (elf_in::begin): Fix madvise on AIX.
+
+2020-10-19 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc: Add testing for non-mmapped access.
+ (elf_out::grow): Assert aligned at start.
+ (elf_out::write): Align afterwards.
+
+ gcc/testsuite/
+ * g++.dg/modules/sym-subst-3_a.C: Some assemblers say .global.
+
+ gcc/cp/
+ * module.cc (module_state::write_macro_locs): Macro loc count is a
+ count.
+ (module_state::read_prepare_maps): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/macloc-2_[ab].[HC]: New.
+
+2020-10-16 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk ccb4f20cbee
+
+ gcc/cp/
+ * name-lookup.c (do_nonmember_using_decl): Fix duplication case.
+
+2020-10-14 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.h (enum WMB_Flags): New.
+ (walk_module_binding): Adjust.
+ * name-lookup.c (walk_module_binding): Replace callbacks, bool
+ args by single flags arg.
+ * module.cc (depset::hash::add_binding): Replace bool args by
+ flags.
+
+ gcc/cp/
+ * module.cc (trees_out::core_bools): Adjust initialized var
+ handling.
+ (has_definition): Likewise.
+ (trees_{in,out}::{read,write}_var_def): Likewise.
+ (module_state::{read,write}_inits): Just stream the decls.
+ gcc/testsuite/
+ * g++.dg/modules/hdr-init-1_[abc].[HC]: New.
+
+ gcc/cp/
+ * module.cc (depset::hash::finalize_dependencies): Remove
+ pre-p2003 kludge.
+
+ p2003 internal linkage & header units
+ gcc/cp/
+ * name-lookup.c (get_fixed_binding_slot): Promote internal GM
+ entities to global slot.
+ * module.cc (has_definition): Add internal linkage fns/vars in GM.
+ (depset::hash::make_dependency): Internal linkage in GM is ok.
+
+ gcc/cp/
+ * pt.c (lookup_template_class_1): Delete erroneous fixme.
+ (tsubst_template_decl): Delete questioning fixme, problem, if any,
+ is on trunk.
+ (get_mergeable_specialization_flags): Optimize specialization scan.
+
+ Merge trunk 068644a1497
+ c++: DECL_FRIEND_P cleanup
+
+ Merge trunk 06bec55e80d
+
+ gcc/cp/
+ * decl.c (duplicate_decls): Remove obsolete FIXME.
+ * pt.c (push_template_decl): Remove about-to-be obsolete FIXME.
+
+ gcc/cp/
+ * decl.c (xref_tag_1): Refactor module handling. Push imported
+ decl into TU's slot
+ * name-lookup.c (lookup_elaborated_type_1): Fixme fixed.
+ * module.cc (set_instantiating_module): Accept template_decls.
+ gcc/testsuite/
+ * g++.dg/modules/part-7_[abc].C: New.
+ * g++.dg/modules/hdr-1_[abc].[HC]: New.
+
+2020-10-09 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * lex.c (do_peek_module): Update plan for unicode.
+
+ gcc/cp/
+ * decl.c (grokmethod): Remove comment about -fmodule-implicit-inline.
+
+ Block-scope externs disallowed
+ gcc/cp/
+ * decl.c (start_decl): Reject block-scope extern in module
+ purview.
+ gcc/testsuite/
+ * g++.dg/modules/local-extern-1.C: New.
+
+ Remove unused code
+ gcc/cp/
+ * friend.c (add_friend): Remove #if'd out code
+
+ Cleanup name-lookup interface
+ gcc/cp/
+ * name-lookup.h (get_field_ident, lookup_field_ident): Don't
+ declare.
+ (mergeable_class_entities): Rename to ...
+ (lookup_class_binding): ... here.
+ * name-lookup.c (mergeable_class_entities): Rename to ...
+ (lookup_class_binding): ... here.
+ (get_field_ident, lookup_field_ident): Move to module.cc
+ * module.cc (get_field_ident, lookup_field_ident): Moved here.
+ Only deal with anon fields.
+ (trees_{in,out}::tree_node): Adjust.
+ (trees_in::key_mergeable): Adjust.
+
+ Remove unneeded decls
+ gcc/cp/
+ * name-lookup.c (lookup_class_member, void set_class_bindings)
+ (tree lookup_all_conversions): Delete unused decls.
+ (insert_late_enum_def_bindings): Delete duplicate decl.
+
+ Clean up mangling documentation
+ gcc/cp/
+ * mangle.c (write_module): Update grammar description.
+ * module.cc (module_state::mangle): Clarify why partitions might
+ be significant.
+
+ Clean up some c-family pieces
+ gcc/
+ * langhooks.h (struct lang_hooks): Replace
+ preprocess_translate_include with preprocess_options.
+ * langhooks-def.h: Replace LANG_HOOKS_PREPROCESS_INCLUDE_TRANSLATE
+ with LANG_HOOKS_PREPROCESS_OPTIONS.
+ gcc/c-family/
+ * c-cppbuiltins.c (c_cpp_builtins): Comment __cpp_modules.
+ * c-opts.c (c_common_post_options): Replace include_translate hook
+ with more general preprocess_options hook.
+ gcc/cp/
+ * cp-lang.c: Replace LANG_HOOKS_PREPROCESS_TRANSLATE_INCLUDE with
+ LANG_HOOKS_PREPROCESS_OPTIONS.
+ * cp-tree.h (module_translate_include): Don't declare.
+ (module_preprocess_options): Declare.
+ * module.cc (module_translate_include): Rename to ..
+ (maybe_translate_include): ... here. Make static.
+ (module_preprocess_options): New.
+
+2020-10-08 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk d1c566d72d9
+
+ Undeclared builtin merging
+ gcc/cp/
+ * module.cc (trees_in::is_matching_decl): Merge into undeclared
+ builtin.
+ * name-lookup.cc (check_module_override): Rename is_friend parm.
+ (do_pushdecl): Ignore hidden imports.
+ gcc/testsuite/
+ * g++.dg/modules/builtin-5_[ab].[HC]: New.
+
+2020-10-07 Nathan Sidwell <nathan@acm.org>
+
+ Streamed classes always have a member vector.
+ gcc/cp/
+ * module.cc (trees_out::decl_value): Assert no pmfs.
+ (trees_in::decl_value): Ensure existing duplicate class has member
+ vector.
+ (tree_out::write_class_def): Ensure there's a method vector.
+ * name-lookup.c (set_class_bindings): Extra can be negative,
+ meaning always. Return the member vector.
+ (mergeable_class_entities): Simplify.
+ (lookup_field_ident): Simplify.
+
+ gcc/cp/
+ * module.cc (module_state::read_prepare_maps): Only inform of
+ location shortage once.
+
+ Fix -save-temps & header units
+ gcc/cp/
+ * module.cc (loc_spans::maybe_init): New.
+ (loc_spans::init): Allow NULL map.
+ (preprocess_module, preprocessed_module): Call maybe_init.
+ gcc/libcpp/
+ * internal.h (enum include_type): Rename IT_MAIN_INJECT to IT_PRE_MAIN.
+ * init.c (cpp_read_main): Adjust _cpp_stack_file call. Adjust
+ first line marker if no preprocessed marker found.
+ (read_original_filename): Peek characters in buffer, not token.
+ (read_original_directory): Likewise.
+ * files.c (_cpp_stack_file): Adjst.
+ gcc/testsuite/
+ * g++.dg/modules/preproc-2_[ab].[HC]: New.
+
+ Merge trunk 4e62aca0e05
+ c++: block-scope externs get an alias [PR95677,PR31775,PR95677]
+
+ Merge trunk e089e43365f
+
+ Merge trunk 255aa06d40d
+
+ Merge trunk bf490f06360
+
+2020-10-05 Nathan Sidwell <nathan@acm.org>
+
+ Pick 255aa06d40d (c++: Make spell corrections consistent)
+
+2020-10-02 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 679dbc9dcec
+ c++: Kill DECL_ANTICIPATED
+
+ Merge trunk 7ee1c0413e2
+ c++: Hash table iteration for namespace-member spelling
+ gcc/cp/
+ * name-lookup.c (consider_binding): New, broken out of ...
+ (consider_binding_level): ... here. Use it, add MODULE_VECTOR
+ support.
+
+ Merge trunk 9340d1c97b8
+ c++: cleanup ctor_omit_inherited_parms
+ gcc/cp/
+ * module.cc (trees_out::decl_value): Adjust for new ctor_omit API.
+
+ Merge trunk 31584824665
+
+ Merge trunk dfaa24c974b
+ c++: Kill DECL_HIDDEN_P
+
+ gcc/cp/
+ * name-lookup.c (walk_module_binding): Update for new HIDDEN markers.
+
+ Merge trunk c2978b34058
+
+2020-10-01 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk c2978b34058
+
+ Merge trunk 734eed68537
+ c++: Kill DECL_HIDDEN_FRIEND_P
+
+ Merge trunk 65167982efa
+
+ Merge trunk 7cbfe0894de
+
+ Merge trunk adcf8a11c77
+
+ Merge trunk cc61827b55e
+
+2020-09-30 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 39a27bb01aa
+
+ Merge trunk c74e6f7cfd7
+
+ Apply trunk 7cbfe0894de
+ c++: Hiddenness is a property of the symbol table
+
+ Apply trunk adcf8a11c77
+ c++: Name lookup simplifications
+
+ Apply trunk cc61827b55e
+ c++: Identifier type value should not update binding
+
+ Apply trunk c74e6f7cfd7
+ c++: Adjust pushdecl/duplicate_decls API
+
+ gcc/cp/
+ * tree.h (ovl_insert): Make usingness unsigned.
+ * tree.c (ovl_insert): Make usingness unsigned, change semantics.
+ * name-lookup.c (do_nonmember_using_decl): Adjust ovl_insert call.
+
+ Merge trunk 00aaae03db2
+ c++: Replace tag_scope with TAG_how
+
+ Merge trunk 0d8f3f612d6
+
+2020-09-24 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk d13c0ae859f
+
+2020-09-14 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk cd6743e9c41
+
+ gcc/cp/
+ * module.cc (trees_out::get_merge_kind): Add asserts & FIXMEs.
+
+ gcc/cp/
+ * pt.c (primary_template_specialization_p): Use
+ VAR_OR_FUNCTION_DECL_P.
+ (push_template_decl_real): Likewise.
+ * module.cc (trees_out::chained_decls): Use
+ VAR_OR_FUNCTION_DECL_P.
+ (trees_out::get_merge_kind, trees_in::is_matching_decl)
+ (depset::hash::make_dependency, depset::hash::add_binding_entity)
+ (specialization_add): Likewise.
+
+ Merge trunk d106029c2aa
+
+ Merge trunk 10f51543bb8
+ libstdc++: Add compile-time checks to__glibcxx_assert [PR 71960]
+
+2020-09-11 Nathan Sidwell <nathan@acm.org>
+
+ Concepts and local externs
+ gcc/cp/
+ * decl.c (grokfndecl): Don't attach to local extern.
+ gcc/testsuite/
+ * concepts/local-extern.C: New.
+
+ Local extern fns do not get template header
+ gcc/cp/
+ * module.cc (trees_out::chained_decls): Also mark local fns for
+ by-value walking.
+ (trees_out::decl_node): Assert we don't meet a local var or fn.
+ (trees_out::get_merge_kind): Local fns are also unique.
+ * pt.c (push_template_decl_real): Local fns also lack a header.
+ (tsubst_function_decl): Cope with local fns.
+ (tsubst_decl): Adjust VAR_DECL tsubsting.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-extern-{var,fn}-1_{a.H,b.C}: New.
+
+2020-09-09 Nathan Sidwell <nathan@acm.org>
+
+ Local extern vars do not get template header
+ gcc/cp/
+ * cp-tree.h (TINFO_VAR_DECLARED_CONSTINIT): Replace with ...
+ (DECL_DECLARED_CONSTINIT_P): ... here, decl_lang_flag 7.
+ * decl.c (start_decl): Set DECL_DECLARED_CONSTINIT_P as necessary.
+ (cp_finish_decl): Likewise.
+ * pt.c (push_template_decl_real): Don't add a header for
+ DECL_LOCAL_DECL_P VAR_DECLS.
+ (tsubst_decl): Check for VAR_DECLS lacking template info are
+ local. No need to handle TINFO_VAR_DECLARED_CONSTINIT specially.
+ (tsubst_expr): Likewise.
+ (instantiate_decl): Likewise.
+
+ DECL_LOCAL_DECL_P
+ gcc/cp/
+ * cp-tree.h (DECL_LOCAL_FUNCTION_P): Rename to ...
+ (DECL_LOCAL_DECL_P): ... here. Apply to VAR_DECLS too.
+ * decl.c (start_decl): Set DECL_LOCAL_DECL_P as approriate.
+ (start_decl_1): Reformat.
+ (omp_declare_variant_finalize_one): Use DECL_LOCAL_DECL_P.
+ (local_variable_p): Simplify.
+ * module.cc (trees_out::chained_decls): Stream DECL_LOCAL_DECL_P
+ by value.
+ (trees_out::get_merge_kind): DECL_LOCAL_DECL_P decls are unique.
+ * name-lookup.c (set_decl_context_in_fn): Assert DECL_LOCAL_DECL_P
+ as expected, don't set it here.
+ (do_pushdecl): Don't call it for friends or dependent types.
+ (is_local_extern): Simplify.
+ * parser.c (cp_parser_postfix_expression): Use DECL_LOCAL_DECL_P.
+ (cp_parser_omp_declare_reduction): Set DECL_LOCAL_DECL_P.
+ Refactor.
+ * pt.c (check_default_tmpl_args): Use DECL_LOCAL_DECL_P.
+ (tsubst_expr): Adjust omp reduction case.
+ (tsubst_omp_udr): Add comments.
+ (type_dependent_expression_p): Adjust.
+ * call.c (equal_functions): Adjust.
+ * semantics.c (finish_call_expr): Adjust.
+ libcc1/
+ * libcp1plugin.cc (plugin_build_call_expr): Use DECL_LOCAL_DECL_P.
+
+2020-09-08 Nathan Sidwell <nathan@acm.org>
+
+ Change cxx_int_tree_map to cxx_decl_tree_map.
+ gcc/cp/
+ * cp-tree.h (struct cxx_int_tree_map): Rename to ...
+ (struct cxx_decl_tree_map): ... here.
+ * cp-gimplify.c (cxx_int_tree_map_hasher): Rename to ...
+ (cxx_decl_tree_map_hasher): ... here. Update member fns
+ (cp_genericize_r): Adjust extern_decl_map lookup.
+ * name-lookup.c (set_local_extern_decl_linkage): Adjust
+ extern_decl_map insertion.
+
+2020-09-12 Nathan Sidwell <nathan@acm.org>
+
+ FLAG DAY! Mapper reponse format change in LibCody
+ gcc/cp/
+ * mapper-client.cc (module_client::open_module_client): Use
+ Client::PC_PATHNAME.
+ * mapper-resolver.cc (module_resolver::ModuleRepoRequest): Use
+ PathnameResponse.
+ (module_resolver::cmi_response): Likewise.
+ (module_resolver::IncludeTranslateRequest): Use BoolResponse and
+ PathnameResponse.
+ * module.cc (module_state::set_filename): Use Client::PC_PATHNAME.
+ (module_translate_include): Use Client::PC_BOOL and
+ Client::PC_PATHNAME.
+
+2020-09-03 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 8bc0f24d7a2.
+
+ Instantiation after extern instantiation.
+ gcc/cp/
+ * module.cc (trees_in::read_class_def): Maybe set
+ CLASSTYPE_INTERFACE.
+ gcc/testsuite/
+ * g++.dg/modules/extern-tpl-2_[abc].[CH]: New.
+
+2020-09-02 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * files.c (_cpp_stack_file): Don't try and xlate include-next.
+
+ Extern instantiations.
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_bools): Drop duplicate comdat
+ flag.
+ (trees_in::is_matching_decl): Don't propagate not-really-extern
+ here.
+ (trees_{in,out}::{read,write}_function_def): Stream
+ not-really-extern here.
+ gcc/testsuite/
+ * g++.dg/modules/extern-tpl-1_[abc].[CH]: New.
+
+ Rename -fnote-include-translate to -flang-info-include-translate.
+ gcc/cp/
+ * (module_translate_include): Check if matches trailing part of
+ header name.
+ (handle_module_option): Adjust.
+ gcc/c-family/
+ * c.opt (-fnote-include-translate{,=}): Rename to ...
+ (-flang-info-include-translate{,=}): ... here.
+ (-fnote-include-translate=query): Delete.
+ gcc/
+ * doc/invoke.texi: Update documentation.
+
+2020-08-31 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * lang-specs.h: c++headers always do directives-only preprocessing
+ in modules mode.
+
+ Deal with running out of locations.
+ gcc/cp/
+ * module.cc (module_state::read_prepare_maps): New.
+ (module_state::write_{ordinary,macro}_maps): Adjust.
+ (struct module_state_config): Record number of locations needed.
+ (module_state::read_location): Deal with lack of locations.
+ (module_state::{read,write}_config): Adjust.
+ (module_state::read_initial): Adjust.
+
+ gcc/cp/
+ * mapper.h (module_resolver): Default to no xlation.
+ * mapper-resolver.cc (module_resolver::read_tuple_file): Don't
+ fail on zero-length files.
+
+ Add control for default header translation rules.
+ gcc/cp/
+ * mapper-client.cc (module_client::open_module_client): Better
+ error reporting.
+ * mapper-resolver.cc (module_resolver::module_resolver): Specify
+ default translate behavior.
+ (module_resolver::IncludeTranslateRequest): Check it.
+ * mapper-server.cc (flag_xlate): New.
+ (process_args): Rename -f->-m add -t
+ (main): Adjust.
+ * mapper.h (module_resolver): Add default_xlate field.
+ gcc/testsuite/
+ * g++.dg/modules/inc-xlate-1_e.C: Adjust.
+ * g++.dg/modules/legacy-2_b.H: Adjust.
+ * g++.dg/modules/legacy-6.map: Adjust.
+ * g++.dg/modules/legacy-6_[cd].C: Adjust.
+ * g++.dg/modules/map-2.C: Adjust.
+
+ gcc/cp/
+ * name-lookup.c (get_fixed_binding_slot): Don't stat-hack a
+ namespace.
+ * module.cc (trees_in::assert_definition): Header units are
+ module_purview, but ok.
+ gcc/testsuite/
+ * g++.dg/modules/ns-dup-1_[ab].C: New.
+
+2020-08-28 Nathan Sidwell <nathan@acm.org>
+
+ Fix pushing imported namespaces.
+ gcc/cp/
+ * module.cc (depset::hash_add_namespace): Don't mark bindings
+ special.
+ (struct add_binding_data): Record finding a namespace.
+ (depset::hash::add_binding_entity): Make namespaces idempotent.
+ (depset::hash::add_namespace_entities): Clear met_namespace.
+ (module_state::write): Zap partitions bitmap if empty.
+ * name-lookup.c (push_namespace): Ensure namespace is in
+ MODULE_SLOT_CURRENT.
+ * ptree.c (cxx_print_xnode): Show more detail on MODULE_VECTOR.
+ gcc/testsuite/
+ * g++.dg/modules/ns-imp-1_[abc].C: New.
+ * g++.dg/modules/ns-part-1_[abc].C: New.
+
+ gcc/testsuite/
+ * lib/prune.exp (prune_ices): Adjust regexp.
+
+ Merge trunk cb3c3d63315.
+ Whee, all up to date!
+
+ Merge trunk f1612b8ae8a.
+ c++: Check satisfaction before non-dep convs. [CWG2369]
+ gcc/testsuite/
+ * g++.dg/modules/concept-[13]_b.C: Adjust.
+
+ Merge trunk e6e01618e83.
+
+2020-08-27 Nathan Sidwell <nathan@acm.org>
+
+ Stream MEM_REFs, who knew?
+ gcc/cp/
+ * module.cc (trees_{in,out}::start): Permit MEM_REFs.
+ (trees_{in,out}::core_bools): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/memref-1_[ab].C: New.
+
+2020-08-27 Nathan Sidwell <nathan@acm.org>
+ Jeff Chapman II <jchapman@lock3software.com>
+
+ Fix hash table breakage.
+ gcc/cp/
+ * name-lookup.c (push_namespace): Do not create slot on first
+ lookup.
+ gcc/testsuite/
+ * g++.dg/modules/string-view1.C: New test.
+ * g++.dg/modules/string-view2.C: Ditto.
+
+2020-08-27 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 708b3600d04.
+
+2020-08-26 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 17abcc77341.
+ libstdc++: Replace operator>>(istream&, char*) [LWG 2499]
+
+ Fix type lang specific changing.
+ gcc/cp/
+ * lex.c (copy_lang_type): Split allocation & assignment to be
+ conditional-breakpoint friendly.
+ * module.cc (trees_in::read_class_def): Update variants if we
+ alter TYPE_LANG_SPECIFIC.
+ * name-lookup.c (maybe_lazily_declare): Look at main variant's
+ decl.
+ gcc/testsuite/
+ * g++.dg/modules/tdef-inst-1{.h,_[ab].C}: New.
+
+ Fix int_cst caching
+ gcc/
+ * tree.c (cache_integer_cst): Fix pointer type indices.
+
+ Cherry pick 794275711bd.
+ gcc/cp/
+ * name-lookup.c (op_unqualified_lookup): Don't check if matches
+ global lookup.
+ gcc/testsuite/
+ * g++.dg/lookup/operator-[12].C: New.
+
+2020-08-25 Nathan Sidwell <nathan@acm.org>
+
+ Operator function lookups in templates
+ gcc/cp/
+ * decl.c (poplevel): A local-binding tree list holds the name in
+ TREE_PURPOSE.
+ * name-lookup.c (update_local_overload): Add id to TREE_PURPOSE.
+ (lookup_name_1): Deal with local-binding error_mark_node marker.
+ (op_unqualified_lookup): Return error_mark_node for 'nothing
+ found'. Do other short circuiting here.
+ (maybe_save_operator_binding): Reimplement to always cache a
+ result.
+ (push_operator_bindings): Deal with 'ignore' marker.
+ gcc/testsuite/
+ * g++.dg/modules/operator-1_[ab].C: New.
+
+2020-08-20 Nathan Sidwell <nathan@acm.org>
+
+ Friend specialization overhaul part 1
+ gcc/cp/
+ * module.cc
+ gcc/testsuite/
+ * g++.dg/modules/tpl-friend-[12]_a.C: Adjust scan.
+ * g++.dg/modules/tpl-friend-merge-1*: New.
+
+ Do not stream hidden_friend_p.
+ gcc/cp/
+ * module.cc (trees_{in,out}::lang_decl_bools): Do not stream
+ anticipated_p or hidden_friend_p.
+ * name-lookup.c (name_lookup::adl_class_fns): DECL_ANTICIPATED is
+ not informative.
+
+ Reimplement module binding extraction.
+ gcc/cp/
+ * module.cc (depset::clear_hidden_binding): New.
+ (depset::hash::add_binding): Delete.
+ (struct add_binding_data): New.
+ (depset::hash::add_binding_entity): New.
+ (writable_cmp): Delete.
+ (depset::hash::add_namespace_entities): Reimplement.
+ (module_state::write_cluster): Adjust for unscoped enums.
+ * name-lookup.h (extract_module_binding): Replace with ...
+ (walk_module_binding): ... this.
+ * name-lookup.c (STAT_TYPE_HIDDEN): New.
+ (extract_module_binding): Replace with ...
+ (walk_module_binding): ... this.
+
+2020-08-19 Nathan Sidwell <nathan@acm.org>
+
+ ODR-check enums!
+ gcc/cp/
+ * module.cc (trees_in::maybe_duplicate): New.
+ (trees_in::read_enum_def): ODR check duplicate.
+ gcc/testsuite/
+ * g++.dg/modules/enum-bad-1_[ab].[HC]: New.
+
+2020-08-18 Nathan Sidwell <nathan@acm.org>
+
+ Cherry pick 634046d1a81.
+ gcc/cp/
+ * name-lookup.c (qualify_lookup): Drop lambda checking here.
+ Reorder namespace & type checking.
+ (lookup_name_1): Do hidden lambda checking here.
+
+ Fix -save-temps issue.
+ libcpp/
+ * lex.c (cpp_maybe_module_directive): Increment prevent_expansion
+ if not expanding.
+
+2020-08-17 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * doc/invoke.texi (C++ Module Mapper): Update documentation.
+
+ Fix disable checking build.
+ gcc/cp
+ * module.cc (note_def_cache_hasher): GTY needs this even when
+ unused.
+ (not_defs_table_t, note_defs): Likewise.
+ gcc/
+ * gcc.c (driver::maybe_print_and_exit): Warn about disable-checking.
+
+2020-08-14 Nathan Sidwell <nathan@acm.org>
+
+ Cherry pick e97201385a9.
+ gcc/cp/
+ * name-lookup.h (lookup_name_real, lookup_name_nonclass): Rename
+ to ...
+ (lookup_name): ... these new overloads.
+ * name-lookup.c (identifier_type_value_1): Rename lookup_name_real
+ call.
+ (lookup_name_real_1): Rename to ...
+ (lookup_name_1): ... here.
+ (lookup_name_real): Rename to ...
+ (lookup_name): ... here. Rename lookup_name_real_1 call.
+ (lookup_name_nonclass): Delete.
+ * call.c (build_operator_new_call): Rename lookup_name_real call.
+ (add_operator_candidates): Likewise.
+ (build_op_delete_call): Rename lookup_name_nonclass call.
+ * parser.c (cp_parser_lookup_name): Likewise.
+ * pt.c (tsubst_friend_class, lookup_init_capture_pack): Likewise.
+ (tsubst_expr): Likewise.
+ * semantics.c (capture_decltype): Likewise.
+ libcc1/
+ * libcp1plugin.cc (plugin_build_dependent_expr): Rename
+ lookup_name_real call.
+
+ Cherry pick db1c2a89db0.
+ gcc/cp/
+ * cp-tree.h (LOOKUP_HIDDEN): Delete.
+ (LOOKUP_PREFER_RVALUE): Adjust initializer.
+ * name-lookup.h (enum class LOOK_want): Add HIDDEN_FRIEND and
+ HIDDEN_LAMBDA flags.
+ (lookup_name_real): Drop flags parm.
+ (lookup_qualified_name): Drop find_hidden parm.
+ * name-lookup.c (class name_lookup): Drop hidden field, adjust
+ ctors.
+ (name_lookup::add_overload): Check want for hiddenness.
+ (name_lookup::process_binding): Likewise.
+ (name_lookup::search_unqualified): Likewise.
+ (identifier_type_value_1): Adjust lookup_name_real call.
+ (set_decl_namespace): Adjust name_lookup ctor.
+ (qualify_lookup): Drop flags parm, use want for hiddenness.
+ (lookup_qualified_name): Drop find_hidden parm.
+ (lookup_name_real_1): Drop flags parm, adjust qualify_lookup
+ calls.
+ (lookup_name_real): Drop flags parm.
+ (lookup_name_nonclass, lookup_name): Adjust lookup_name_real
+ calls.
+ (lookup_type_scope_1): Adjust qualify_lookup calls.
+ * call.c (build_operator_new_call): Adjust lookup_name_real call.
+ (add_operator_candidates): Likewise.
+ * coroutines.cc (morph_fn_to_coro): Adjust lookup_qualified_name
+ call.
+ * parser.c (cp_parser_lookup_name): Adjust lookup_name_real calls.
+ * pt.c (check_explicit_specialization): Adjust
+ lookup_qualified_name call.
+ (deduction_guides_for): Likewise.
+ (tsubst_friend_class): Adjust lookup_name_real call.
+ (lookup_init_capture_pack): Likewise.
+ (tsubst_expr): Likewise, don't look in namespaces.
+ * semantics.c (capture_decltype): Adjust lookup_name_real. Don't
+ look in namespaces.
+ libcc1/
+ * libcp1plugin.cc (plugin_build_dependent_exp): Adjust
+ lookup_name_real call.
+
+ Cherry pick c38f8785205.
+ gcc/cp/
+ * cp-tree.h (LOOKUP_PREFER_TYPES, LOOKUP_PREFER_NAMESPACES)
+ (LOOKUP_NAMESPACES_ONLY, LOOKUP_TYPES_ONLY)
+ (LOOKUP_QUALIFIERS_ONL): Delete.
+ (LOOKUP_HIDDEN): Adjust.
+ * name-lookup.h (enum class LOOK_want): New.
+ (operator|, operator&): Overloads for it.
+ (lookup_name_real): Replace prefer_type & namespaces_only with
+ LOOK_want parm.
+ (lookup_qualified_name): Replace prefer_type with LOOK_want.
+ (lookup_name_prefer_type): Replace with ...
+ (lookup_name): ... this. New overload with LOOK_want parm.
+ * name-lookup.c (struct name_lookup): Replace flags with want and
+ hidden fields. Adjust constructors.
+ (name_lookyp::add_overload): Correct hidden stripping test. Update
+ for new LOOK_want type.
+ (name_lookup::process_binding): Likewise.
+ (name_lookup::search_unqualified): Use hidden flag.
+ (identifier_type_value_1): Adjust lookup_name_real call.
+ (set_decl_namespace): Adjust name_lookup ctor.
+ (lookup_flags): Delete.
+ (qualify_lookup): Add LOOK_want parm, adjust.
+ (lookup_qualified_name): Replace prefer_type parm with LOOK_want.
+ (lookup_name_real_1): Replace prefer_type and namespaces_only with
+ LOOK_want parm.
+ (lookup_name_real): Likewise.
+ (lookup_name_nonclass, lookup_name): Adjust lookup_name_real call.
+ (lookup_name_prefer_type): Rename to ...
+ (lookup_name): ... here. New overload with LOOK_want parm.
+ (lookup_type_scope_1): Adjust qualify_lookup calls.
+ * call.c (build_operator_new_call)
+ (add_operator_candidates): Adjust lookup_name_real calls.
+ * coroutines.cc (find_coro_traits_template_decl)
+ (find_coro_handle_template_decl, morph_fn_to_coro): Adjust
+ lookup_qualified_name calls.
+ * cp-objcp-common.c (identifier_global_tag): Likewise.
+ * decl.c (get_tuple_size, get_tuple_decomp_init): Likewise.
+ (lookup_and_check_tag): Use lookup_name overload.
+ * parser.c (cp_parser_userdef_numeric_literal): Adjust
+ lookup_qualified_name call.
+ (prefer_arg_type): Drop template_mem_access parm, return LOOK_want
+ value.
+ (cp_parser_lookup_name): Adjust lookup_member, lookup_name_real
+ calls.
+ * pt.c (check_explicit_specialization): Adjust lookup_qualified_name
+ call.
+ (tsubst_copy_and_build, tsubst_qualified_name): Likewise
+ (deduction_guides_for): Likewise.
+ (tsubst_friend_class): Adjust lookup_name_real call.
+ (lookup_init_capture, tsubst_expr): Likewise.
+ * rtti.c (emit_support_tinfos): Adjust lookup_qualified_name call.
+ * semantics.c (omp_reduction_lookup): Likewise.
+ (capture_decltype): Adjust lookup_name_real call.
+ libcc1/
+ * libcp1plugin.cc (plugin_build_dependent_expr): Adjust
+ lookup_name_real & lookup_qualified_name calls.
+
+2020-08-13 Nathan Sidwell <nathan@acm.org>
+
+ Cherry pick 0c5f6bbfe2e
+ gcc/cp/
+ * name-lookup.h (enum class LOOK_where): New.
+ (operator|, operator&): Overloads for it.
+ (lookup_name_real): Replace NONCLASS & BLOCK_P parms with WHERE.
+ * name-lookup.c (identifier_type_value_w): Adjust
+ lookup_name_real call.
+ (lookup_name_real_1): Replace NONCLASS and BLOCK_P parameters
+ with WHERE bitmask. Don't search namespaces if not asked to.
+ (lookup_name_real): Adjust lookup_name_real_1 call.
+ (lookup_name_nonclass, lookup_name)
+ (lookup_name_prefer_type): Likewise.
+ * call.c (build_operator_new_call)
+ (add_operator_candidates): Adjust lookup_name_real calls.
+ * parser.c (cp_parser_lookup_name): Likewise.
+ * pt.c (tsubst_friend_class, lookup_init_capture_pack)
+ (tsubst_expr): Likewise.
+ * semantics.c (capture_decltype): Likewise.
+ libcc1/
+ * libcp1plugin.cc (plugin_build_dependent_expr): Likewise.
+
+2020-08-07 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk d21252de6c8.
+
+ Address 2 FIXMEs.
+ gcc/cp/
+ * name-lookup.c (finish_nonmember_using_decl): Here.
+ (lookup_type_scope_1): Here.
+
+ Global decls.
+ gcc/cp/
+ * name-lookup.c (get_fixed_binding_slot): Skip internal decls when
+ creating vector.
+ (record_mergeable_decl): Replace with ...
+ (maybe_record_mergeable_decl): Skip internal decls.
+ (do_pushdecl): Adjust.
+ * decl.c (start_decl): Templated vars are not
+ internal. (Incomplete fix of PR 96523)
+
+ Shadowed type.
+ gcc/cp/
+ * name-lookup.c (check_module_override): No need to deal with
+ shadowed type here.
+ gcc/testsuite/
+ * g++.dg/modules/shadowed-1_[ab].C: New.
+
+ Simplify binding extraction.
+ gcc/cp/
+ * name-lookup.h (extract_module_binding): Drop NS arg.
+ * name-lookup.c (extract_module_binding): Reimplement.
+ * module.cc (depset::hash::add_namespace_entities): Adjust.
+
+2020-08-06 Nathan Sidwell <nathan@acm.org>
+
+ Remove now-unneeded dedup bits.
+ gcc/cp/
+ * module.cc (module_state::read_cluster): Don't set dedup for
+ partition or header unit.
+
+ Determine deduplication via slot flags.
+ gcc/cp/
+ * module.cc (module_state::read_cluster): Disable dedup here.
+ * name-lookup.cc (get_fixed_binding_slot): Set
+ MODULE_BINDING_GLOBAL_P if necessary.
+ (name_lookup::search_bitmap_only): Inspect MODULE_BINDING_$foo_P.
+ (name_lookup::adl_namespace_fns): Likewise.
+ (set_module_binding): Always stat hack if mod_glob.
+
+ gcc/cp/
+ * module.cc (module_state::read_cluster): Pay attention to hidden
+ decls even in same module.
+ * name-lookup.c (name_lookup:adl_namespace_fns): Drop unused parm.
+
+2020-08-05 Nathan Sidwell <nathan@acm.org>
+
+ Note binding slot origin.
+ gcc/cp/
+ * cp-tree.h (MODULE_BINDING_{GLOBAL,PARTITION}_P): New.
+ * module_cc (module_state::read_cluster): Adjust
+ set_module_binding call.
+ * name-lookup.c (set_module_binding): Replace inter_p with
+ mod_glob parm. Adjust and set origin.
+ * name-lookup.h (set_module_binding): Adjust prototype.
+
+ Note duplicates on symbol vector.
+ gcc/cp/
+ * cp-tree.h (MODULE_VECTOR_{GLOBAL,PARTITION}_DUPS_P): New.
+ * name-lookup.h (mergeable_namespace_entities): Replace with ...
+ (mergeable_namespace_slots): ... this.
+ * module.cc (trees_in::key_mergeable): Set dups flag when alread
+ existing.
+ * name-lookup.c (mergeable_namespace_entities): Replace with ...
+ (mergeable_namespace_slots): ... this. Return the vector too.
+
+2020-08-04 Nathan Sidwell <nathan@acm.org>
+
+ Fix alias templates.
+ gcc/cp/
+ * pt.c (lookup_template_class_1): Fix alias resetting of
+ ti_template.
+ gcc/testsuite/
+ * g++.dg/template/pr95263.C: Re-enable.
+
+ Merge trunk 1790d13dc8f.
+
+2020-08-03 Nathan Sidwell <nathan@acm.org>
+
+ Revert local paranoid change.
+ gcc/cp/
+ * cp-tree.h (build_cdtor_clones, clone_cdtor): Drop via_using parm.
+ * class.c (build_cdtor_clones): Drop via_using parm.
+ (clone_cdtor): Likewise.
+ (clone_constructors_and_destructors): Adjust.
+ * module.cc (trees_in::decl_value): Adjust build_cdtor_clones parms.
+
+ Add private module fragment parsing (only).
+ gcc/cp/
+ * parser.c (enum module_preamble): Replace with ...
+ (enum module_parse): Update all uses. Add PMF values.
+ (cp_parser_module_declaration): Add private-module-fragment grammar.
+ gcc/testsuite/
+ * g++.dg/modules/pmp-[123]{,_[ab]}.C: New.
+
+ Fix save-temps & header-units
+ gcc/cp/
+ * lang-specs.h (@c++-{,system-,user-}header): Directives-only
+ preprocessing for saving temps with modules.
+
+ Merge trunk d1773f58f3a.
+
+ Add c++-user-header c++-system-header languages.
+ gcc/cp/
+ * lang-specs.h (@c++-header): Map -fmodules-ts to -fmodule-header,
+ inhibit PCH.
+ (@c++-user-header, @c++-system-header): New.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Document.
+
+2020-07-31 Nathan Sidwell <nathan@acm.org>
+
+ Preserve reserved locations.
+ gcc/cp/
+ * module.cc (enum loc_kind): Add LK_RESERVED.
+ (module_state::{read,write}_location): Preserve reserved
+ locations.
+ (module_State::{read,write}_macro_maps): Default to
+ UNKNOWN_LOCATION.
+ gcc/testsuite/
+ * g++.dg/modules/part-mac-1_[abc].[CH]: New.
+
+ Fix location of imports of partitions.
+ * module.cc (loc_spans::maybe_propagate): New.
+ (module_state::read_{ordinary,macro}_maps): Use it.
+ gcc/testsuite/
+ * g++.dg/modules/part-hdr-1_[abc].[CH]: New.
+
+ Fix import location reparenting.
+ gcc/cp/
+ * module.cc (preprocess_module): Reparent here, if we're already
+ imported.
+ gcc/testsuite/
+ * g++.dg/modules/reparent-1_[abc].C: New.
+
+2020-07-30 Nathan Sidwell <nathan@acm.org>
+
+ Unspellable module control-line tokens.
+ libcpp/
+ * internal.h (struct spec_nodes): Add M__IMPORT.
+ * init.c (post_options): Adjust module token spelling.
+ * lex.c (cpp_maybe_module_directive): Adjust.
+ * macro.c (cpp_get_token_1): Reset to zero.
+ gcc/c-family/
+ * c-common.c (c_common_reswords): Adjust module token spelling.
+ gcc/testsuite/
+ * g++.dg/modules/dir-recovery.C: New.
+ * g++.dg/modules/cpp-[25]_c.C: Adjust.
+ * g++.dg/modules/dep-2.C: Adjust.
+ * g++.dg/modules/dir-only-[234]{,_b}.C: Adjust.
+ * g++.dg/modules/inc-xlate-1_b.H: Adjust.
+ * g++.dg/modules/legacy-[36]_[bcd].[HC]: Adjust.
+
+ Fix implicit fns from modules.
+ gcc/cp/
+ * cp-tree.h (build_cdtor_clones): Add parms.
+ * class.c (build_cdtor_clones): Swallow clone_cdtor's member insertion.
+ (clone_cdtor): Move member insertion to build_cdtor_clones.
+ * module.cc (trees_in::decl_value): Insert clones, if there's
+ already a member vec.
+ gcc/testsuite/
+ * g++.dg/modules/sv-1{.h,_[ab].C}: New.
+
+2020-07-28 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk f3665bd1111.
+
+ gcc/cp/
+ * class.c (layout_class_type): Restore trunk for unnamed classes.
+ * cp-tree.h (lang_tree_node): Retore trunk GTY.
+ (cp_tree_node_structure): Restore trunk API.
+ * decl.c (cp_tree_node_structure): Restore trunk API.
+ * diagnostic.c (progname): Restore trunk comment.
+ gcc/
+ * doc/invoke.texi (Precompiled Headers): Restore trunk index
+ capitalization.
+ (C++ Modules): Adjust to match.
+
+ Merge trunk 134051f16bd.
+
+ libcpp/
+ * directives.c (_cpp_do_file_change): Check we're moving to line
+ zero of the same file.
+
+2020-07-22 Nathan Sidwell <nathan@acm.org>
+
+ gcc/c-family/
+ * c-ada-spec.c (decl_sloc): Revert to trunk.
+
+ Merge trunk 6e1e0decc9e.
+
+ Unbreak Ada
+ gcc/
+ * gcc.c (execute): Disable argv[0] munging.
+
+2020-07-21 Nathan Sidwell <nathan@acm.org>
+
+ Sadly Ada still broken :(
+ gcc/c-family/
+ * c-ada-spec.c (decl_sloc): Actually return the field's loc.
+
+2020-07-20 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * rtti.c (init_rtti_processing): Unbreak bootstrap.
+
+ Merge trunk a926eeedf43.
+
+2020-07-17 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * files.c (_cpp_stack_file): Remove FIXME.
+ * include/cpplib.h (cpp_main_loc): Declare.
+ * init.c (cpp_read_main_file): Set main loc.
+ (cpp_main_loc): New.
+ * internal.h (struct cpp_reader): Add main_loc.
+ gcc/cp/
+ * module.cc (main_source_loc): Delete.
+ (module_translate_include): Use cpp_main_loc.
+ (begin_header_unit, preprocess_module, preprocessed_module)
+ (init_modules, finish_module_processing): Likewise.
+ (fini_modules): Adjust.
+
+2020-07-16 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_may_redeclare): Deal with declaring a builtin
+ in a header unit.
+ * rtti.c (init_rtti_processing): The type is not exported.
+
+ libcpp/
+ * directives.c (do_include_common): Drop FIXME question.
+ * lex.c (cpp_maybe_module_directive): C++ keywords are not a thing
+ here.
+ (cpp_directive_only_process): Add assert.
+
+ libcpp/
+ * include/cpplib.h (struct cpp_callbacks): Adjust
+ translate_include's return type.
+ * files.c (_cpp_stack_file): Push the buffer returned by the hook.
+ * lex.c (_cpp_clean_line): Fix buffer overrun.
+ gcc/
+ * langhooks.h (struct lang_hooks): Change
+ preprocess_translate_include's return type.
+ gcc/cp/
+ * cp-tree.h (module_translate_include): Change return type.
+ * module.cc (module_translate_include): Return a buffer, don't
+ push it.
+
+ libcpp/
+ * include/cpplib.h (enum cpp_main_search): New.
+ (struct cpp_options): Adjust.
+ * init.c (cpp_read_main_file): Adjust.
+ * macro.c (cpp_get_token_1): Remove FIXME.
+ gcc/cp/
+ * module.cc (handle_module_option): Adjust.
+
+ gcc/cp/
+ * pt.c (tsubst_expr): Do not process using decls again.
+ gcc/testsuite/
+ * g++.dg/modules/using-6_a.C: Enable elided code.
+ * g++.dg/modules/using-8_[ab].C: New.
+
+2020-07-15 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 765fbbf9bb3.
+
+2020-07-14 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 5f809982e8e.
+
+2020-07-13 Nathan Sidwell <nathan@acm.org>
+
+ Delete now-unused new pieces.
+ gcc/
+ * toplev.h (original_argc, original_argv): Delete.
+ * toplev.c (original_argc, original_argv): Delete.
+ gcc/cp/
+ * cp-tree.h (DECL_CHECK): Delete.
+ gcc/c-family
+ * c-pragma.h (C_LEX_STRING_IS_HEADER): Delete.
+
+ gcc/cp/
+ * module.cc (module_state::set_filename): New.
+ (module_state::do_import): Drop fname arg.
+ (module_state::read_imports): Set filename here.
+ (module_state::write_locations): Drop duplicate FIXME.
+ (module_state::read_macros): Drop out of date FIXME.
+ (direct_import): Adjust.
+ (module_translate): Set filename if we're told it.
+ (preprocess_module): Copy if filename already known.
+ (preprocessed_module, init_modules): Adjust.
+
+ gcc/cp/
+ * module.cc (module_state::read_cluster): Add FIXME about
+ unnecessary deduping.
+ * name-lookup.c (name_lookup::process_module_binding): Remove
+ FIXME.
+ (name_lookup::adl_namespace_fns): Likewise.
+ (name_lookup::search_adl): Likewise.
+ (do_push_nested_namespace): Likewise.
+
+ gcc/testsuite/
+ * lib/scanlang.exp (scan-lang-dump-not): Fix 3-arg case.
+ * g++.dg/modules/builtin-3_a.C: Remove unnecessary bracing.
+
+ Merge trunk a1faa8e2470.
+
+ Fix polymorphic type info emission and key-function confusion
+ gcc/cp/
+ * module.cc (trees_out::core_bools): Calculate externalness from
+ POV of importer.
+ (trees_{in,out{::lang_decl_bools): Do not stream
+ not_really_extern.
+ (trees_in::read_{var,function}_def): Recalculate
+ not_really_extern.
+ (trees_in::read_class_def): The key_method might become non-key.
+ gcc/testsuite/
+ * g++.dg/modules/sym-subst-3_a.C: Adjust regexp.
+ * g++.dg/modules/virt-1_[ab].C: Adjust.
+ * g++.dg/modules/virt-2_[abc].C: New.
+
+2020-07-09 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * modules.cc (trees_out::type_node [VECTOR_TYPE]): poly_int's
+ to_constant already does the checking we need.
+
+ gcc/testsuite/
+ * g++.dg/modules/sym-subst-3_a.C: Adjust scan for other ABIs
+
+ gcc/testuite/
+ * g++.dg/modules/builtin-3_[ab].C: Add va_list scans for
+ aarch64 and powerpc ABIs.
+
+2020-07-08 Nathan Sidwell <nathan@acm.org>
+
+ gcc/testsuite/
+ * g++.dg/modules/module.exp: Remove tcl 8.6ism
+
+ Merge trunk 6bf2ff0d52a.
+
+2020-07-03 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk ce0f842492c
+
+2020-07-03 Iain Sandoe <iain@sandoe.co.uk>
+
+ gcc/cp/
+ * name-lookup.c (name_lookup::adl_namespace_fns): Last param is
+ unused, and bootstrap complains :( [Nathan left it like that so
+ he'd be reminded to remove it if it really turned out not needed]
+
+2020-07-02 Nathan Sidwell <nathan@acm.org>
+
+ p1779 ABI isolation
+ gcc/cp/
+ * cp-tree.h (named_module_purview_p): New.
+ * decl.c (grokmethod): Don't always implicitly inline.
+ * module.cc (module_state_config::get_dialect): Add
+ module_implicit_inline.
+ gcc/
+ * doc/invoke.texi (fmodule-implicit-inline): Document.
+ gcc/c-family/
+ * c.opt (-fmodule-implicit-inline): New.
+ gcc/testsuite/
+ * g++.dg/modules/imp-member-[12]_b.C: Add some inlines.
+ * g++.dg/modules/vmort-1_a.C: Likewise.
+ * g++.dg/modules/imp-inline-1_[ab].C: New.
+
+2020-07-01 Nathan Sidwell <nathan@acm.org>
+
+ GMF entities are not findable by name
+ gcc/cp/
+ * modules.cc (enum depset::disc_bits): Remove DB_GLOBAL_BIT.
+ (depset::is_global): Delete
+ (depset::hash::make_dependency): Drop reachable GMF binding
+ insertion.
+ gcc/testsuite/
+ * g++.dg/modules/builtin-[13]_[ab].C: Adjust scans.
+ * g++.dg/modules/mod-sym-2.C: Adjust scans.
+
+ Implement FR039 -- dependent ADL and friend fns
+ gcc/cp/
+ * name-lookup.c (name_lookup::adl_namespace): Instantiation path
+ is not important here.
+ (name_lookup::search_adl): Reimplement dependent adl for modules.
+ gcc/testsuite/
+ * g++.dg/modules/adl-[12]_b.C: export.
+ * g++.dg/modules/adl-[45]_[abcd].C: New.
+
+2020-06-30 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * class.c (copyfndecl_with_name): Drop inadvertent
+ DECL_CLONED_FUNCTION setting. Pass 0 for top_level to
+ rest_of_decl_compiulation.
+
+ gcc/cp/
+ * class.c (copy_fndecl_with_name): Add tree code parm. Adjust
+ callers.
+
+ libcc1/
+ * libcp1plugin.cc (plugin_build_decl): Adjust.
+
+ Unify copy_fndecl_with_name and clone_decls.
+ gcc/cp/
+ * class.c (DECL_NEEDS_VTT_PARM_P): Delete.
+ (copy_fndecl_with_name): Add ctor booleans, use them. Make static.
+ (copy_operator_fn): New wrapper.
+ (build_clone): Adjust to use copy_fndecl_with_name.
+ (build_clones): Rename to ...
+ (build_cdtor_clones): ... here.
+ (clone_function_decl): Rename to ...
+ (clone_cdtor): ... here.
+ (clone_constructors_and_destructors): Adjust.
+ * cp-tree.h (build_clones): Rename to build_cdtor_clones.
+ (clone_function_decl): Rename to clone_cdtor.
+ (copy_fndecl_with_name): Rename to copy_operator_fn. Change arg
+ type.
+ * method.c (implicitly_declare_fn): Adjust.
+ (lazily_declare_fn): Likewise.
+ * module.c (trees_in::decl_value): Adjust.
+ * pt.c (tsubst_function_Decl, instantiate_template_1): Adjust.
+
+2020-06-29 Nathan Sidwell <nathan@acm.org>
+
+ Merge master 9a33c41fe42
+
+ Merge master 44492e248cb
+ c++: implicit operator== adjustments from P2002. [Jason Merrill]
+ gcc/cp/
+ * class.c (build_clone): Retain old version for the moment.
+ (DECL_NEETS_VTT_PARM_P): Resurrect, before we kill it again.
+
+2020-06-25 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * mapper-server.cc (process_server): We should Write when writing.
+ (server): Fix off-by-one error.
+
+ Merge master 68df8e8c343
+
+ Merge master 502d63b6d61
+ Lower VEC_COND_EXPR into internal functions. [Martin Liska]
+ Apply d11c9841d54 Add missing check for gassign. [Martin Liska]
+ Apply 9435fb9668e Fix typo in tree-ssa-reassoc.c. [Martin Liska]
+
+ Merge master 2021af0c23a
+
+ Merge master 668ef28fbb4
+ c++: Clean up previous change [PR41437] [Patrick Palka]
+ gcc/cp/
+ * module.cc (trees_{in,out}::code_vals [TEMPLATE_INFO]): Adjust
+ access checking streaming.
+
+ Merge master 92bed036098
+ c++: Improve access checking inside templates [PR41437] [Patrick Palka]
+
+ Merge master a97e49a89d1
+
+2020-06-24 Nathan Sidwell <nathan@acm.org>
+
+ Merge master f2242ec0d3f
+ Over the hump!
+
+ Constrained partial specializations
+ gcc/cp/
+ * module.cc (depset::hash::add_partial_redirect): Add slot parm.
+ (enum merge_kind): Add MK_partial.
+ (merge_kind_name): Likewise.
+ (trees_out::decl_node): A redirect may be for an EK_DECL.
+ (trees_out::get_merge_kind): Determine MK_partial.
+ (trees_{in,out}::key_mergeable): Deal with MK_partial.
+ (depset::hash::make_dependency): Deal with discovering a partial
+ specialization.
+ * pt.c (maybe_new_partial_specialization): Add module bits to the
+ new typedef.
+ (tsubst_template_decl): Relax module import assert.
+ (tsubst_template_decl): Refactor, add fixme to check.
+ gcc/testsuite/
+ * g++.dg/modules/nested-constr-1.h: New.
+ * g++.dg/modules/nested-constr-1_a.H: New.
+ * g++.dg/modules/nested-constr-1_b.C: New.
+ * g++.dg/modules/nested-constr-2_a.C: New.
+ * g++.dg/modules/nested-constr-2_b.C: New.
+ * g++.dg/modules/nested-constr-2_c.C: New.
+ * g++.dg/modules/tmpl-part-req-1.h: New.
+ * g++.dg/modules/tmpl-part-req-1_a.H: New.
+ * g++.dg/modules/tmpl-part-req-1_b.C: New.
+ * g++.dg/modules/tmpl-part-req-2.h: New.
+ * g++.dg/modules/tmpl-part-req-2_a.H: New.
+ * g++.dg/modules/tmpl-part-req-2_b.C: New.
+
+2020-06-11 Nathan Sidwell <nathan@acm.org>
+
+ Merge master b825a228907
+
+2020-06-10 Nathan Sidwell <nathan@acm.org>
+
+ Merge master ac9face8d26
+ PR c++/95263
+ gcc/cp/
+ * pt.c (lookup_template_class_1): Do not apply reversion
+ gcc/testsuite/
+ * g++.dg/template/pr95263.C: New (XFAIL)
+
+ Merge master 6c8e16aea85
+
+2020-06-10 Iain Sandoe <iain@sandoe.co.uk>
+
+ Fixes for darwin
+ gcc/cp/
+ * mapper-server.cc: Reorder includes.
+ (server): Block scope potentially empty if clause.
+ * module.cc (get_mapper): Don't use C++14.
+ gcc/testsuite/
+ * g++.dg/modules/bad-mapper-3: Adjust error.
+
+2020-06-05 Nathan Sidwell <nathan@acm.org>
+
+ Install V1 module protocol goop
+ gcc/cp/
+ * Make-lang.in: Remove mapper-server2 hack.
+ * mapper-client.cc: Add additional mechanisms to get a server.
+ * mapper-client.h: Delete.
+ * mapper-resolver.cc: Fix file reading bugs
+ * mapper-server.cc: Original deleted.
+ * mapper-server2.cc: Renamed to mapper-server.cc.
+ * mapper.h: Adjust.
+ * module.cc: Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/bad-mapper-1.C: Adjust expected errors.
+ * g++.dg/modules/bad-mapper-2.C: Likewise.
+ * g++.dg/modules/bad-mapper-3.C: Likewise.
+ * g++.dg/modules/map-2.C: Likewise.
+
+ Add libcody as an external library
+ * libcody: Delete
+ * Makefile.def: Revert.
+ * configure.ac: Revert. Add --with-libcody.
+ * Makefile.tpl: Add CODYLIB, CODYLIBINC, HOST_CODYLIB, HOST_CODYLIBINC.
+ * Makefile.in: Rebuilt.
+ * configure: Rebuilt.
+ gcc/
+ * Makefile.in: Revert. Add CODYLIB, CODYLIBINC.
+ * configure.ac: Add CODYLIB, CODYLIBINC.
+ * configure: Rebuilt.
+ gcc/cp
+ * Make-lang.in: Revert.
+
+2020-06-02 Nathan Sidwell <nathan@acm.org>
+
+ Add libcody with stub users
+ * libcody: New. Currently a symlink to cody repo.
+ * Makefile.def: Add libcody.
+ * configure.ac: Add libcody.
+ * Makefile.in: Rebuilt.
+ * configure: Rebuilt.
+ gcc/
+ * Makefile.in: Add libcody.
+ gcc/cp/
+ * Make-lang.in: Add libcody
+ * mapper.h: New stub/
+ * mapper-resolver.cc: New stub.
+ * mapper-server2.cc: New stub.
+
+2020-05-21 Nathan Sidwell <nathan@acm.org>
+
+ FR39 ...
+
+ Merge master 149c8c7c27a
+
+ Premerging Patrick's c++/95223 fix.
+ gcc/cp/
+ * cp-tree.h (comparing_typenames): Declare.
+ (module_streaming): Delete.
+ * modules.cc (module_streaming): Delete.
+ (module_state::read_cluster): Increment comparing_typenames, not
+ module_streaming.
+ * pt.c (comparing_typenames): Define.
+ (spec_hasher::equal): Increment it.
+ * typeck.c (structural_comptypes): Check it here for typedefs.
+
+ libcpp/
+ * files.c, init.c, internal.h: Adjust file_find_kind names from trunk.
+
+ libcpp/
+ * line-map.c (linemap_add): Set range and column bits to zero.
+ gcc/c-family/
+ * c-opts.c (c_common_post_options): Add comment.
+ (c_finish_options): Call linemap_line_start to start line.
+
+2020-05-20 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * include/cpplib.h (cpp_read_main): Document preamble arg.
+ * internal.h (IT_MAIN_{ZERO,REAL}): Rename to ...
+ (IT_MAIN_PREAMBLE, IT_MAIN): ... these.
+ * files.c (_cpp_stack_file): Adjust.
+ * init.c (cpp_read_main_file): Adjust.
+
+ libcpp/
+ * directives.c (_cpp_do_file_change): Optimize rewinding one line
+ to line zero.
+ gcc/c-family/
+ * c-opts.c (c_finish_options): Set locations to zero.
+ * c-ppoutput.c (cb_define): Always advance line number.
+
+ libcpp/
+ * files.c (cpp_push_include): Pass highest_line for loc.
+ (cpp_push_default): Likewise.
+ * line-map.c (linemap_add): Set range and column bits to what we
+ used to figure start location.
+
+2020-05-19 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * internal.h (enum _find_file_kind): New.
+ (_cpp_find_file): Use it, not 3 bools.
+ * files.c (_cpp_find_file): Use _find_file_kind enum, not bools.
+ (_cpp_stack_include, cpp_find_header_unit, _cpp_fake_include)
+ (_cpp_do_file_change, _cpp_compare_file_date): Adjust.
+ * init.c (cpp_read_main): Adjust _cpp_find_file call.
+
+2020-05-18 Iain Sandoe <iain@sandoe.co.uk>
+
+ gcc/testsuite/
+ * g++.dg/modules/sym-subst-3_a.C: Adjust scan asm for Darwin.
+ * g++.dg/modules/init-2_b.C: Adjust scan-asms for Darwin.
+ * g++.dg/modules/init-2_c.C: Likewise.
+
+ gcc/cp/
+ * mapper-client.cc: Move fallback typedef for sighandler_t
+ from here ...
+ * mapper-client.h: ... to here.
+
+2020-05-19 Nathan Sidwell <nathan@acm.org>
+
+ Merge master ed63c387aa0
+
+ gcc/cp/
+ * name-lookup.c (add_imported_namespace): Clarify
+ inline/non-inline error message.
+
+ libcpp/
+ * lex.c (do_peek_module): Permit non-ascii char sets.
+
+2020-05-15 Nathan Sidwell <nathan@acm.org>
+
+ Enumerate load states.
+ gcc/cp/
+ * module.cc (enum module_loadedness): New.
+ (module_state::load_state): Rename to ..
+ (module_state::loadedness): ... this, change type.
+ (module_state::read_{imports,preprocessor,language}): Adjust,
+ (module_State::{load_section,do_mport}): Likewise,
+ (direct_import, {import,declare,preprocess}_module): Likewise.
+
+ Remove {,purview_,partition_}direct_p flags.
+ gcc/cp/
+ * module.cc (module_state::{,purview_,partition_}_direct_p):
+ Remove flags.
+ (module_state::is{,purview_,partition_}direct_p}): Adjust.
+ (module_state::{read,write}_imports): Remove direct flag handling.
+ (module_state::write): Likewise.
+ (direct_import, process_module): Likewise.
+
+ Duplicate {,purview_,partition_}direct_p flags in an enum.
+ gcc/cp/
+ * module.cc (enum module_directness): New.
+ (module_state): Add it.
+ (module_state::is{,purview_,partition_}direct_p}): Consistency
+ asserts.
+ (module_state::{read,write}_imports): Adjust and add Consistency
+ asserts.
+ (module_state::write): Likewise.
+ (direct_import, preprocess_module): Likewise.
+
+2020-05-14 Nathan Sidwell <nathan@acm.org>
+
+ Stop GMF leakage from interface to implementation
+ gcc/cp/
+ * cp-tree.h (preprocess_module): Add in_purview param.
+ * lex.c (token_coro::resume): Adjust.
+ * module.cc (module_state::purview_direct_p): New flag.
+ (module_state::{read,write}_imports): Pay attention to it for
+ invisible imports.
+ (begin_header_unit): Adjust preprocess_module call.
+ (preprocess_module): Set purview_direct_p as appropriate.
+ gcc/testsuite/
+ * g++.dg/modules/gmf-2_[abcd].[CH]: New.
+
+ Merge master f497e36ae56
+
+2020-05-13 Nathan Sidwell <nathan@acm.org>
+
+ Implement P1874 Dynamic Initialization Order
+ gcc/cp/
+ * cp-tree.h (module_initializer_kind)
+ (module_add_import_initializers): Declare.
+ (mangle_module): Add include_partition parm.
+ (init_module_processing): Rename to init_modules.
+ (fini_modules): Declare.
+ (mangle_identifier): Add prefix char.
+ (mangle_module_global_init): Declare.
+ * decl.c (cxx_init_decl_processing): Adjust for module init
+ rename.
+ * decl2.c (start_objects): Maybe mangle module initializer name.
+ Add module initializers.
+ (generate_ctor_or_dtor_function): Add module init support.
+ (c_parse_final_cleanups): Likewise, adjust for module fini
+ addition.
+ * mangle.c (mangle_identifier): Add prefix char.
+ (write_module): New, broken out of ...
+ (maybe_write_module): ... here. Call it.
+ (mangle_module_global_init): New.
+ * module.cc (module_state): Add call_init_p flag.
+ (num_init_calls_needed): New global.
+ (module_state::mangle): Add include_partition parm.
+ (mangle_module): Likewise.
+ (module_initializer_kind): New.
+ (module_add_import_initializers): New.
+ (init_module_processing): Rename to ...
+ (init_modules): ... here.
+ (finish_module_processing): Calculate call_init_p.
+ (fini_modules): New, broken out of finish_module_processing.
+ gcc/testsuite/
+ * g++.dg/modules/init-[12]_[abc].C: New.
+
+2020-05-12 Nathan Sidwell <nathan@acm.org>
+
+ Merge master 2a0225e4786.
+
+2020-05-08 Nathan Sidwell <nathan@acm.org>
+
+ Merge master b224c3763e0.
+
+ EOF has a location
+ gcc/cp/
+ * parser.c (cp_lexer_set_source_position_from_token): Don't
+ special-case EOF.
+ gcc/testsuite/
+ * c-c++-common/raw-string-6.c: Adjust expected locations:
+ * g++.dg/cpp0x/decltype63.C: Likewise.
+ * g++.dg/cpp0x/gen-attrs-64.C
+ * g++.dg/cpp0x/pr68726.C: Likewise.
+ * g++.dg/cpp0x/pr78341.C: Likewise.
+ * g++.dg/cpp1y/pr65202.C: Likewise.
+ * g++.dg/cpp1z/class-deduction44.C: Likewise.
+ * g++.dg/diagnostic/unclosed-extern-c.C: Likewise.
+ * g++.dg/diagnostic/unclosed-function.C: Likewise.
+ * g++.dg/diagnostic/unclosed-namespace.C: Likewise.
+ * g++.dg/diagnostic/unclosed-struct.C: Likewise.
+ * g++.dg/ext/pr84598.C: Likewise.
+ * g++.dg/other/switch4.C: Likewise.
+ * g++.dg/parse/crash10.C: Likewise.
+ * g++.dg/parse/crash18.C: Likewise.
+ * g++.dg/parse/crash35.C: Likewise.
+ * g++.dg/parse/crash59.C: Likewise.
+ * g++.dg/parse/crash61.C: Likewise.
+ * g++.dg/parse/crash67.C: Likewise.
+ * g++.dg/parse/ctor3.C: Likewise.
+ * g++.dg/parse/error14.C: Likewise.
+ * g++.dg/parse/error5.C: Likewise.
+ * g++.dg/parse/error56.C: Likewise.
+ * g++.dg/parse/invalid1.C: Likewise.
+ * g++.dg/parse/parameter-declaration-1.C: Likewise.
+ * g++.dg/parse/parser-pr28152-2.C: Likewise.
+ * g++.dg/parse/parser-pr28152.C: Likewise.
+ * g++.dg/parse/pr68722.C: Likewise.
+ * g++.dg/pr46852.C: Likewise.
+ * g++.dg/pr46868.C: Likewise.
+ * g++.dg/template/crash115.C: Likewise.
+ * g++.dg/template/crash43.C: Likewise.
+ * g++.dg/template/error-recovery1.C: Likewise.
+ * g++.dg/template/error57.C: Likewise.
+ * g++.old-deja/g++.other/crash31.C: Likewise.
+
+2020-05-07 Nathan Sidwell <nathan@acm.org>
+
+ Merge master ab2952c77d0
+
+2020-05-05 Nathan Sidwell <nathan@acm.org>
+
+ Just push the eh decls.
+ gcc/cp/
+ * except.c (declare_library_fn_1): Don't look at current binding.
+ Just make the decl and push it.
+ * name-lookup.h (get_global_module_decls): Delete decl.
+ * name-lookup.c (get_global_module_decls): Delete defn.
+
+ Fix eh specs
+ gcc/testsuite/
+ * g++.dg/eh/builtin{5,7,9,10,11}.C: Fix eh specs on __cxa fn decls.
+
+ Fix libitm's decls
+ libitm/
+ * eh_cpp.cc (__cxa_allocate_exception, __cxa_free_exception)
+ (__cxa_begin_catch, __cxa_tm_cleanup, __cxa_eh_globals): Fix
+ exception specification.
+ (_ITM_cxa_allocate_exception, _ITM_cxa_free_exception)
+ (_ITM_cxa_begin_catch): Likewise.
+ * libitm.h (_ITM_NOTHROW): New define.
+ (_ITM_cxa_allocate_exception, _ITM_cxa_free_exception)
+ (_ITM_cxa_begin_catch): Use it.
+ * testsuite/lib/libitm.exp (libitm_init): Add
+ -fdiagnostics-color=never.
+
+2020-05-04 Nathan Sidwell <nathan@acm.org>
+
+ Simplify except fn helper pushing part 1
+ gcc/cp/
+ * decl.c (push_library_fn): Return the decl pushdecl_toplevel returns.
+ * except.c (verify_library_fn): Replace with ...
+ (declare_library_fn_1): ... this fn.
+ (declare_library_fn): Call it.
+ (build_throw): Call declare_library_fn_1.
+ * name-lookup.h (get_global_module_decls): Declare.
+ * name-lookup.c (get_namespace_binding): Return this TU's
+ bindings.
+ (get_global_module_decls): New.
+ gcc/testsuite/
+ * g++.dg/eh/builtin10.C: Adjust expected errors.
+ * g++.dg/eh/builtin11.C: Likewise.
+ * g++.dg/eh/builtin6.C: Likewise.
+ * g++.dg/eh/builtin7.C: Likewise.
+ * g++.dg/eh/builtin9.C: Likewise.
+ * g++.dg/parse/crash55.C: Likewise.
+
+2020-05-01 Nathan Sidwell <nathan@acm.org>
+
+ Fix macro expansion of header-unit names
+ libcpp/
+ * macro.c (cpp_get_token_1): Pay attention to arg parsing mode,
+ and the existence of padding/comment tokens.
+ gcc/testsuite/
+ * g++.dg/modules/cpp-6_[abc].[CH]: New.
+
+2020-04-30 Nathan Sidwell <nathan@acm.org>
+
+ Set TREE_USED on stream in.
+ gcc/cp/
+ * module.cc (trees_in::unused): New field.
+ (trees_in::tree_node): Add defaulted off is_use arg, set TREE_USED
+ on streamed in obect. Adjust callers to set it.
+ (trees_{in,out}::core_bools): Do not stream base.used_flag.
+ (trees_{in,out}::core_vals): Reorder BINFO fields. Increment
+ unused around vtbl pieces.
+ (trees_in::decl_value): Save and reset unused field.
+ (trees_in::read_var_def): Increment unsused for vtbl initializers.
+ gcc/testsuite/
+ * g++.dg/modules/used-1_[abc].C: New.
+
+ Tweak builtin fn hack
+ gcc/cp/
+ * name-lookup.c (get_namespace_binding): Strip singleton
+ overloads.
+ gcc/testsuite/
+ * g++.dg/modules/libfn-1_[ab].C: New.
+
+2020-04-28 Nathan Sidwell <nathan@acm.org>
+
+ Partition pending indirection fixes
+ gcc/cp/
+ * module.cc (trees_in::install_entity): Treat pending flags
+ independently, adjust indirection installation.
+ (pendset_lazy_load): Add specialization_p arg. Use for
+ indirection adjustment.
+ (get_primary_module): Look at implementation unit's parent.
+ (lazy_load_{specializations,members}): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/part-6_[abcde].C: New.
+
+2020-04-23 Nathan Sidwell <nathan@acm.org>
+
+ Stream definitions after decls.
+ gcc/cp
+ * module.cc (module_state::write_cluster): Break out definition
+ streaming to separate loop.
+ gcc/testsuite/
+ * g++.dg/modules/member-def-[12]_c.C: Adjust scans, oh for CHECK-DAG.
+
+ Stream node types last
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Move type streaming to
+ end.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-4_c.C: Adjust scan.
+
+2020-04-22 Nathan Sidwell <nathan@acm.org>
+
+ Stream imports at start of cluster
+ gcc/cp/
+ * module.cc (trees_out::importedness): New checker.
+ (depset::hash::add_dependency): Add imports.
+ (depset::tarjan::connect): Skip imports.
+ (module_state::{read,write}_cluster): Seed imports before the
+ cluster itself.
+ gcc/testsuite/
+ * g++.dg/modules/class-3_[bd].C: Adjust scans.
+ * g++.dg/modules/imp-member-[12]_[ce].C: Adjust scans.
+ * g++.dg/modules/member-def-2_c.C: Adjust scans.
+ * g++.dg/modules/vmort-2_c.C: Adjust scans.
+
+
+2020-04-21 Nathan Sidwell <nathan@acm.org>
+
+ Don't stream DECL_ODR_USED or TREE_ASM_WRITTEN
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_values): Don't stream
+ base.asm_written_flag.
+ (trees_{in,out}::lang_decl_bools): Don't stream u.base.odr_used.
+
+ Remove DECL_MODULE_PARTITION_P, it is not needed.
+ gcc/cp/
+ * cp-tree.h (DECL_MODULE_PARTITION_P): Delete.
+ (lang_decl_base): Remove module_partition_p bitfield.
+ * decl.c (duplicate_decls): No need to check or reset it.
+ * lex.c (cxx_dup_lang_specific): No need to reset it.
+ * pt.c (build_template_decl): No need to check it.
+ (tsubst_template_decl): Likewise, or reset it.
+ * module.cc (trees_in::decl_value): No need to set it.
+ (trees_out::decl_node): No need to check it.
+ (depset::hash::make_dependency): Likewise, Adjust import marking
+ code.
+ (set_instantiating_module): No need to reset it.
+
+2020-04-17 Nathan Sidwell <nathan@acm.org>
+
+ Merge master a28edad3da5c59f09565d3d42e20be1a924986c4
+
+ gcc/cp/
+ * cxx-mapper.cc: Rename to ...
+ * mapper-server.cc: ... here.
+ * Make-lang.in: Adjust.
+ * module.cc (make_mapper): Adjust.
+ gcc/testsuite/
+ * g++.dg/modulex/inc-xlate-1_e.C: Adjust.
+ * g++.dg/modulex/legacy-[26]_[bcdef].[CH]: Likewise.
+
+ gcc/cp/
+ * module.cc (mapper_{import_export,export_done}): Revert
+ 2020-04-13 change.
+
+ gcc/cp/
+ * mapper-client.{h,cc}: New, broken out of ...
+ * module.cc: ... here.
+ (maybe_remove_cmi_prefix): Delete.
+ * Make-lang.in: Add mapper-client.
+
+ gcc/cp/
+ * module.cc (module_mapper::{get,make}): Replace with ...
+ (get_mapper, make_mapper): ... these.
+ (module_mapper:(kill,fini): Delete.
+ (module_mapper::{import_export,export_done}): Replace with ...
+ (mapper_import_export, mapper_export_done): ... these.
+
+ gcc/cp/
+ * module.cc (module_mapper::to): Drop unneeded field.
+
+ gcc/cp/
+ * module.cc (module_mapper::{open,close}): New methods, use them.
+
+ gcc/cp/
+ * module.cc (module_mapper): Break more stuff out of ctor.
+
+2020-04-13 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_mapper): Remove knowledge of module_state,
+ update all callers.
+
+2020-04-08 Nathan Sidwell <nathan@acm.org>
+
+ gcc/testsuite/
+ * g++.dg/modules/hello-1_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (trees_in::decl_value): Need to retrofit lang for
+ inner.
+ gcc/testsuite/
+ * g++.dg/modules/gmf-1_[ab].C: New.
+
+ gcc/testsuite/
+ * g++.dg/modules/xtreme-header-[1-6]_c.C: New.
+
+ gcc/cp/
+ * module.cc (trees_in::key_mergeable): Avoid null deref.
+ (direct_import): Create attachment table.
+ gcc/testsuite/
+ * g++.dg/modules/lambda-[23]_c.C: New.
+
+ Merge master 50c7853216e8511971c55b51d7fe29173db4749b
+
+2020-04-07 Nathan Sidwell <nathan@acm.org>
+
+ C++20 Ranges!
+ gcc/testsuite/
+ * g++.dg/modules/xtreme-header-2.h: Enable in c++20 mode.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::tpl_parm_value): Stream auto
+ placeholder & constraints.
+ gcc/testsuite/
+ * g++.dg/modules/lambda-4{,_[ab]}.[hHC]: New.
+
+ _FUN with recursive types (pun intended)
+ gcc/cp/
+ * module.cc (trees_out::key_mergeable): A lambda's static _FUN has
+ a recursive return type.
+ (trees_in::is_matching_decl): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/lambda-4{,_[ab]}.[hHC]: New.
+ * g++.dg/modules/concept-6_b.C: Remove xfail.
+
+ gcc/
+ * print-tree.c (print_node): Explicitly show CALL_EXPR null arguments.
+
+ gcc/cp/
+ * module.cc (trees_out::key_mergeable): Instantiations can have
+ requires. Not just the template.
+ gcc/testsuite/
+ * g++.dg/modules/concept-6{,_[ab]}.[hHC]: New.
+
+ gcc/cp/
+ * tree.c (cp_tree_equal): [CALL_EXPR] Directly check number of
+ arguments to a call. Assert they exist.
+ * typeck.c (structural_comptypes): [DECLTYPE_TYPE] Break apart if
+ conditional.
+
+2020-04-06 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp
+ * module.cc (depset::hash::make_dependency): Imported namespaces
+ from a partition don't have PARTITION_P set.
+ (module_state::write): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/part-5_[abc].C: New.
+
+2020-04-03 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/94476
+ gcc/cp/
+ * class.c (layout_class_type): Zap NSDMI of as_base fields.
+ gcc/testsuite/
+ * g++.dg/modules/nsdmi-2.C: New.
+
+ Merge master bcafd8748cf9eb83a9e71bf67c4e2a7c5c8f513c
+
+ NSDMIs
+ WARNING causes ICES in the STL header tests. There's a trunk
+ NSDMI parsing bug (pr94476)
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Write FIELD_DECL initial
+ value.
+ gcc/testsuite/
+ * g++.dg/modules/nsdmi-1_[ab].C: New.
+
+ gcc/testsuite/
+ * g++.dg/modules/xtreme-header-[123456]{,_[ab]}.[hHC]: New.
+
+ gcc/
+ * gcc.c (driver::maybe_print_and_exit): Shout about
+ experimentalness.
+ (driver::final_actions): Likewise.
+ * diagnostic.c (diagnostic_action_after_output): Likewise.
+ gcc/testsuite/
+ * lib/prune.exp (prune_gcc_output): Prune the shouting.
+
+ Template vars inited to lambdas
+ gcc/cp/
+ * module.cc (depset::hash::find_dependencies): Adjust dump
+ predicate.
+ gcc/testsuite/
+ * g++.dg/modules/lambda-3{,_[ab]}.[hHC]: New.
+
+ Resurrect topological key-order sort for clusters
+ gcc/cp/
+ * module.cc (depset::hash): Add chain, is_key_order.
+ (trees_out::is_key_order): New.
+ (trees_out::decl_value): Adjust for key-order walk.
+ (trees_out::{get_merge_kind,key_mergeable}): Likewise.
+ (depset::hash::add_dependency): Deal with key-order dependency.
+ (depset::hash::add_mergeable): New.
+ (depset::hash::find_dependencies): Adjust for key-order walk.
+ (cluster_cmp): Delete.
+ (sort_cluster): New.
+ (module_state::write): Call sort_cluster, not qsort (cluster_cmp).
+ gcc/testsuite/
+ * g++.dg/modules/indirect-[234]_b.C: Adjust final scan.
+ * g++.dg/modules/late-ret-3_a.H: Likewise.
+ * g++.dg/modules/member-def-[12]_c.C: Likewise.
+ * g++.dg/modules/tpl-alias-1_a.H: Likewise.
+ * g++.dg/modules/tpl-friend-1_a.C: Likewise.
+ * g++.dg/modules/tpl-spec-3_[ab].C: Likewise.
+ * g++.dg/modules/using-7.C: Likewise.
+
+2020-04-02 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * modules.cc (trees_out::decl_node): Treat namespaces like other
+ decls.
+ (module_state::write): When checking, insert non-imported
+ namespace-decls into the entity map here.
+
+ gcc/cp/
+ * modules.cc (trees_out::decl_value): Public.
+ (trees_out::decl_node): Do not expect by-value namespaces.
+ (depset::hash::find_dependencies): Deal with namespaces here.
+
+2020-04-01 Nathan Sidwell <nathan@acm.org>
+
+ gcc/testsuite/
+ * g++.dg/modules/tpl-alias-1_[ab].[HC]: Fix unresolved tests.
+ * g++.dg/modules/vtt-2_b.C: Likewise.
+
+ Lambdas attached to namespace-scope non-template vars
+ gcc/cp/
+ * cp-tree.h (DECL_ATTACHED_DECLS_P): New.
+ (struct lang_decl_base): Add attached_decls_p.
+ (maybe_attach_decl): Declare.
+ * lambda.c (record_lambda_scope): Call maybe_attach_decl.
+ * lex.c (cxx_dup_lang_specific): Clear DECL_ATTACHED_DECLS_P.
+ * module.c (uintset<T>::hash::create): New member function.
+ (attachset, attached_tables): Declare.
+ (enum merge_kind): Add MK_attached. Adjust.
+ (trees_{in,out}::lang_decl_bools): Stream attached_decls_p.
+ (trees_{in,out}::decl_value): Stream attached decls.
+ (trees_out::get_merge_kind): Determine if MK_attached.
+ (trees_{in,out}::key_mergeable): Stream MK_attached.
+ (depset::hash::make_dependency): You can get anonymous templatey
+ things (lambdas).
+ (maybe_attach_decl): New.
+ (finish_module_processing): Delete attached_table.
+ gcc/testsuite/
+ * g++.dg/modules/lambda-2_[ab].[HC]: Remove xfail, add dump scans.
+
+2020-03-31 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (module_streaming): Declare.
+ * module.cc (module_streaming): Define.
+ (cluster_cmp): Do not strip template off an alias instantiation.
+ (module_state::read_cluster): Increment module_streaming around
+ the loading.
+ * typeck.c (structural_comptypes): Do not resolve typename types
+ when module_streaming.
+
+ gcc/cp/
+ * pt.c (tsubst_lambda_expr): Set extra scope after creating the
+ lambda struct.
+
+2020-03-30 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * modules.cc (template<T> uintset): New template created from ...
+ (pendset): ... this. Use it. Adjust all uses.
+
+2020-03-27 Nathan Sidwell <nathan@acm.org>
+
+ Merge master 62ede14d30f5d083f1ab23bcab6e0e3c9c649006
+
+2020-03-26 Nathan Sidwell <nathan@acm.org>
+
+ STL headers header-unity (except C++ 20 ranges)
+ gcc/testsuite/
+ * g++.dg/modules/xtreme-header-{,_[ab]}.[hHC]: New.
+
+ Alias templates working (properly)
+ gcc/cp/
+ * modules.cc (enum depset::disc_bits): Add DB_ALIAS_TMPL_INST_BIT,
+ Replace DB_BOTH_SPEC_BIT with DB_ALIAS_SPEC_BIT.
+ (enum merge_kind): Replace MK_tmpl_both_mask with
+ MK_tmpl_alias_mask. Add MK_alias_spec.
+ (merge_kind_name): Adjust.
+ (trees_out::core_vals): DECL_TEMPLATE_RESULT might not be visited.
+ (trees_{in,out}::decl_value): Cope with alias template
+ instantiations.
+ (trees_out::get_merge_kind): Add alias support.
+ (trees_{in,out}::ket_mergeable): Add alias support.
+ (check_mergeable_decl): Likewise.
+ (trees_in::is_matching_decl): Drop inner parm, adjust.
+ (depset::hash::make_dependency): Add alias suport.
+ (depset::hash::add_specializations): Detect and mark aliases.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-alias-1{,_[ab]}.[hHC]: New.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::decl_value): Instantiations are
+ merged things too.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::install_entity): New, broken out of ...
+ (trees_{in,out}::decl_value): ... here. Call them.
+
+2020-03-25 Nathan Sidwell <nathan@acm.org>
+
+ WARNING: This breaks lots of modules tests because an inconsistent
+ invariant wrt alias templates is now consistently different. This
+ is intended. gcc/cp/
+ * cp-tree.h (SET_TYPE_TEMPLATE_INFO): Not for aliases.
+ * pt.c (lookup_template_class_1): Type alias's template info
+ should already be correct.
+ (tsubst_template_decl): Don't reset TI_TEMPLATE of an alias.
+
+2020-03-24 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (SET_TYPE_TEMPLATE_INFO): Only expand VAL once.
+ * pt.c (perform_typedefs_access_check)
+ (append_type_to_template_for_access_check): Move G_T_N_A_C call
+ out of loop.
+ (get_types_needing_access_check): Simplify.
+
+2020-03-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::tpl_parms_fini): Determine
+ contextness requirement from TPI.
+
+ Merge master a3586eeb88414e77c7cccb69362b8d04562536b6.
+
+2020-03-20 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::tpl_parms_fini): Flag whether
+ tpl-tpl-parm context is non-null.
+
+2020-03-19 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_in::decl_value): No need to install constraints
+ for duplicate.
+ (trees_in::is_matching_decl): Open code comparison, don't use
+ decls_match.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::{read,write}_function_def): Potential
+ cexprs have result == error_mark_node.
+
+ gcc/cp/
+ * module.cc (trees_in::decl_value): Template instantiations are
+ never implicit member fns.
+ (module_state_config::get_dialect): Check exceptions, rtti,
+ inheriting ctors.
+ gcc/testsuite/
+ * g++.dg/modules/inh-tmpl-ctor-1{,_[ab]}.[hHC]: New.
+
+ Merge master 3512dc0108afbed3bece2e9fa1719fb3ce1d73d9
+
+2020-03-18 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::type_node): Do ptr-mem-fns after typedef
+ detection.
+ gcc/testsuite/
+ * g++.dg/modules/pmf-2{,_[ab]}.[hHC]: New.
+
+ gcc/cp/
+ * module.cc (trees_out::key_mergeable): Do not perform
+ requirements stubstutition.
+ (check_mergeable_decl): Likewise.
+
+ gcc/cp/
+ * decl.c (decls_match): Use fndecl_declared_return_type for
+ newdecl too.
+ * module.cc (trees_out::key_mergeable): Use
+ fndecl_declared_return_type.
+ (check_mergeable_decl): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/auto-1{,_[ab]}.[hHC]: New.
+
+2020-03-17 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_in::is_matching_decl): Propagate instantiated
+ noexcept specifications.
+ gcc/testsuite/
+ * g++.dg/modules/except-3{,_[ab]}.[hHC]: New.
+
+ gcc/cp/
+ * module.cc (lazy_snum, recursive_lazy): New.
+ (module_state::read_language): Set lazy_snum.
+ (lazy_load_{binding,specializations}): Call recursive_lazy.
+
+2020-03-16 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (elf_in::defrost): Return bool.
+ (module_state::from): May return NULL.
+ (module_state::maybe_completed_reading): New, broken out of
+ check_read.
+ (pendset::lazy_load): Likewise.
+ (module_state::write): Do not read partitions here.
+ (module_state::read_initial): Do not create slurp or elf_in here.
+ (module_state::load_{preprocessor,language}): Return bool, add
+ outermost flag. Adjust check_read calls.
+ (module_state::load_section): Reimplement, check mc_slot, issue
+ errors here.
+ (module_state::check_read): Reimplement for use by config loaders.
+ (module_state::do_import): Add outermost flag, alloc slurping
+ here. Adjust check_read call.
+ (module_state::lazy_load): Thin wrapper on load_section.
+ (module_state::lazy_load_binding): Check error emission here and
+ diagnose.
+ (module_state::lazy_load_specializations): Likewise.
+ (direct_import, preprocess_module): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/leg-merge-4_c.C: Adjust regexp matching
+
+ gcc/cp/
+ * doc/invoke.texi (C++ Modules): Clarify a couple of things.
+
+2020-03-13 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (lookup_field_ident): Check TYPE_LANG_SPECIFIC
+ before getting the member vector.
+ gcc/testsuite/
+ * g++.dg/modules/pmf-1{,_[ab]}.[hHC]: New.
+
+ gcc/cp/
+ * pt.c (template_args_equal): Slight refactor to clarify control
+ flow.
+ * tree.c (cp_tree_equal): Use comp_template_args for TREE_VEC.
+ * typeck.c (structural_comptypes): Comment about exception specs.
+
+ Ranges, you were right, have a biscuit!
+ gcc/testsuite/
+ * g++.dg/modules/odr-1{,_[ab]}.[hHC]: Moved to ..
+ * g++.dg/modules/lambda-2{,_[ab]}.[hHC]: ... here. Xfailed
+
+ gcc/cp/
+ * module.cc (trees_in::decl_value): Set and reset constraints on
+ duplicate decl.
+ (trees_in::is_matching_decl): Use decls_match to compare decls.
+ gcc/testsuite/
+ * g++.dg/modules/except-2{,_[ab]}.[hHC]: New.
+ * g++.dg/modules/builtin-4_[ab].[HC]: New.
+
+ gcc/cp/
+ * mangle.c (find_substitution): Cleanup for c++/94027 fix.
+
+ gcc/cp/
+ * module.cc (module_state::read_config): Allow overriding the
+ version check.
+ gcc/c-family/
+ * c.opt (fmodule-version-ignore): New undocumented option.
+
+2020-03-11 Nathan Sidwell <nathan@acm.org>
+
+ Bad ranges, no biscuit!
+ gcc/testsuite/
+ * g++.dg/modules/odr-1{,_[ab]}.[hHC]: New.
+
+2020-03-10 Nathan Sidwell <nathan@acm.org>
+
+ Reconstruct deferred exception spec types
+ gcc/cp/
+ * cp-tree.h (fixup_deferred_exception_variants): Declare.
+ * tree.c (fixup_deferred_exception_variants): New.
+ * parser.c (cp_parser_member_declaration): Comment about friends.
+ (cp_parser_class_specifier_1): Call it, don't generate a new type.
+ (cp_parser_noexcept_specification_opt): Reorder if conditional.
+ gcc/testsuite/
+ * g++.dg/modules/deferred-1{,_[ab]}.[hHC]: New.
+
+ Merge master 3654d49d0ff651b2a78401bc2430428711e7d2eb
+
+2020-03-09 Nathan Sidwell <nathan@acm.org>
+
+ Function-scope using directives
+ gcc/cp/
+ * cp-gimplify.c (cp_genericize_r): Set DECL_CONTEXT of
+ IMPORTED_DECL.
+ * module.cc (trees_{in.out}::core_vals): Stream IMPORTED_DECL's
+ initial.
+ (trees_out::decl_node): IMPORTED_DECLs are always by value.
+
+ Namespace aliases
+ gcc/cp/
+ * name-lookup.c (do_namespace_alias): Set originating module.
+ * module.cc (trees_out::tree_node_bools): Allow namespace aliases.
+ (depset::hash::make_dependency): Likewise.
+ (depset_hash::add_namespace_entities): Likewise.
+ (set_instantiating_module): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/ns-alias-1_[abc].C: New.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::vec_chained_decls): New.
+ (trees_{in,out}::{read,write}_class_def): Use for fields and vtables.
+ gcc/testsuite/
+ * g++.dg/modules/vtt-2{,_[ab]}.[hHC]: New.
+
+ gcc/cp/
+ * cp-tree.h (get_mergeable_specialization_flags)
+ (add_mergeable_specialization): Declare.
+ * module.cc (trees_{in,out}::key_mergeable): Stream specialization
+ flags and add them as necessary.
+ (enum ct_decl_flags): Delete.
+ (module_state::{read,write}_cluster): No decl flags.
+ (install_specialization): Delete.
+ * pt.c (get_mergeable_specialization_flags): New.
+ (add_mergeable_specialization): New.
+ gcc/testsuite/
+ * g++.dg/modules/partial-1{,_[ab]}.[hHC]: New.
+ * g++.dg/modules/tpl-spec-5_b.C: Adjust scan.
+
+2020-03-05 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * tree.c (set_array_type_canon): Add dependent parm.
+ (build_cplus_array_type, cp_build_qualified_type_real)
+ (strip_typedefs): Pass dependent_p on.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-ary-1.h: Try constifying.
+
+ gcc/cp/
+ * cp-tree.h (cplus_build_array_type): Add known-dependent default arg.
+ * tree.c (cplus_build_array_type): Only calculate dependent if
+ unknown. Set TYPE_DEPENDENT_P on dependent arys.
+ * module.cc (trees_{in,out}::type_node): Serialize dependentness
+ of array types.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-ary-1{,_[ab]}.[hHC]: New.
+
+2020-03-04 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (mergeable_class_entities): Check TYPE_LANG_SPECIFIC.
+
+ gcc/cp/
+ * module.cc (depset::hash::add_dependency): Only unscoped enum
+ usings from the enum itself are mutual dependencies.
+ (cluster_cmp): Cope with using decls for the same entity.
+ gcc/testsuite/
+ * g++.dg/modules/using-7.C: New.
+
+ gcc/cp/
+ * module.cc (trees_out::core_vals): Adjust typedef detection.
+ (trees_{in,out}::decl_value): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/tdef-7{,_[ab]}.[hHC]: New.
+
+ gcc/cp/
+ * module.cc (trees__out::key_mergeable): NULL name more often.
+ (enum merge_match): Delete.
+ (check_mergeable_decl): Use merge_kind instead.
+ (trees_in::key_mergeable): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/merge-6_b.C: Adjust scan.
+
+ gcc/cp/
+ * module.cc (struct merge_key): simplify.
+ (trees_{in,out}::key_mergeable): Optimize merge_key streaming.
+
+2020-03-03 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (enum merge_kind): Add more discriminators.
+ (merge_kind_name): Adjust.
+ (trees_{in,out}::key_mergeable): Partition via new discriminators.
+ (trees_in::decl_value): Remove bad formatting.
+ (trees_out::get_merge_kind): Select new discriminators.
+ (mergeable_namespace_entity, mergeable_class_member): Fold into
+ reimplemented key_mergeable.
+ gcc/testsuite/
+ * g++.dg/modules/merge-[56]_b.C: Adjust scans.
+
+ gcc/cp/
+ * module.cc (struct merge_key): Remove index as tree hack ...
+ (merge_key::{read,write}): ... here.
+ (trees_{in,out}::key_mergeable): Adjust.
+
+ gcc/cp/
+ * module.cc (merge_key::read): Remove req qualifier hack.
+ (check_mergeable_decl): Use merge_key, not explicit args.
+ (mergeable_namespace_entity, mergeable_class_member): Likewise.
+ (trees_in::key_mergeable): Adjust.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::decl_container): New.
+ (trees_in::key_mergeable): Reimplement, swallowing the merging
+ logic of ...
+ (trees_in::decl_value): ... this.
+ gcc/testsuite/
+ * g++.dg/modules/builtin-[13]_a.C: Adjust scans.
+ * g++.dg/modules/indirect-[234]_b.C: Likewise.
+ * g++.dg/modules/inst-[23]_a.C: Likewise.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::fn_arg_types): Delete.
+ (struct merge_key): New.
+ (trees_out::key_mergeable): Use merge_key.
+ (trees_out::key_mergeable): #ifdef out.
+ (trees_in::decl_value): Adjust key handling.
+
+2020-03-02 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.h (mergeable_namespace_entity)
+ (mergeable_class_member): Don't declare.
+ * name-lookup.c (check_mergeable_decl, mergeable_namespace_entity)
+ (mergeable_class_member): Move to ...
+ * module.cc (check_mergeable_decl, mergeable_namespace_entity)
+ (mergeable_class_member): ... here.
+
+ gcc/cp/
+ * decl2.c (c_parse_final_cleanups): Revert previous change.
+ * name-lookup.h (mergeable_{namespace,class}_entities): Declare.
+ (add_mergeable_namespace_entity): Declare.
+ * name-lookup.c (member_vec_dedup): Link stat_hack chain.
+ (check_module_override): Do not use check_mergeable_decl.
+ (mergeable_{namespace,class}_entities): New.
+ (add_mergeable): Rename to ...
+ (add_mergeable_namespace_entitity): ... here.
+ (mergeable_{namespace,class}_entity): Use new accessors.
+
+2020-02-28 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (struct note_def_cache_hasher): New type.
+ (note_defs): Use it, set GTY((cache)).
+ (trees_{in,out}::assert_definition): Adjust.
+ (module_state::write, init_module_processing): Adjust note_defs
+ construction.
+
+ gcc/cp/
+ * module.cc (c_parse_final_c_cleanups): Don't complain about
+ unsynthesized defaulted members in a header unit, and pick a
+ privileged clone to complain about when we do.
+ gcc/testsuite/
+ * g++.dg/modules/imp-member-3.H: New.
+
+ gcc/cp/
+ * module.cc (trees_(in,out)::fn_arg_types): Serialize ref
+ parmness.
+ (trees_out::key_mergeable): Adjust.
+ * name-lookup.c (check_mergeable_decl): Check ref parmness.
+ (mergeable_class_member): __as_base not found via name lookup.
+ gcc/testsuite/
+ * g++.dg/modules/merge-15{,_[ab]}.[hHC]: New.
+
+ Merge master 9d2d283367a407c1ba9ecdb8590f9295828e25f8
+
+2020-02-27 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::decl_value): FIELD_DECLS can have
+ template_info.
+ (member_owned_by_class): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/merge-14{,_[ab]}.[hHC]: New.
+
+2020-02-26 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * decl.c (build_typename_type): Refactor.
+ * module.cc (trees_out::decl_value): Class-scope using-decls are
+ like fields.
+ (trees_out::key_mergeable): Using-decls are like anonymous fields.
+ (trees_{in,out}::{read,write}_class_def): Beware of
+ typename_type's TYPE_DECL in the member vec.
+ (trees_out::mark_class_def): Mark using-decls.
+ (depset::hash::make_dependency): Assert not a class-scope
+ using-decl.
+ * name-lookup.c (mergeable_class_member): Using-decls can be
+ indexed.
+ ({get,lookup}_field_ident): Using-decls are like fields.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-2_c.C: Adjust scans.
+ * g++.dg/modules/merge-13{,_[ab]}.[hHC]: New.
+
+2020-02-25 Nathan Sidwell <nathan@acm.org>
+
+ gcc/testsuite/
+ * g++.dg/modules/string-1_[ab].[CH]: Enable in c++20 mode.
+
+ gcc/testsuite/
+ * g++.dg/modules/merge-12{,_[ab]}.[hHC]: New.
+
+ gcc/cp/
+ * typeck.c (structural_comptypes): Deal with TYPE_ARGUMENT_PACK.
+ gcc/testsuite/
+ * g++.dg/concepts/pack-1.C: New.
+
+ PR c++/93761
+ gcc/cp/
+ * module.cc (begin_header_unit): New, broken out of ...
+ (module_begin_main_file): ... here. Call it when not
+ preprocessed.
+ (init_module_processing): Call it when preprocessed.
+ gcc/testsuite/
+ * g++.dg/modules/preproc-1.C: New.
+
+ gcc/testsuite/
+ * g++.dg/modules/atom-decl-2.C: Use dg-prune.
+ * g++.dg/modules/atom-pragma-3.C: Likewise.
+ * g++.dg/modules/mod-decl-1.C: Likewise.
+ * g++.dg/modules/mod-decl-3.C: Likewise.
+ * g++.dg/modules/indirect-1_c.C: Remove dg-bogii.
+ * g++.dg/modules/part-3_c.C: Likewise.
+
+ Global module constraint merging
+ gcc/cp/
+ * module.cc (trees_out::decl_value): Always stream constraints.
+ (trees_in::decl_value): Likewise, deal with requires in merge key.
+ (trees_{in,out}::key_mergeable): Stream requires.
+ * name-lookup.c (check_mergeable_decl): Add & check requires.
+ (check_module_override): Get requires.
+ (mergeable_namespace_entity): Add requires.
+ (mergeable_class_member): Likewise.
+ (make_namespace_finish): Adjust.
+ * name-lookup.h (mergeable_namespace_entity): Add requires.
+ (mergeable_class_member): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/concept-5{,_[ab]}.[hHC]: New.
+
+2020-02-24 Nathan Sidwell <nathan@acm.org>
+
+ Implement US033
+ gcc/cp/
+ * module.cc (import_module): Check language-linkage depth.
+ * parser.c (cp_parser_import_declaration): Check if direct
+ language linkage.
+ gcc/testsuite/
+ * g++.dg/modules/inc-xlate-1_d.C: Delete.
+ * g++.dg/modules/lang-1_[abc].[HC]: New.
+ * g++.dg/modules/lang-2_[ab].C: New.
+
+ Merge master 3841739c29a54c0141c3156cdd47891c258b2b88
+
+2020-02-22 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * lex.c (cpp_directives_only): Commonize ' & " peeking, add
+ cpp-number vs raw-string detection.
+ gcc/testsuite/
+ * c-c++-common/cpp/dir-only-7.c: Add test.
+
+2020-02-19 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * lex.c (cp_directive_only_process): Deal with raw strings by
+ backtracking.
+
+2020-02-14 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * lex.c (cpp_directive_only_process): Cope with number
+ punctuators.
+ gcc/testsuite/
+ * c-c++-common/cpp/dir-only-8.c: New.
+
+2020-02-12 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * Make-lang.in (MODULE_REVISION): Add branch name.
+
+2020-02-11 Nathan Sidwell <nathan@acm.org>
+
+ gcc/c-family/
+ * c-opts.c (c_finish_options): Builtins & command-line starts at
+ 1.
+ (cb_file_change): Alter detection of main file start.
+ * c-ppoutput.c (print_line_1): Don't nadger line zero.
+ gcc/testsuite/
+ * g++.dg/modules/dir-only-3.C: Update line nos
+ * g++.dg/modules/dir-only-4.C: New.
+
+ gcc/c-family/
+ * c-optsc (c_common_post_options): Set module_directives
+ regardless of preprocessed state.
+ gcc/cp/
+ * parser.c (cp_parser_skip_to_pragma_eol): Don't explode on
+ meeting actual EOF.
+ gcc/testsuite/
+ * g++.dg/modules/dir-only-3.C: New.
+
+ Merge master a6ee556c7659877bb59b719f11ca2153e86ded59
+
+2020-02-10 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ lex.c (do_peek_prev): New.
+ (cpp_directive_only_process): Peek backwards from 'R' to check it
+ is a raw literal.
+ gcc/testsuite/
+ * c-c++-common/cpp/dir-only-7.c: Extend.
+
+2020-02-08 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ lex.c (_cpp_lex_direct): PRAGMA_EOL is never pre-padded.
+ (cpp_directive_only_process): Emit line marker after module
+ control-line.
+ gcc/
+ * langhooks.h (struct lang_hooks): Add PT_flags enum.
+ gcc/c-family/
+ * c-ppoutput.c (token_streamer): Add begin_pragma.
+ (token_streamer::stream): Remove out-of-pragma EOL procesing.
+ Ignore pragma_eol location.
+ (scan_translation_unit): Pay attention to filter return flags.
+ (directives_only_cb): Likewise.
+ gcc/cp/
+ * lex.c: Inlude langhooks.
+ (coro::resume): Return pragma begin flag.
+ gcc/testsuite/
+ * g++.dg/modules/dir-only-2_b.c: Add broken line check.
+
+ gcc/
+ * langhooks (struct lang_hooks): preprocess_token takes and
+ returns a uintptr_t.
+ gcc/cp/
+ * cp-tree.h (module_token_{pre,cdtor,lang}): Change cookie type.
+ * lex.c (module_token_{pre,cdtor,lang}): Change cookie type.
+ * parser.c (cp_lexer_new): Likewise.
+ gcc/c-family/
+ * c-ppoutput.c (scan_translation_unit): Adjust lang hook use.
+ (class do_streamer): Likewise.
+ (scan_translation_unit_directives_only): Likewise.
+
+2020-02-08 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * lex.c (cpp_directive_only_process): Relax raw string detection.
+
+2020-02-07 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * lex.c (cpp_directive_only_process): Re-reimplement.
+
+ libcpp/
+ * lex.c (cpp_maybe_module_directive): Use 'module control-line'
+ here ...
+ gcc/cp/
+ * parser.c (cp_parser_diagnose_invalid_type_name): ... here ...
+ (cp_parser_import_declaration): ... and here.
+
+ libcpp/
+ * internal/cpplib.h (cpp_clear_if_stack): Don't declare.
+ * directives.c (cpp_clear_if_stack): Delete.
+
+ Merge master 82aee6dd61e2a5b4e4b124f896c8403169688f41
+
+ -fdirectives-only (a bit buggy)
+ gcc/c-family/
+ * c-ppoutput.c (token_streamer::stream): Adust PRAGMA_EOL.
+ (class_do_streamer): New.
+ (directives_only_cb): Extend for token streaming.
+ (scan_translation_unit_directives_only): Pay attention to
+ preprocess lang_hook.
+ (print_line_1): Ignore UNKNOWN_LOCATIONs.
+ libcpp/
+ * include/cpplib.h (cpp_directives_only): Add cpp_reader to
+ callback.
+ * lex.c (do_peek_{backslash,next,ident,module): New.
+ (cpp_directive_only_preprocess): Add module peeking.
+ gcc/testsuite/
+ * g++.dg/modules/dir-only-2_[ab].[CH]: New.
+
+ gcc/c-family/
+ * c-ppoutput.c (class token_streamer): New class, swallow guts of
+ ...
+ (scan_translation_unit): ... this. Use it.
+
+2020-02-06 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * include/cpplib.h (enum CPP_DO_task): New.
+ (cpp_directive_only_process): Adjust prototype.
+ * lex.c (cpp_directives_only_process): Take data pointer and
+ generic callback, adjust.
+ gcc/c-family/
+ * c-ppoutput.c (print_lines_directives_only): Replace with ...
+ (directives_only_cb): ... this new function.
+ (scan_directive_only_preprocess): Adjust call.
+
+ libcpp/
+ * lex.c (cpp_directive_only_process): Simplify raw string lexing.
+
+ libcpp/
+ * lex.c (cpp_directive_only_process): Add raw string lexing.
+ gcc/testsuite/
+ * c-c++-common/cpp/dir-only-7.c: New.
+
+2020-02-05 Nathan Sidwell <nathan@acm.org>
+
+ Merge master fa0c6e297b22d5883857d0db4a6a8be0967cb16f
+
+ libcpp/
+ * directives-only.c: Delete.
+ * Makefile.in: Remove it.
+ * include/cpplib.h (cpp_directives_only_process): Declare.
+ * internal.h (struct _cpp_dir_only): Delete.
+ (_cpp_preprocess_dir_only): Delete.
+ * lex.c (cpp_directive_only_process): New implementation.
+ gcc/c-family/
+ * c-ppoutput.c (print_lines_directive_only): lines is unsigned.
+ (scan_translation_unit_directives_only): Reimplement.
+ gcc/testsuite/
+ * gcc.dg/cpp: Move directives-only tests to ...
+ * c-c++-common/cpp: ... here.
+
+2020-02-04 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * parser.c (cp_parser_import_declaration): Be stricter about preamble.
+ gcc/testsuite/
+ g++.dg/modules/atom-decl-2.C: Adjust diagnostics.
+ g++.dg/modules/atom-pragma-3.C: Likewise.
+ g++.dg/modules/exp-xlate-1_b.C: Likewise.
+ g++.dg/modules/inc-xlate-1_e.C: Likewise.
+ g++.dg/modules/atom-preamble-2_f.C: New.
+
+ gcc/cp/
+ * module.cc (preprocess_module): Don't load header unit if not
+ preprocessing. Always close and reopen the line map spans.
+ libcpp/
+ * include/cpplib.h (cpp_get_options, cpp_get_callbacks)
+ (cpp_get_deps): Mark as PURE.
+
+ gcc/cp/
+ * module.cc (module_state::do_import): Drop deps handling here.
+ (preprocess_module): Mark interface.
+ (preprocessed_module): Correct dependency generation.
+ (finish_module_processing): Drop deps handling here.
+ libcpp/
+ * mkdeps.c (make_write): Note Make 4.3's &: targets
+
+ gcc/cp/
+ * module.cc (MODULE_UNKNOWN_PARTITION): Delete.
+ (module_state::read_imports): Drop special partition detection.
+ (module_state::read_partitions): Drop special partition setting.
+ (module_translate_include): Use main_source_loc for mapper.
+ ({init,fini}_module_processing): Likewise.
+
+ gcc/cp/
+ * lex.c (module_token_cdtor): Call preprocessed_module on
+ teardown here ...
+ * parser.c (cp_lexer_new_main): ... not here.
+ * module.cc (struct module_state): Drop from_loc. Use loc in most
+ places.
+ (module_state::{maybe_create_loc,attach,is_detached): Delete.
+ (module_state::is_rooted): New. Use it in place of is_detached.
+ (module_state::imported_from): New.
+ (module_state::do_import): Create module loc here ...
+ (direct_import): ... not here ...
+ (preprocess_module): ... or here.
+ (import_module): Reparent here.
+ (module_cpp_undef): Check flag_header_unit.
+ (module_begin_main_file): Do not declare_module here ...
+ (preprocessed_module): ... do it here.
+
+ gcc/cp/
+ * module.cc (module_state::direct_import): Delete.
+ (module_state::do_import): Only ever do initial read.
+ (direct_import): New non-member fn.
+ ({import,declare}_module): Call it.
+ (preprocess_module): Call do_import.
+
+ gcc/cp/
+ * module.cc (struct module_state): Cleanly separate module kind
+ flags from module use flags.
+
+2020-02-03 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (struct module_state): Drop primary_p &
+ from_partition_p. Map uses to module_p and partition_direct_p.
+
+ gcc/cp/
+ * module.cc (struct module_state): Add load_state, not flags.
+ Remove imported_p, lazy_{preprocessor,language}_p.
+ (module_state::read_{imports,preprocessor,language}): Adjust.
+ (module_state::{check_read,{do,direct}_import}): Adjust.
+ ({declare,preprocess}_module): Adjust.
+
+ gcc/cp/
+ * cp-tree.h (module_normal_import_p): Delete.
+ * module.cc (struct module_state): Rationalize flags.
+ (module_normal_import_p): Delete.
+ (module_state::direct_import): Don't save and restore line state
+ here.
+ (import_module): Just for language.
+ (preprocess_module): Save line state here.
+ * parser.c (cp_parser_import_declaration): Adjust.
+ (cp_parser_declaration_seq_opt): Drop superflous pragma parsing.
+
+ gcc/cp/
+ * parser.c (cp_parser_import_declaration): Diagnose include
+ translation in purview. Emit not about module-directive control lines.
+ gcc/testsuite/
+ * g++.dg/modules/inc-xlate-1_e.C: New.
+
+2020-02-02 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * internal.h (struct spec_nodes): Transpose n_modules array.
+ * init.c (post_options): Adjust n_modules array access.
+ * lex.c (cpp_maybe_module_directive): Remove supurfluous state and
+ laziness.
+ gcc/
+ * module.cc (module_translate_include): Add __translated attribute.
+ * parser.c (cp_parser_translation_unit): Move translated
+ diagnostic to ...
+ (cp_parser_import_declaration): ... here. Still disabled.
+ (cp_parser_module_export): Check for following module directive.
+ gcc/testsuite/
+ * g++.dg/modules/exp-xlate-1_b.C: Remove xfail, adjust errors.
+ * g++.dg/modules/inc-xlate-1_b.H: Adjust final scans.
+ * g++.dg/modules/legacy-[35]_[bcd].[CH]: Adjust final scans.
+
+2020-01-31 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * include/cpplib.h (NODE_MODULE): New.
+ (struct cpp_hashnode): Reserve another flag bit.
+ * internal.h (struct spec_nodes): Replace separate module spec
+ nodes by array.
+ (_cpp_setup_module_directive): Delete.
+ * init (post_options): Adjust module node initialization.
+ * directives.c (_cpp_setup_module_directive): Delete, move into ...
+ * lex.c (cpp_maybe_module_directive): ... here. New, absorb
+ peeking from ...
+ (_cpp_lex_token): ... here. Call it.
+
+ Merge master b92709388b9aee52db3cd7c227818e0ecccda2e5
+
+ gcc/cp/
+ * parser.c (cp_parser_skip_to_end_of_statement): Adjust pragma
+ skipping.
+ (cp_parser_skip_to_end_of_block_or_statement): Likewise.
+
+ Fix PRAGMA_EOL location
+ libcpp/
+ * lex.c (_cpp_lex_direct): Return CPP_PRAGMA_EOL at end of line.
+ gcc/cp/
+ * lex.c (token_coro::resume): No need to handle in-pragma EOF.
+ * parser.c (cp_parser_skip_to_pragma_eol): Likewise.
+ (cp_parser_omp_declare_simd, cp_parser_omp_declare_reduction)
+ (cp_parser_oacc_routine, cp_parser_initial_pragma, pragma_lex): Likewise.
+ gcc/c-family/
+ * c-ppoutput.c (scan_translation_unit): Ignore CPP_PRAGMA_EOL in
+ not a pragma.
+ gcc/testsuite/
+ * c-c++-common/cpp/pragma-eof.c: New.
+
+ Implement p1857, part 3
+ gcc/cp/
+ * cp-tree.h (module_preprocess, import_module_pre): Replace with ...
+ (preprocess_module): ... this.
+ (import_module_lang): Replace with ...
+ (import_module): ... this.
+ (preprocessed_module): Declare.
+ (process_deferred_imports): Delete.
+ * lex.c (struct token_coro): Report via preprocess_module.
+ (module_token_pre): Call preprocessed_module on teardown.
+ * module.cc (module_state::module_p): New flag.
+ (main_source_loc): New.
+ (pending_imports): Delete.
+ (module_state::direct_import): Do not get filename here.
+ (import_module_lang): Replace with ...
+ (import_module): Drop attach logic.
+ (declare_module): Adjust.
+ (module_preprocess, import_module_pre): Replace with ...
+ (preprocess_module): ... this. Do attach logic here.
+ (preprocessed_module): New. Do deps and module server name comms.
+ (process_deferred_imports): Delete.
+ * parser.c (cp_lexer_new_main): Call preprocessed_module when
+ done.
+ (cp_parser_translation_unit): Drop deferred imports logic.
+ (cp_parser_import_declaration): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/atom-preamble-2_d.C: Remove xfail.
+ * g++.dg/modules/bad-mapper-1.C: Adjust diagnostic loc.
+ * g++.dg/modules/bad-mapper-2.C: Likewise.
+ * g++.dg/modules/bad-mapper-3.C: Likewise.
+ * g++.dg/modules/map-2.C: Likewise.
+
+2020-01-30 Nathan Sidwell <nathan@acm.org>
+
+ Implement p1857, part 2
+ libcpp/
+ * include/line-map.h (linemap_module_reparent): Declare.
+ * line-map.c (linemap_module_reparent): New.
+ gcc/cp/
+ * cp-lang.c (LANG_HOOKS_PREPROCESS_TOKEN): Adjust.
+ * cp-tree.h (module_preprocess_token): Rename to ...
+ (module_token_pre): ... here.
+ (module_token_{cdtor,lang}): Declare.
+ (module_map_header): Delete.
+ (module_preprocess): Adjust parameters.
+ (import_module): Delete, replace with ...
+ (import_modile_{pre,lang}): ... these.
+ (declare_module): Return void.
+ * lex.c (struct token_coro): New, broken out of ...
+ (module_preprocess_token): ... here. Replace with ...
+ (module_token_{pre,lang,cdtor}): ... these.
+ * module.cc (module_state::read_location): Deal with early-read
+ partition locations.
+ (module_state::direct_import): Always preserve line map. Take
+ for_cpp arg.
+ (import_module): Break into ...
+ (import_module_{pre,lang}): ... these. Disable pending imports.
+ (declare_module): Adjust.
+ (module_map_header): Delete.
+ (module_preprocess): Do not change module array. Return primary
+ module.
+ * parser.c (cp_lexer_tokenize): Delete.
+ (cp_lexer_new_main): New, resurrected from trunk. Tokenize the
+ whole buffer. Call the token coro.
+ (cp_parser_skip_to_closing_parenthesis_1): Deal with falling into
+ a module pseudo-pragma.
+ (cp_parser_skip_to_end_of_{,block_or_}statement): Likewise.
+ (cp_parser_translation_unit): Drop the incremental tokenization.
+ (cp_parser_module_name): Drop KIND parameter.
+ (cp_parser_module_directive_end): New.
+ (cp_parser_{import,module}_declaration): Adjust.
+ (cp_parser_declaration): Deal with (badly placed) import or module
+ declarations.
+ (cp_parser_toplevel_declaration): Restore PRAGMA parsing.
+ (c_parse_file): PCHness handled in cp_lexer_new_main, use it.
+ gcc/testsuite/
+ * g++.dg/modules/atom-decl-2.C: Adjust expected error
+ * g++.dg/modules/atom-pragma-3.C: Likewise.
+ * g++.dg/modules/exp-xlate-1_b.C: Likewise.
+ * g++.dg/modules/mod-decl-1.C: Likewise.
+ * g++.dg/modules/p0713-2.C: Likewise.
+ * g++.dg/modules/p0713-3.C: Likewise.
+ * g++.dg/modules/atom-preamble-2_d.C: Temporary XFAIL
+ * g++.dg/modules/unnamed-1_b.C: Adjust output scan
+
+ gcc/cp/
+ * parser.c (cp_lexer_alloc): Remove pch finalizing.
+ (cp_parser_skip_to_closing_parenthesis_1): Deal with falling into
+ a CPP_PRAGMA.
+ (cp_parser_skip_to_end_of_{,block_or_}statement): Likewise.
+ (cp_parser_skip_to_pragma_eol): Don't consume CPP_EOF.
+ (cp_parser_new): Take a lexer, don't create it here.
+ (cp_parser_declaration): Just point at peeked tokens, don't copy.
+ (cp_parser_block_declaration): Likewise.
+ (cp_parser_initial_pragma): Don't get the first token.
+ (c_parse_file): Do it here, and finalize pch.
+
+ libcpp/
+ * lex.c (_cpp_lex_direct): Set location of PRAGMA_EOL.
+ gcc/testsuite/
+ * g++.dg/modules/exp-xlate-1_b.C: Add xfailed bogus-error.
+ * g++.dg/modules/cpp-2_c.C: Adjust output scan.
+ * g++.dg/modules/cpp-5_c.C: Likewise.
+ * g++.dg/modules/legacy-3_b.H: Likewise.
+ * g++.dg/modules/legacy-3_c.H: Likewise.
+ * g++.dg/modules/legacy-6_c.C: Likewise.
+ * g++.dg/modules/legacy-6_d.C: likewise.
+
+2020-01-27 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * langhooks.h (preprocess_token): Take a const cpp_token pointer.
+ gcc/c-family/
+ * (c-ppoutput.c (scan_translation_unit): Preprocess lang hook
+ doesn't alter the token.
+
+ gcc/cp/
+ * cp-tree.h (module_preprocess_token): Take const cpp_token
+ pointer.
+ * lex.c (module_preprocess_token): Take const cpp_token.
+
+2020-01-24 Nathan Sidwell <nathan@acm.org>
+
+ Merge master a1f6eff20e3bb32c5051e77093ee28faec2abca0
+
+ gcc/c-family/
+ * c-common.h (enum rid): Remove non-underbarred module RIDs.
+ * c-common.c (c_common_reswords): Remove non-underbarred module keywords.
+ gcc/cp/
+ * lex.c (init_reswords): Module keywords are keywords.
+ * parser.c (cp_lexer_tokenize): Look for keywords.
+ (cp_parser_translation_unit): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/exp-xlate-1_b.C: Remove bogus xfail.
+
+2020-01-23 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * expr.c (parse_defined): Fixup for modules.
+ (parse_has_include): Remove controlling macro nonsense.
+
+ Implement p1857, part 1
+ libcpp/
+ * internal.h (struct lexer_state): Add directive_file_token field.
+ (struct spec_nodes): Add module directive nodes.
+ (_cpp_setup_module_directive): Declare.
+ * include/cpplib.h (struct cpp_options): Add module_directives field.
+ * directives.c (_cpp_setup_module_directive): New.
+ * init.c (post_options): Provess module_directives option.
+ * lex.c (_cpp_lex_token): Add module directive handling.
+ * macro.c (cpp_get_token_1): Add directive_file_token handling.
+ gcc/cp/
+ * lex.c (module_preprocess_token): Reimplement.
+ * parser.c (cp_lexer_tokenize): Module lines end in
+ CPP_PRAGMA_EOL.
+ (cp_lexer_not_macro): Delete.
+ (cp_parser_module_directive_end): New.
+ (cp_parser_diagnose_invalid_typename): Adjust.
+ (cp_parser_translation_unit): Adjust.
+ (cp_parser_{module,import}_declaration): Adjust.
+ gcc/c-family/
+ * c-common.h (enum rid): Add RID__MODULE and co.
+ * c-common.c (c_common_reswords): Add __module and co.
+ * c-lex.c (c_lex_with_flags): Adjust CPP_HEADER_NAME handling.
+ * c-opts.c (c_common_post_options): Set module_directives option.
+ gcc/testsuite/
+ * g++.dg/modules/anon-2_b.C: Adjust error/scans.
+ * g++.dg/modules/atom-preamble-1.C: Likewise.
+ * g++.dg/modules/atom-preamble-3.C: Likewise.
+ * g++.dg/modules/cpp-2_c.C: Likewise.
+ * g++.dg/modules/cpp-5_b.C: Likewise.
+ * g++.dg/modules/cpp-5_c.C: Likewise.
+ * g++.dg/modules/dep-2.C: Likewise.
+ * g++.dg/modules/keyword-1_b.C: Likewise.
+ * g++.dg/modules/legacy-3_b.H: Likewise.
+ * g++.dg/modules/legacy-3_c.H: Likewise.
+ * g++.dg/modules/legacy-6_c.C: Likewise.
+ * g++.dg/modules/legacy-6_d.C: Likewise.
+ * g++.dg/modules/mod-decl-0-2a.C: Likewise.
+ * g++.dg/modules/mod-decl-0.C: Likewise.
+ * g++.dg/modules/mod-decl-1.C: Likewise.
+ * g++.dg/modules/mod-decl-3.C: Likewise.
+ * g++.dg/modules/token-1.C: Likewise.
+ * g++.dg/modules/token-2_b.C: Likewise.
+ * g++.dg/modules/token-3.C: Likewise.
+ * g++.dg/modules/token-4.C: Likewise.
+ * g++.dg/modules/exp-xlate-1_b.C: XFAIL
+ * g++.dg/modules/inc-xlate-1_d.C: XFAIL
+
+2020-01-21 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * modules.cc (slurping::remap_module): Return unsigned, use zero
+ for error case.
+ (trees_in::tree_node): Adjust.
+ (module_state::read_{namespace,pendings}): Likewise.
+ (module_state::read_{preprocessor,language}): Likewise.
+
+ gcc/cp/
+ * modules.cc (struct module_state): Add
+ lazy_{preprocessor,language}_p fields.
+ (module_state::read): Delete, move into do_import.
+ (module_state::read_preprocessor): Be idempotent. Read direct
+ imports here. Set header bitmap bits.
+ (module_state::read_language): Likwise, set import/export bits.
+ (module_state::check_read): Adjust file closing condition.
+ (module_state::set_import): Do not deal with header bitmaps here.
+ (module_state::do_import): Do the initial read (only) here.
+ (module_state::direct_import): Do the preprocessor and language
+ reading here.
+
+ gcc/cp/
+ * modules.cc (slurping::remap_module): Encode import directness in
+ remap array.
+ (module_state::read_imports): Adjust.
+ (module_state::read_initial): Likewise.
+
+2020-01-20 Nathan Sidwell <nathan@acm.org>
+
+ Merge master 3a43459715e239fb8043bf64b830aaf1a9802180.
+ Coroutines committed.
+
+2020-01-17 Nathan Sidwell <nathan@acm.org>
+
+ Merge master bf09d886a4be1031f7003073115af6cbc5575353.
+
+2020-01-16 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_state::write_macros): Always write a set of
+ defs.
+ (module_state::read_macros): Adjust.
+ (module_state::read): Only read preprocessor for header unit.
+ (module_state::read_preprocessor): Assert am header.
+
+ gcc/cp/
+ * module.cc (module_state::{read,write}_counts): New. Broken out
+ of ...
+ (module_state::{read,write}_config): ... here.
+ (enum module_state_counts): New.
+ (module_state::write_cluster): Take lwm,hwm pair.
+ (module_state::read_{bindings,entities,inits}): Adjust.
+ (module_state::write): Write counts.
+ (module_state::read_{preprocessor,language}): Read counts.
+
+ gcc/cp/
+ * module.cc (slurping::slurping): Set current to ~0u.
+ (module_state::read_{initial,preprocessor,language}): New, broken
+ out of ...
+ (module_state::read): ... here. Call them.
+
+2020-01-15 Nathan Sidwell <nathan@acm.org>
+
+ Merge master.
+ gcc/cp/
+ * module.cc (depset::traits): Add empty_zero_p.
+
+2020-01-13 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * Make-lang.in (MODULE_REVISION): SVN's dead, man.
+
+2020-01-10 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r280131.
+ Bye bye SVN, I'm sure the farm upstate will be fine.
+
+2020-01-06 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r279868.
+
+2020-01-03 Nathan Sidwell <nathan@acm.org>
+
+ Header unit deduplication milestone
+ gcc/testsuite/
+ * g++.dg/modules/string-1_{a.H,b.C}: New.
+
+ gcc/cp/
+ * module.cc (trees_in::decl_value): Disambiguate entity_ary slots
+ from entuty_hash slots.
+ (trees_out::get_merge_kind): Check of
+ uninstantiated_template_friend even when there's a depset.
+
+ gcc/cp/
+ * module.cc (trees_in::tree_value): Return existing.
+ gcc/testsuite/
+ * g++.dg/modules/merge-11{.h,_a.H,_b.C}: New.
+
+ gcc/cp/
+ * module.cc (trees_out::get_merge_kind): Detect bitfield storage
+ unit.
+ (trees_out::key_mergeable): Deal with anonymous bitfields.
+ * name-lookup.c (mergeable_class_member): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/merge-10{.h,_a.H,_b.C}: New.
+
+ gcc/
+ * tree.h (DECL_ALIGN_RAW): New, use it in accessors.
+ (DCL_WARN_IF_NOT_ALIGN): Likewise.
+ gcc/cp/
+ * cp-tree.h (CPTI_CONST_TYPE_INFO_TYPE,CPTI_TYPE_INFO_PTR_TYPE):
+ Move to after module hwm.
+ * module.cc (trees_out::write_class_def): Don't write empty thunk
+ lists.
+ (trees_in::read_class_def): Merge fields from a duplicate.
+ gcc/testsuite/
+ * g++.dg/modules/tinfo-2_{a.h,b.C}: New.
+ * g++.dg/modules/member-def-1_c.C: Adjust scan.
+ * g++.dg/modules/merge-9.h: Add another builtin.
+
+ gcc/cp/
+ * module.cc (module_state::read_cluster): Set cfun->returns_struct
+ approprately.
+
+ gcc/cp/
+ * module.cc (import_entity_module): Cope with exported entities.
+
+2020-01-02 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (CPTI_ALIGN_TYPE): Not a global tree.
+ gcc/testsuite/
+ * g++.dg/modules/merge-9{.h,_a.H,_b.C}: New.
+
+ gcc/cp/
+ * module.cc (nodel_decl_hash): Rename to ...
+ (duplicate_hash): ... here. Allow binfos.
+ (trees_{in,out}::binfo_mergeable): New.
+ (trees_{in,out}::tree_node): Use it for tt_binfo.
+ (trees_{in,out}::tree_value): Use to dedup binfos.
+ gcc/testsuite/
+ * g++.dg/modules/merge-8{.h,_a.H,_b.C}: New.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::tree_binfo): Delete.
+ (trees_{in,out}::tree_node): Use binfo chain to find binfo.
+
+ Merge trunk r279811.
+ Update all the years!
+
+ Merge trunk r279809.
+ That's 2019 done.
+
+ Merge trunk r279556.
+ gcc/
+ * diagnostic-core.h (progname): Resolve conflict.
+
+ Merge trunk r279555.
+
+ Merge trunk r279473.
+
+ Apply trunk r279473.
+ gcc/cp/
+ * constexpr.cc (check_constexpr_fundef): Clear non-potential
+ result before registering.
+
+ Merge trunk r279472.
+
+2019-12-19 Nathan Sidwell <nathan@acm.org>
+
+ Typeof merging
+ gcc/cp/
+ * ptree.c (cxx_print_type): Print TYPEOF_TYPE & BASES types.
+ * typeck.c (structural_comptypes): Add TYPEOF_TYPE.
+ gcc/testsuite/
+ * g++.dg/modules/merge-7{.h,_a.H,_b.C}: New.
+
+ Anonymous templates are a thing.
+ gcc/cp/
+ * module.cc (trees_out::key_mergeable): Deal with anon templatey
+ members.
+ * name-lookup.c (mergeable_class_member): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/merge-6{.h,_a.H,_b.C}: New.
+
+ gcc/cp/
+ * module.cc (trees_in::decl_value): Fix enum-context merging.
+ gcc/testsuite/
+ * g++.dg/modules/merge-5{.h,_a.H,_b.C}: New.
+
+ gcc/cp/
+ * module.cc (trees_out::key_mergeable): Fix indentation.
+
+ gcc/cp/
+ * name-lookup.c (mergeable_class_member): Get to class template
+ correctly.
+ gcc/testsuite/
+ * g++.dg/modules/merge-4{.h,_a.H,_b.C}: New.
+
+ gcc/cp/
+ * module.cc (trees_in::install_implicit_member): Fix parm type thinko.
+ gcc/testsuite/
+ * g++.dg/modules/imp-member-1_a.C: Fix scan.
+ * g++.dg/modules/imp-member-2_[abc].C: New.
+
+2019-12-18 Nathan Sidwell <nathan@acm.org>
+
+ Installation of implicit member fns.
+ gcc/cp/
+ * module.cc (trees_in::install_implicit_member): New.
+ (trees_in::decl_value): Implicit member functions may be dups.
+ Call install_implicit_member.
+ gcc/testsuite/
+ * g++.dg/modules/imp-member-1_[abcde].C: New.
+
+2019-12-17 Nathan Sidwell <nathan@acm.org>
+
+ Out-of-class member function definitions
+ gcc/cp/
+ * decl.c (begin_function_body): RAII.
+ * lex.c (cxx_dup_lang_specific): Clear IMPORT_P and PARTITION_P.
+ * module.cc (module_state::is_matching_decl): Add inner parm.
+ Propagate inline & externalness.
+ (module_state::write): Read all partition entities.
+ * parser.c (cp_parser_function_definition_after_decl): Set
+ defining module as appropriate.
+ gcc/testsuite/
+ * g++.dg/modules/member-def-2_[abcd].C: New.
+
+ Out-of-class member class definitions
+ gcc/cp/
+ * cp-tree.h (DECL_MODULE_PENDING_MEMBERS_P): New.
+ (lang_decl_base): Add module_pending_members_p.
+ (lazy_load_members): Declare.
+ * module.cc (depset::entity_kind): Add EK_INNER_DECL.
+ (depset::disc_bits): Add DB_IS_MEMBER_BIT.
+ (depset::is_member): New.
+ (module_state::write_cluster): Take ref to module_state_config.
+ Adjust.
+ (module_state::{read,write}_specializations): Rename to ...
+ (module_stte::{read,write}_pendings): Generalize to pending
+ members.
+ (trees_in::decl_val): Deal with pending members.
+ (depset::hash::make_dependency): Adjust for EK_INNER_DECL.
+ (depset::hash::add_class_entities): Add them.
+ (struct module_state_config): Rename num_specializations ->
+ num_pendings. Adjust throughout.
+ (module_state::read_entities): Shift snum another bit.
+ (module_sttate::lazy_load): Likewise.
+ (lazy_load_members): New.
+ * name-lookup.c (maybe_lazily_declare): Load pending members.
+ gcc/testsuite/
+ * g++.dg/modules/member-def-1_[abcd].C: New.
+
+ gcc/cp/
+ * cp-tree.h (set_defining_module): New.
+ * decl.c (xref_tag_1): Check can redeclare, set instantiating
+ module.
+ (start_enum): Likewise.
+ * module.c: Update doc preamble.
+ (module_may_redeclare): Get to the template.
+ (set_defining_module): New, broken out of ...
+ (set_instantiating_module): ... here. DO NOT CALL IT.
+ * rtti.c (init_rtti_processing): "type_info" has exportedness.
+ * semantics.c (begin_class_definition): Check can redeclare. Set
+ defining & instantiating.
+ gcc/testsuite/
+ * g++.dg/modules/friend-5_[ab].C: New.
+ * g++.dg/modules/tdef-4_[bc].C: Add comments.
+
+2019-12-13 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r279384.
+
+ gcc/cp/
+ * module.cc: Rename specset to pendset. Document.
+
+ Pending specializations keyed by ident
+ gcc/cp/
+ * cp-tree.h (DECL_TEMPLATE_LAZY_SPECIALIZATIONS_P): Delete.
+ (MODULE_VECTOR_LAZY_SPEC_P): Delete.
+ (MODULE_VECTOR_PENDING_{SPECIALIZATIONS,IS_HEADER,IS_PARTITION}_P): New.
+ (DECL_MODULE_PENDINGSPECIALIZATIONS_P): New.
+ (lang_decl_base): Add module_specializations_p.
+ (lazy_specializations_p): Declare.
+ * name-lookup.h (note_pending_specializations): No return value.
+ (load_pending_specializations): Declare.
+ (note_loaded_specializations): Delete.
+ * module.cc (specset): Key is entity ident. Adjust throughout.
+ (trees_in::decl_value): Deal with pending specializations.
+ (specset::lazy_load): Deal with indirections.
+ (module_state::{read,write}_specializations): Reimplement.
+ (lazy_specializations_p): New.
+ (lazy_load_specializations): Reimplement.
+ * name-lookup.c (mark_pending_on_{decl,binding}): Delete.
+ (set_module_binding): Drop lazy specialization tagging here.
+ (note_pending_specializations): Reimplement.
+ (load_pending_specializations): New.
+ (note_loaded_specializations): Delete.
+ * pt.c (lookup_template_class_1): Reimplement lazy specialization
+ loading.
+ (instantiate_template_1): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/inst-4_[ab].C: Adjust scans.
+ * g++.dg/modules/tpl-spec-[12345]_[abcd].C: Likewise.
+
+ gcc/cp/
+ * cp-tree.h (DECL_MODULE_ENTITY_P): New.
+ (lang_decl_bas): Add module_entity_p flag.
+ * module.cc (trees_in::decl_value): Insert according to
+ DECL_MODULE_ENTITY_P.
+ * lex.c (cxx_dup_lang_specific): Clear DECL_MODULE_ENTITY_P.
+
+2019-12-12 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (class specset): Make ns an mc_slot.
+ (specset::hash::add): Adjust.
+ (specset::hash::lookup): Rename to ...
+ (specset::hash::extract): ... here. Adjust.
+ (specset::lazy_load): New.
+ (module_state::read_entities): Adjust lazy setting.
+ (module_state::read_specializations): Adjust hash table adding.
+ (lazy_load_binding): Reorder dump stacking.
+ (lazy_load_specializations): Likewise, call specset::lazy_load.
+
+ gcc/cp/
+ * cp-tree.h (DECL_MODULE_PARTITION_P): Update doc.
+ * module.cc (trees_in::decl_value): Only set
+ DECL_MODULE_PARTITION_P when primary interface.
+
+ gcc/cp/
+ * decl.c (lookup_and_check_tag): Refactor.
+
+ gcc/cp/
+ * module.cc (import_entity_index): Use different fail value.
+ (dumper::impl::nested_name): Don't explode on bad import indices.
+ (module_state::write): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/part-4_[abc].C: New.
+
+2019-12-06 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (maybe_strip_cmi_prefix): Simplify.
+
+ gcc/cp/
+ * module.cc (trees_out::key_mergeable): Remove unreachable code.
+
+ gcc/cp/
+ * module.cc (enum tree_tag): Delete tt_friend_template.
+ (trees_out::decl_node): Uninstantiated template friends are not
+ special.
+ (trees_in::tree_node): Delete tt_friend_template handling.
+ (trees_{in,out}::{read,write}_class_def): No need to stream
+ template friends specially.
+ (trees_out::mark_class_def): No need to mark class_def members.
+ (depset::hash::make_dependency): Do not confuse uninstantiated
+ template friends with scope members.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-friend-2_a.C: Adjust scan.
+
+ gcc/cp/
+ * module.cc (trees_out::mark_class_def): No need to mark friend
+ specializations.
+
+ gcc/cp/
+ * decl.c (duplicate_decls): Just zap the template's module info.
+ * pt.c (build_template_decl): No need to copy false module info.
+ (tsubst_tenplate_decl): Just zap the template's module info.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_{node,value}): Remove cluster biasing.
+ (depset::hash::make_dependency): Likewise.
+ (module_state::write_{cluster,{namespace{,s}}): Likewise.
+ (module_state::write_{entities,specializations}): Likewise.
+ (module_state::write): Likewise.
+
+ (gcc/cp/
+ * module.cc (trees_out::decl_value): No need to look for dep again.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Get entity index & origin from
+ the depset.
+ (depset::hash::make_dependency): Stash the importing index &
+ origin in the depset.
+ (module_state::write_namespace): Get index & origin from the depset.
+
+ Structured bindings, c++2a libstdc++ is back working
+ gcc/cp/
+ * module.cc (trees_{in,out}::lang_decl_{bools,vals}): Handle
+ lds_decomp.
+ gcc/testsuite/
+ * g++.dg/modules/decomp-1_[ab].C: New.
+
+ Merge trunk r279023.
+ libstdc++ c++2a is now using structured bindings, and those don't
+ work :(
+
+2019-12-05 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset::hash::add_namespace_context): New.
+ (trees_out::decl_node): Use it for namespace.
+ (depset::hash::make_dependency): Likewise for discovered GMF.
+ (depset::hash::add_binding): Use it.
+ (depset::tarjan::connect): Make sure we don't wander into imports.
+ (depset::hash::connect): Don't add imports to the graph.
+ (module_state::write_namespace{,s}): Never meet global namespace.
+ (module_state::write_entries): Handle namespace entries
+ separately.
+ (module_state::write): Reorganize cluster traversals.
+
+ gcc/cp/
+ * module.cc (depset::hash::add_dependency): Do not depend on
+ imports.
+ (depset::tarjen::connect): Assert more.
+ (depset::hash::connect): Add less.
+ (module_state::write): Fewer cases.
+ gcc/testsuite/
+ * g++.dg/modules/vmort-2_b.C: Invert scan test.
+
+ gcc/cp/
+ * module.cc (depset::{make,add}_dependency): Drop is_import parm,
+ update all callers.
+ (will_be_import): Delete.
+ (trees_out::decl_node): Determine will be import locally.
+ (depset::make_dependency): Likewise.
+
+ gcc/cp/
+ * cp-tree.h (DECL_MODULE_PARTITION_P): New.
+ (lang_decl_base): Add module_partition_p.
+ * decl.c (duplicate_decls): Adjust.
+ * pt.c (build_template_decl, tsubst_template_decl): Adjust.
+ * module.cc (will_be_import): Assert consistency.
+ (trees_in::decl_value): Set module_partition_p.
+ (depset::hash::make_dependency): Assert consistency.
+ (set_instantiating_module): Clear it.
+
+ One Beellion Modules!
+ gcc/cp/
+ * cp-tree.h (lang_decl_base): Replace module_origin field with
+ module_import_p flag.
+ * modules.cc (MODULE_UNKNOWN{,_PARTITION}): Adjust.
+ (MODULE_LIMIT): Delete.
+ (module_state): Make mod & remap unsigneds.
+ (module_state::read): No need to check module overflow.
+
+ gcc/cp/
+ * module.cc (macro_import::slot) Adjust encoding to use fewer
+ bits.
+ (macro_import::append): Add defness parm.
+ (macro_import::exported): Always make definition.
+ (maybe_add_macro): Adjust.
+ (module_state::{write,install}_macros): Likewise.
+ (module_state::deferred_macro): Likewise.
+
+ Module index no longer on the decl itself.
+ gcc/cp/
+ * cp-tree.h (DECL_MODULE_ORIGIN): Delete.
+ (DECL_MODULE_IMPORT_P): New.
+ (get_importing_module): Declare.
+ * decl.c (duplicate_decls): Replace DECL_MODULE_ORIGIN with
+ DECL_MODULE_IMPORT_P.
+ * decl2.c (no_linkage_error): Likewise.
+ * module.cc
+ (will_be_import):Move later, use import_entity_{index,module}.
+ (import_entity_index): Add null_ok parm.
+ (dumper::impl::nested_name): Use import_entity_{index,module}.
+ (trees_in::decl_value): Set DECL_MODULE_IMPORT_P.
+ (trees_out::decl_node): Use will_be_import.
+ (depset::hash::make_dependency): Check import_p flag.
+ (depset::hash::add_specializations): Delete assert.
+ (module_state::{read,write}_namespaces): Check DECL_MODULE_IMPORT_P.
+ (module_state::write_specializations): Likewise.
+ (get_originating_module): Use get_importing_module.
+ (get_importing_module): New.
+ (module_may_redeclare): Lookup the module index.
+ (set_instantiating_module): Clear DECL_MODULE_IMPORT_P.
+ (finish_module_processing): Leep the entity_map.
+ * name-lookup.c (name_lookup::search_adl): Use
+ get_importing_module.
+ (add_imported_namespace): Set DECL_MODULE_IMPORT_P.
+ * pt.c (build_template_decl): Copy DECL_MODULE_IMPORT_P, not
+ ORIGIN.
+ (tsubst_template_decl): Likewise.
+ * ptree.c (cxx_print_decl): Use get_importing_module.
+
+ gcc/cp/
+ * name-lookup.h (add_imported_namespace): Origin is unsigned.
+ * name-lookup.c (add_imported_namespace): Origin is unsigned and
+ non-zero. Elide unreachable code.
+
+ gcc/cp/
+ * cp-tree.h (get_instantiating_module_decl): Delete.
+ (get_instantiating_module): Delete.
+ * module.cc (depset::hash::add_specialization): Remove assert.
+ (get_instantiating_module_decl): Delete.
+ (get_instantiating_module): Delete.
+
+ gcc/cp/
+ * module.cc (trees_in::{enum ,get_}{dup,ord}ness): Delete.
+ (trees_in::{odr,is}_duplicate): New.
+ (trees_in::read_{function,var,class,enum}_def): Adjust.
+ (module_state::read_cluster): Adjust.
+
+ gcc/cp/
+ * decl.c (duplicate_decls): Pass the old decl to
+ module_may_redeclare.
+ * module.cc (module_may_redeclare): Expect the decl, not its
+ owner.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Move is_import test into
+ non-streaming block. Check the decl, not the instantiator.
+
+2019-12-04 Nathan Sidwell <nathan@acm.org>
+
+ Elrond is dead, long live Elrond!
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Refactor, removing duplicate
+ code blocks.
+
+ Delete unreachable code
+ gcc/cp/
+ * module.cc (enum tree_tag): Delete tt_named,
+ tt_implicit_template.
+ (trees_out::decl_node): Remove #if'd out code.
+ (trees_in::tree_node): Remove tt_named, tt_implicit_template
+ handling.
+ (trees_out::key_mergeable): Remove unreachable anon-type case.
+ (trees_out::{write,mark}_class_def) Removed #if'd out code.
+ (trees_in::read_class_def): Likewise.
+ * name-lookup.c (get_binding_or_decl): Delete.
+ (lookup_by_type, lookup_ident, get_lookup_ident): Delete.
+ * name-lookup.h (lookup_by_type, lookup_ident, get_lookup_ident):
+ Don't declare.
+
+ Class members by index.
+ gcc/cp/
+ * decl.c (duplicate_decls): Repropagate module origin & purview.
+ * friend.c (add_friend): Potential code, so I don't forget it.
+ * module.cc (depset): Delete DB_MERGEABLE_BIT.
+ (find_enum_member): New.
+ (trees_out::decl_value): Separate different mergeable matching
+ cases. Add new ones.
+ (trees_out::decl_node): Stream class members by index. Adjust
+ identifier streaming.
+ (trees_in::decl_node): Deal with conv_op_identifier. Use
+ find_enum_member.
+ (trees_out::get_merge_kind): Add DECL parm, deal with via_ctx and
+ local_friends.
+ (trees_out::key_mergeable): Swap parms, deal with new kinds.
+ (trees_in::key_mergeable): Deal with new kinds.
+ (trees_{in,out}::{read,write}_class_def): Don't stream member
+ definitions.
+ (trees_out::mark_class_def): Don't mark members.
+ (depset::hash::make_dependency): Don't mark as mergeable.
+ (cluster_cmp): Compare by stripped UID.
+ (get_{instantiating,originating}_module_decl): Deal with fields,
+ usings and local friends.
+ * name-lookup.c (enum merge_match): New.
+ (check_mergeable_decl): Add match kind parm.
+ (match_mergeable_decl): Rename to ...
+ (mergeable_namespace_entity): ... here. Deal with namespace scope
+ entities.
+ (mergeable_class_member): New.
+ (make_namespace_finish): Adjust.
+ * name-lookup.h (match_mergeable_decl): Rename to ...
+ (mergeable_namespace_entity): ... here.
+ (mergeable_class_member): Declare.
+ gcc/testsuite/
+ * g++.dg/modules/friend-1_a.C: Adjust scans.
+ * g++.dg/modules/indirect-[1234]_[bc].C: Likewise.
+ * g++.dg/modules/inst-3_a.C: Likewise.
+ * g++.dg/modules/tpl-friend-[12]_a.C: Likewise.
+ * g++.dg/modules/tpl-spec-[45]_a.C: Likewise.
+ * g++.dg/modules/vmort-2_a.C: Likewise.
+ * g++.dg/modules/internal-1.C: Add xfailed dg-bogus
+ * g++.dg/modules/thunk-1_a.C: Avoid implicit member problem.
+
+2019-12-02 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (dumper::impl::nested_name): Add 'template '
+ disambiguator.
+ (trees_out::add_indirect_tpl_parms): Check if streaming before
+ dumping.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-[234]_[bc].C: Adjust scans.
+ * g++.dg/modules/inst-3_b.C: Likewise.
+ * g++.dg/modules/late-ret-[23]_[ac].[HC]: Likewise.
+ * g++.dg/modules/tpl-friend-[12]_a.C: Likewise.
+ * g++.dg/modules/tpl-spec-[1245]_[abcd].C: Likewise.
+
+2019-11-27 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (will_be_import): New.
+ (depset::hash::make_dependency): Add is_import parm, rather than
+ calculate. Update all callers.
+ (depset::hash::add_dependency): Likewise.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Untangle namespace-scope
+ emission from class-scope.
+ (trees_in::tree_node): Fix tt_entity ident signedness.
+ (depset::hash::make_dependency): Check is_import before checking
+ GMF reachability.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Refactor function scope
+ & specialization emission.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Deal with function scope
+ before instantiations.
+
+2019-11-26 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Tag and add indirects for
+ uninstantiated template friend.
+ (trees_in::tree_node): Likewise.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Remove a scope.
+
+ gcc/cp/
+ * module.cc (depset): Delete EK_UNNAMED, EK_MAYBE_SPEC.
+ (trees_out::decl_node): Use EK_DECL for those.
+ (depset::hash::make_dependency): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-friend-[12]_a.C: Adjust scans.
+ * g++.dg/modules/tpl-spec-5_a.C: Likewise.
+ * g++.dg/modules/vmort-2_a.C: Likewise.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Assert more.
+
+ gcc/cp/
+ * module.cc (module_state::check_read): Simplify to print once per
+ import.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Stream _EXPR operands in
+ forward order.
+ (trees_out::decl_node): Move NULL DECL_CONTEXT handling to ...
+ (trees_out::tree_node): ... here.
+
+2019-11-25 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (struct unnamed_entity): Delete.
+
+ gcc/cp/
+ * name-lookup.h (get_imported_namespace): Don't delare.
+ * name-lookup.c (get_imported_namespace): Delete.
+
+ Namespaces are in the entity_ary
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Namespace may be imported.
+ (depset::hash::make_dependency): Permit imported namespaces.
+ (module_state::{read,write}_namespace): New.
+ (module_state::{read,write}_namespaces): Adjust.
+ (module_state::{read,write]_bindings): Adjust.
+ (module_state::write): Don't count imported namespaces.
+ * name-lookup.c (add_imported_namespace): Mark namespace as
+ imported, if we made it.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-[1234]_[bc].C: Adjust scans.
+ * g++.dg/modules/namespace-2_a.C: Likewise.
+
+ gcc/cp/
+ * module.cc (tree_tag): Delete tt_namespace.
+ (trees_in::tree_node): Delete tt_namespace handling.
+ (module_state::{read,write}_namespaces): Adjust.
+ (module_state::write_entities): Delete TABLE parm.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_decl): Write namespaces as tt_entity.
+ (module_state::write_namespaces): Adjust.
+ (module_state::read_namespaces): Likewise, don't return a
+ namespace vector.
+ (module_state::{read,write}_bindings): Adjust.
+ (module_state::{read,write}_entities): Allow namespaces.
+ (module_state::{read,write}): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-[1234]_c.C: Adjust scans.
+
+ gcc/cp/
+ * module.cc (module_state::write_namespaces): Delete TABLE arg,
+ look at the dep[0]
+ (module_state::read_namespaces): Add num_spaces parm. Use it to
+ count iterations.
+ (module_State::write_bindings): Drop TABLE arg, look at dep[0].
+ (struct module_state_config): Add num_namespaces field, stream it.
+ (module_state::{read,write}): Don't count global namespace. adjust
+ namespace streaming calls.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Add namespace dependency here.
+ (depset::hash::add_dependency): And here.
+ (space_cmp): Delete.
+ (module_state::write): No need to sort namespaces anymore.
+
+ gcc/cp/
+ * module.cc (depset::hash::make_dependency): Add context
+ dependency when discovering a new GMF binding.
+ (depset::hash::add_binding): Likewise when discoving a non-empty binding.
+ (depset::hash::finalize_dependencies): Leave binding's namespace
+ dependency untouched.
+ (module_state::write_cluster): Assert binding's namespace in in
+ slot zero. Adjust binding scan.
+
+2019-11-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cxx-mapper.cc (DOT_REPLACE, COLON_REPLACE): New.
+ (module2bmi): Use them.
+ gcc/testsuite/
+ * g++.dg/modues/modules.exp (dg-module-cmi): Update default mapping.
+
+2019-11-22 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset::EK_FOR_BINDING): New.
+ (depset::hash::make_dependency): Don't look at current. Adjust.
+ (depset::hash::add_dependency): Current is always live.
+ (depset::hash::add_binding): Don't set current. Directly depend
+ the binding.
+ (depset::hash::add_namespace_entities): Use make_dependency.
+ (depset::hash::add_specializations): Likewise.
+
+ gcc/cp/
+ * module.cc (depset::hash::find_entity): Rename to ...
+ (depset::hash::find_dependency): ... here. Update callers.
+ (depset::hash::add_dependency): Break apart to ...
+ (depset::hash::make_dependency): ... this, and ...
+ (depset::hash::add_dependency): ... this, adder.
+ (depset::hash::add_dependency): Do both.
+
+ gcc/cp/
+ * module.cc (depset::DB_PSEUDO_SPEC_BIT): Delete.
+ (depset::is_pseudo_spec): Delete.
+ (depset::add_dependency): Don't set it.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): We should not meet imported
+ internal namespaces.
+ (module_state::{read,write}): Stream entities before namespaces.
+ * name-lookup.c (add_imported_namespace): Module number must not
+ be negative.
+
+ gcc/cp/
+ * module.cc (trees_in::lang_decl_bools): Don't set module_origin
+ here.
+ (trees_out::decl_value): Stream out entity index. Install into
+ entity_map.
+ (trees_in::decl_value): Stream in entity index. Install into
+ entity ary, and map (if new)
+ (module_state::write_cluster): Do not install into map here.
+ (module_state::read_cluster): ... or here. And not ary either.
+ gcc/testsuite/
+ * g++.dg/modules/builtin-[13]_b.C: Adjust scans.
+ * g++.dg/modules/indirect-[123]_[bc].C: Likewise.
+ * g++.dg/modules/inst-[1234]_b.C: Likewise.
+ * g++.dg/modules/late-ret-[23]_c.C: Likewise.
+ * g++.dg/modules/part-3_[cd].C: Likewise.
+ * g++.dg/modules/tdef-6_b.C: Likewise.
+
+ gcc/cp/
+ * cp-tree.h (DECL_MODULE_IMPORT_P): #ifdef out, not yet ready
+ * module.cc (dumper::impl::nested_name): Don't use it.
+ (module_state::read_cluster): Likewise.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_value): Ensure we stay in the
+ section.
+ (trees_out::mark_class_def): Do not mark non-friends on
+ CLASSTYPE_DECL_LIST.
+
+2019-11-21 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (lookup_enum_member): Delete.
+ (get_binding_or_decl): Add missing return.
+
+ gcc/cp/
+ * name-lookup.c (get_binding_or_decl): Only class contexts.
+ * module.cc (trees_out::decl_node): Possible fixme.
+
+ gcc/cp/
+ * module.cc (depset::hash): Add sections member.
+ (module_state::write_cluster): Use it.
+ (module_state::write): Set it.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Don't strip_template checking
+ instantiation consistency.
+ (depset::hash::add_{dependency,specializations}): Likewise.
+ (get_originating_module_decl): Cope with template friends. Get to
+ the template_decl.
+ (get_instantiating_module_decl): Cope with template friends. Keep
+ the template_decl.
+ gcc/testsuite/
+ * g++.dg/modules/pl-spec-[1245]_[abcd].C: Adjust scans.
+
+ gcc/cp/
+ * name-lookup.c (check_local_shadow): Bail out for clones.
+
+ gcc/cp/
+ * module.cc (dumper::impl:nested_name): Obnly show module on imports.
+ gcc/testsuite/
+ * g++dg/modules: Anjust many scans.
+
+2019-11-20 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (tree_tag): Rename tt_enum_int, add tt_enum_decl.
+ (trees_out::tree_decl): Write enum consts as tt_enum_decl, not
+ tt_data_member.
+ (trees_in::tree_node): Add tt_enum_decl handling, adjust
+ tt_data_member handling.
+
+ gcc/cp/
+ * module.cc (module_state::lazy_load): Add diags arg, make index
+ unsigned.
+ (lazy_load_specializations): Use lazy_load.
+
+ gcc/cp/
+ * module.cc (module_state:write_cluster): Minor cleanups
+ gcc/testsuite/
+ * g++.dg/modules/indirect-2_b.C: Adjust scans.
+ * g++.dg/modules/inst-3_a.C: Likewise.
+ * g++.dg/modules/stdio-1_a.H: Likewise.
+
+ gcc/cp/
+ * module.cc (depset:entity_kind): Reorder.
+ (depset::DB_REFS_UNNAMED_BIT): Delete. Remove accessor & setter.
+ (cluster_cmp): Order by entity_kind.
+ (module_state::write_cluster): A single write pass is sufficient.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-3_b.C: Adjust cluster order scan.
+ * g++.dg/modules/late-ret-[23]_a.H: Likewise.
+
+ gcc/cp/
+ * (class depset): Drop entity_num field. Adjust all users to use
+ cluster.
+ (module_state::write_cluster): Merge counting and marking loops.
+
+ Expelliarmus!
+ gcc/cp/
+ * module.cc (module_state): Delete unnamed_{lwm,num}.
+ (enum ct_decl_flags): Delete cdf_is_voldemort.
+ (module_state::write_cluster): Don't set cluster number. Drop
+ voldemort handling.
+ (module_state::read_cluster): Drop voldemort handling.
+ (module_state::write_specializations): Drop cluster consistency
+ check.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-2_b.C: Adjust scans.
+ * g++.dg/modules/inst-[23]_a.C: Likewise.
+
+ Remove more unnamed remnants.
+ gcc/cp/
+ * module.cc (module_state::write_cluster): Count specializations.
+ (module_state::{read,write}_unnamed): Rename to ...
+ (module_state::{read,write}_specializations): ... here. Drop
+ section numbers. Adjust calls.
+ (struct module_state_config): Rename num_unnamed to
+ num_specializations, adjust all uses.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-spec-[12345]_[ab].C: Adjust scans.
+
+ Remove unnamed ary etc.
+ gcc/cp/
+ * module.cc (unnamed_ary, unnamed_map_t, unnamed_map): Delete.
+ (module_state::read_cluster): Do not insert into unnamed_ary or
+ map.
+ (module_state::read_unnamed): Do not extend unnamed_ary.
+ (module_state::read): Do not set unnamed_lwm.
+ (module_for_unnamed): Delete.
+ ({init,finish}_module_processing): Do not create/destroy unnamed
+ ary & map.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-[23]_c.C: Adjust scans.
+ * g++.dg/modules/inst-[124]_b.C: Likewise.
+ * g++.dg/modules/late-ret-2_c.C: Likewise.
+
+ gcc/cp/
+ * module.cc (module_state::{read,write}_unnamed): Specializations
+ store entity index.
+ (lazy_load_specializations): Use the entity index.
+
+ No more horcruxes.
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Specializations are tt_entity.
+ (enum cluster_tag): Delete ct_horcrux.
+ (module_state::write_cluster): No need to create horcruxes.
+ (module_state::read_cluster): No need to resurrect horcruxes.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-[24]_b.C: Adjust scans.
+ * g++.dg/modules/inst-[123]_[ab].C: Likewise.
+ * g++.dg/modules/late-ret-2_c.C: Likewise.
+ * g++.dg/modules/tpl-friend-5_b.C: Likewise.
+
+2019-11-19 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Process unnamed decls directly
+ here.
+ (depset::hash::add_dependency): EK_UNNAMED doesn't reference
+ unnamed (really).
+ (module_state::write_cluster): Do not preseed horcruxes for
+ EK_UNNAMED. Add unnamed and specializations into the entity_map.
+ gcc/testsuite/
+ * g++.dg/modules/vmort-2_[abc].C: Adjust scans
+
+ gcc/cp/
+ * module.cc (enum tree_tag): Kill tt_anon. No longer emitted.
+ (import_entity_index): Do not assert imported.
+ (trees_out::decl_node): Always get the import_entity_index for
+ tt_entity.
+ (trees_in::tree_node): Drop tt_anon.
+ (module_state::write_cluster): Add the EK_DECLs to the entity_map.
+
+ gcc/cp/
+ * cp-tree.h (lazy_load_binding): Drop final parm.
+ * module.cc (module_state::lazy_load): Drop ns, id & outermost
+ parms.
+ (trees_in::tree_node, module_state::read_cluster): Adjust
+ lazy_load calls.
+ (module_state::read): Inhibit GC here.
+ (lazy_load_binding): Deal with binding dumps here.
+ (lazy_load_specializations): Use lazy_load_binding.
+ * name-lookup.c: Adjust lazy_load_binding calls.
+ (get_binding_or_decl): No namespace handling here.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-friend-5_b.C: Adjust scans
+ * g++.dg/modules/vmort-2_c.C: Likewise.
+
+ Entities are numbered (part 1)
+ gcc/cp/
+ * cp-tree.h (DECL_MODULE_IMPORT_P): New.
+ * module.cc (depset::entity_kind): Add EK_ENTITIES.
+ (depset::entity_num): New (temporary) field.
+ (enum tree_tag): Add tt_entity.
+ (module_state): Add entity_lwm & entity_num fields.
+ (module_state::lazy_load): Add index, use it.
+ (module_state::{read,write}_entities): New.
+ (module_state::{read,write}_cluster): Number the entities.
+ (entity_map_t, entity_map, entity_ary) New.
+ (import_entity_index, import_entity_module): New.
+ (trees_out::decl_node): Write tt_entity for namespace decls.
+ (trees_in::tree_node): Add tt_entity handling.
+ (struct module_state_config): Add num_entities field.
+ (module_state::{read,write}_config): Stream it.
+ (module_state::{read,write}: Adjust.
+ ({init,fini}_module_processing): Deal with entity map and ary.
+ * name-lookup.c (get_binding_or_decl): Mark NAMESPACE unreachable.
+ gcc/testsuite/
+ * g++.dg/modules/{builtin,indirect}-1_b.C: Adjust scans.
+ * g++.dg/modules/indirect-[1234]_c.C: Likewise.
+ * g++.dg/modules/tpl-friend-5_b.C: Likewise.
+ * g++.dg/modules/unnamed-1_b.C: Likewise.
+
+2019-11-14 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (check_mergeable_specialization): Take spec_entry arg.
+ * module.cc (trees_out::decl_node): Allow CONCEPT_DECL.
+ (trees_out::key_mergeable): Use check_mergeable_specialization).
+ (specialization_add): Adjust check_mergeable_specialization call.
+ * pt.c (register_specialization): Remove casts.
+ (check_mergeable_specialization): Take spec_entry arg.
+ (match_mergeable_specialization): Add the specialization early.
+ gcc/testsuite/
+ * g++.dg/modules/concept-4.H: New.
+
+ gcc/cp/
+ * cp-tree.h (lang_decl_base): Note 8-bits.
+ * error.c (dump_module_suffix): Bail on no DECL_CONTEXT.
+ * module.cc (trees_{in,out}::lang_decl_bools): Update for new
+ fields.
+ (has_definition): Deal with CONCEPT_DECL.
+ (trees_out::{mark,write}_definition): Concepts are like vars.
+ (trees_in::read_definition): Likewise.
+ ({get,set}_originating_module{,_decl}): Deal with CONCEPT_DECL.
+ * pt.c (finish_concept_definition): Set orginating module.
+ gcc/testsuite/
+ * g++.dg/modules/concept-3_[ab].C: New.
+
+ Merge trunk r278228.
+
+2019-11-01 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * rtti.c ({push,pop}_abi_namespace): Save and restore module
+ state.
+ (build_dynamic_cast_1, tinfo_base_init): Adjust.
+
+ gcc/cp/
+ * module.cc (depset::hash::find_dependencies): Reach unreached
+ specializations.
+
+2019-10-31 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_state::read_cluster): Hack around cfun.
+
+2019-10-29 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out): Clean up dead code, update instrumentation.
+ (class_members): New global.
+ (depset::hash::add_writables): Rename to ...
+ (depset::hash::add_namespace_entities): ... this.
+ (depset::hash::add_class_entities): New, incomplete.
+ (module_state::write): Add class entities.
+ (set_instantiating_module): Record on the class_member list if
+ necessary.
+
+ gcc/cp/
+ * module.cc (trees_out::core_vals): Audit VAR_DECL, removing fixme.
+
+2019-10-28 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Stream more block fields.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Stream template info's
+ typedefs needing access checks.
+
+ gcc/cp/
+ * module.cc (depset): Correct documentation.
+ (walk_kind_name): Delete unused.
+ (trees_out::get_container): Lookup for redirect.
+
+ gcc/cp/
+ * module.cc (node_template_info): Type cannot be NULL.
+
+ gcc/cp/
+ * module.cc (trees_out::{fn_parms_ini,tpl_header}): Privatize,
+ resolving fixme.
+ (trees_out::core_vals): Resolve TEMPLATE_DECL &
+ TEMPLATE_PARM_INDEX fixmes.
+ (trees_out::tpl_parm_value): Resolve template template parm fixme.
+
+ Merge trunk r277514.
+
+2019-10-25 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::type_node): Move typedef printing after
+ variant printing.
+ (trees_in::tree_node): Simplity tt_typedef_type.
+
+ gcc/cp/
+ * module.cc (trees_out::core_vals): Check if template parm has a
+ canonical type before processing it.
+ (trees_in::tpl_parm_value): Likewise.
+
+ gcc/cp/
+ * module.cc (enum tree_tag): Delete tt_typename_decl.
+ (trees_out::decl_node): Do not handle TYPENAME_TYPE here ...
+ (trees_out::type_node): ... handle them here instead.
+ (trees_in::tree_node): Delete tt_typename_decl, handle
+ TYPENAME_TYPE as a derived_type.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Fixup anonymous case.
+
+ Remove mergeable sorting code.
+ gcc/cp/
+ * module.cc (depset::hash): Delete for_mergeable,
+ is_for_mergeable.
+ (depset::hash::add_mergeable{,_horcrux}): Delete.
+ (trees_out::get_merge_kind): Remove for_mergeable indirection.
+ (trees_out::key_mergeable): Likewise.
+ (depset::hash::add_dependency): Remove mergeable handling.
+ (depset::hash::find_dependencies): Likewise. Remove #if'd out code.
+ (sort_mergeables): Delete.
+ (module_state::write_cluster): Remove #if'd out code.
+
+2019-10-24 Nathan Sidwell <nathan@acm.org>
+
+ Turn off mergeable ordering.
+ gcc/cp/
+ * module.cc (depset::hash::find_dependencies): No need to add
+ specialization keys here.
+ (module_state::erite_cluster): Or sort mergeables here.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-[234]_b.C: Adjust scans.
+ * g++.dg/modules/inst-[23]_a.C: Likewise.
+ * g++.dg/modules/late-ret-[23_a.H: Likewise.
+ * g++.dg/modules/tpl-friend-1_a.C: Likewise.
+
+ Types always keyed by TYPE_NAME. Use TYPE_NAME not TYPE_STUB_DECL.
+ gcc/cp/
+ * module.cc (enum merge_kind): Drop MK_linkage.
+ (trees_out::core_vals): Fix DECL_TEMPLATE_PARM_P thinko.
+ TYPE_DECLS for linkage are not regular typedefs.
+ (trees_{in,out}::add_indirects): Always add a TYPE_DECL's type.
+ (trees_{in,out}::decl_value): Write the stub_decl if it's
+ different.
+ (trees_out::{type,decl}_node): Cleanup some type_decl handling.
+ (trees_out::get_merge_kind): Drop MK_linkage.
+ (trees_{in,out}::key_mergeable): Likewise.
+ (trees_out::{has,write,mark}_definition): Adjust.
+ (trees_in::read_definition): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/class-3_[bd].C: Adjust scans.
+ * g++.dg/modules/tdef-6_b..C: Adjust scans.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::tpl_parm_value): No need to stream
+ bound ttp's TI here.
+ (trees_out::get_merge_kind): Refactor anon type determination.
+
+ Merge trunk r277416.
+
+2019-10-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (enum ct_decl_flags): Add cdf_is_defn.
+ (module_state::{read,write}_cluster): Don't stream definitions
+ separately.
+
+ gcc/cp/
+ * module.cc (get_clone_target): Assert more.
+ (trees_in::back_ref): Check the tree's not insane.
+ (trees_in::tree_node): Check the clone target is ok.
+ (module_state::lazy_load): Inhibit GC.
+
+ gcc/
+ * dumpfile.c (dump_begin): Move decls for RAII.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::tpl_parm_value): Don't stream tpi
+ here.
+ (trees_{in,out}::tree_value): Strip now-unreachable code.
+
+ gcc/cp/
+ * module.cc (enum tree_tag): Add tt_tpl_parm.
+ (trees_{in,out}::tpl_parm_value): New.
+ (trees_out::add_indirect_tpl_parms): Simpilfy.
+ (trees_out::tree_value): No template parms here.
+ (trees_{in,out}::tree_node): Deal with call tpl_parm_value.
+
+ gcc/cp/
+ * pt.c (reduce_template_parm_level): Attach TPI to the type or
+ decl.
+ (convert_generic_types_to_packs): Pass new type to
+ reduce_template_parm_level.
+
+2019-10-22 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::tpl_parms{,_fini}): Drop outer parms,
+ add tpl_levels.
+ (trees_{in,out}::tpl_header): Likewise.
+ (trees_{in,out}::add_indirect_tpl_parms): New.
+ (trees_{in,out}::add_indirects): Call them.
+ (trees_{in,out}:decl_value): Adjust tpl_header streaming.
+ (trees_{in,out}:tree_value): Adjust tpl_header streaming.
+ (depset::hadh::find_dependencies): Likewise.
+ (module_name): Don't look for current TU's parent.
+
+2019-10-21 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_in::back_ref): New, broken out of ...
+ (trees_in::tree_node): ... here. Call it multiple times.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::add_indirects): New, broken out of ...
+ (trees_out::decl_node, trees_in::tree_node): ... here. Call them.
+ (module_state::{read,write}_cluster): Call them instead of
+ duplicate code.
+ gcc/testsuite/
+ * g++.dg/modules/by-name-1.C: Adjust scans.
+ * g++.dg/modules/class-3_[bd].C: Likewise.
+ * g++.dg/modules/vmort-2_c.C: Likewise.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::key_mergeable): Do not stream tpl
+ header of fn parms here.
+ (tree_{in,out}::decl_value): Stream them here ...
+ (depset:hash::find_dependencies): ... and here.
+
+2019-10-18 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r277167.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_value): Excise template_parm
+ handling.
+ (trees_{in,out}::tree_value): Excise non-template-parm
+ tmpl/type/fn/var handling here.
+
+ gcc/cp/
+ * module.cc (dumper::impl::nested_name): Check template_parm_p
+ directly.
+ (trees_out::core_vals): Check DECL_TEMPLATE_PARM_P.
+ (trees_out::decl_value): Never get a DECL_TEMPLATE_PARM_P.
+ (trees_in::decl_value): Likewise.
+ (trees_out::decl_node): Send DECL_TEMPLATE_PARM_P to tree_value.
+ (trees_out::type_node): Simplify name detection.
+ (trees_out::tree_value): Allow DECL_TEMPLATE_PARM_P, but no other
+ tmpls/type/var/fns.
+ * tree.c (bind_template_template_parm): Set DECL_TEMPLATE_PARM_P.1
+
+ gcc/cp/
+ * module.cc (dumper::impl::nested_name): Detect template parms.
+ (trees_{in,out}::core_vals): Don't write context of template
+ parms. Don't clobber template's type.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::start): Stream code if permitted.
+ Adjust callers.
+
+2019-10-17 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::tpl_parms): Assert a lot.
+ (depset::hash::find_dependencies, module_state::write_cluster):
+ Mark mergeable sort-specific points.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_value): Stream thunks too.
+ (trees_out::decl_node): Forward all potentially mergeable decls to
+ decl_value.
+ (trees_out::tree_value): Make sure we don't get any potentially
+ mergeable decls.
+ (trees_{in,out}::tree_value): Stream template parms
+ via tpl_parms.
+ (trees_{in,out}::tpl_parms): The vector can be 0 length.
+ (trees_out::mark_declaration): Don't mark the template parms.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::tpl_parms): Cope with non-shared
+ parms.
+ (trees_{in,out}::tpl_parms_fini): Likewise, stream vec type.
+
+ gcc/cp/
+ * cp-objcp-common.c (cp_pushdecl): Set DECL_CONTEXT.
+ gcc/testsuite/
+ * g++.dg/modules/builtin-3_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::decl_value): Refactor some ifs.
+
+2019-10-16 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * decl.c (cp_make_fname_decl): Set context to global namespace,
+ outside functions.
+ (builtin_function_1): Merge into ...
+ (cxx_builtin_function): ... here. Nadger the decl before maybe
+ copying it. Set the context.
+ (cxx_builtin_function_ext_scope): Push to top level, then call
+ cxx_builtin_function.
+
+ gcc/cp/
+ * rtti.c (get_tinfo_desc): Set DECL_CONTEXT.
+ gcc/testsuite/
+ * g++.dg/modules/tinfo-1.C: New.
+
+ gcc/cp/
+ * module.cc (enum tree_tag): Add tt_parm.
+ (trees_out::decl_node): Emit tt_parm for parms.
+ (trees_in::tree_node): Add tt_parm.
+ (trees_out::write_function_def): Simply tag constexpr parms &
+ result.
+ (trees_in::read_function_def): Clone the originating fn's parms &
+ result.
+ (module_state::read): Add GC points, when lazy.
+
+2019-10-15 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::core_vals): Don't assert template
+ arguments visited.
+ (trees_{in,out}::tpl_parms): Stream TMPL_DEPTH.
+ (trees_{in,out}::tpl_parms_fini): New.
+ (trees_{in,out}::decl_value): Don't stream template parms, use
+ tpl_parms_fini.
+
+ gcc/cp/
+ * module.cc (trees_out::get_container): New, broken out of ...
+ (trees_out::key_mergeable): ... here. Add container parm.
+ (trees_in::key_mergeable): Container is already set.
+ (trees_{in,out}::decl_value): Stream container here.
+ (dpset::hash::find_dependencies): Adjust mergeable walk.
+ gcc/testsuite/
+ * g++.dg/modules/builtin-1_a.C: Adjust scan.
+
+ Merge trunk r277002.
+
+ Revert TYPE_LAMBDA_P, it's unnecessary churn.
+ gcc/cp/
+ * cp-tree.h (LAMBDA_TYPE_P): Subsume TYPE_LAMBDA_P.
+ (TYPE_LAMBDA_P): Delete. Update all uses.
+
+ gcc/cp/
+ * module.cc (merge_kind): Add MK_local_friend.
+ (trees_{in,out}::tpl_parms): New.
+ (trees_{in,out}::tpl_header): Adjust parm streaming
+ (trees_{in,out}::key_mergeable): Find containing template.
+
+2019-10-11 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r276888.
+ Pull in c++20 concepts.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Don't stream function
+ parms here.
+ (trees_out::decl_value): Stream has_defn.
+ (trees_in::decl_value): Stream has_defn, adjust fn_parms_fini.
+ (trees_in::tree_value): Likewise.
+ (trees_{in,out}::fn_parms_init): Stream entire parms.
+ (trees::fn_parms_fini): Do nothing.
+ (trees_in::fn_parms_fini): Add has_defn, adjust.
+
+ gcc/cp/
+ * module.cc (enum walk_kind): Remove WK_merge.
+ (enum trees_out::tags): Remove tag_merging.
+ (trees_out::mark_merged): Delete.
+ (trees_out::{insert,ref_node}): Adjust.
+ (trees_out::decl_value): Insert by value immediately.
+
+ gcc/cp/
+ * optimize.c (maybe_clone_body): Allow aliasing with modules.
+
+ gcc/cp/
+ * module.cc (enum depset::entity_kind): Remove EK_CLONE.
+ (depset::add_clone): Delete.
+ (enum merge_kind): Remove MK_clone.
+ (depset::entity_kind_name): Adjust.
+ (trees_in::decl_value): No merging for clones.
+ (trees_out::decl_node): Remove clone dependency.
+ (trees_out::get_merge_kind): No clone merging.
+ (trees_{in,out}::key_mergeable): Likewise.
+ (module_state::write_cluster): Never see a clone.
+
+ Reconstruct clones on stream in
+ gcc/cp/
+ * module.cc (trees_out::{decl,tree}_value): Write clone info.
+ (trees_in::{decl,tree}_value): Reconstruct clone.
+ (trees_out::decl_node): Do not depend on clones.
+ (module_state::read_cluster): Clone bodies.
+
+2019-10-10 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (DECL_NEEDS_VTT_PARM_P): Delete.
+ (build_clones): Declare.
+ (ctor_omit_inherited_parms): Add exact_name default parm.
+ * class.c (build_clone): Add need_vtt & omit_inherited parms, do
+ not calculate here.
+ (build_clones): New function. Add need_vtt &
+ omit_inherited_parms. Broken out of ...
+ (clone_function_decl): Call build_clones. Add to method vec here.
+ * method.c (ctor_omit_inherited_parms): Add exact_name parm.
+ Detect any ctor or specific base ctor as specified.
+
+2019-10-09 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * class.c (maybe_add_class_template_decl_list): Don't check
+ template-id-expr friends.
+ * module.cc (friend_from_decl_list): Don't stray into primary
+ templates.
+ (trees_out::{write,mark}_class_def): Adjust local friend
+ detection.
+ (trees_in::read_class_def): Likewise.
+
+ gcc/cp/
+ * cp-tree.h (DECL_UNINSTANTIATED_TEMPLATE_FRIEND_P): New.
+ * module.cc (trees_{in,out}::core_vals): Stream local template
+ friend's DECL_CHAIN.
+ (trees_out::decl_node): Use DECL_UNINSTANITATED_TEMPLATE_FRIEND_P.
+ (trees_out::{read,write,mark}_class_def): Adjust local template
+ friend streaming.
+ * pt.c (push_template_decl_real): Set
+ DECL_UNINSTANTIATED_TEMPLATE_FRIEND_P.
+ (tsubst_friend_function): Clear D_U_T_F_P.
+
+ gcc/cp/
+ * pt.c (push_template_decl_real): Always set DECL_CHAIN for
+ non-pushed friends.
+
+2019-10-08 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::decl_value): Check streaming before dump.
+ (module_name): Protect from not modules.
+
+ gcc/cp/
+ * module.cc (enum merge_kind): Rename non->unique.
+ (trees_out::key_mergeable): Add decl parm. Return MK_unique for
+ non-dep decls.
+ (trees_{out,out}::decl_value): Adjust.
+
+ gcc/cp/
+ * module.cc (struct nodel_decl_hash): New.
+ (duplicate_hash_map): New.
+ (trees_in::duplicates): New.
+ (trees_in::mergeables): Delete.
+ (trees_in::{,~}trees_in): Adjust.
+ (trees_in::{find,register,unmatched}_duplicate): New.
+ (trees_in::{reserve,register,unmcted}_mergeable): Delete.
+ (enum trees_in::dupness): Delete DUP_unique.
+ (trees_in::decl_value): Adjust duplicate registration.
+ (trees_in::get_dupness): Adjust.
+ (module_state::{read,write}_cluster): Don't stream mergeable count.
+
+ gcc/cp/
+ * module.cc (enum walk_kind): Rename body->value,
+ mergeable->merge. Delete clone, merging.
+ (trees_in::decl_value): Drop walk_kind parm, read merge kind
+ early.
+ (trees_in::key_mergeable): Add merge_kind parm, return bool.
+ (trees_out::mark_node): Rename to ...
+ (trees_out::mark_by_value): ... here.
+ (trees_out::get_merge_kind): New, broken out of ...
+ (trees_out::key_mergeable): ... here. Add merge_kind parm.
+ (trees_out::decl_value): Replace walk_kind parm with depset.
+ Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/scc-1.C: Adjust scan.
+ * g++.dg/modules/builtin-1_a.C: Adjust scan.
+
+2019-10-07 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (enum trees_out::tags): Delete tag_mergeable,
+ tag_cloned.
+ (trees_out::mark_mergeable): Delete.
+ (trees_out::{insert,ref_node}): Adjust.
+ (trees_out::decl_node): Look at depset to determine mergeability.
+ (trees_out::key_mergeable): Adjust.
+ (trees_in::register_mergeable): Always reserve space.
+ (module_state::write_cluster): Don't mark mergeable here.
+
+ gcc/cp/
+ * module.cc (trees_in::get_odrness): Check if overrun.
+ (trees_in::read_class_def): Add overrun protection.
+ * name-lookup.c (name_search::search_adl): Tweak.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Stream
+ decl_non_common.result for using decls.
+ (trees_out::decl_node): USING_DECLS are done by value.
+ * name-lookup.c (finish_nonmember_using_decl): Set DECL_CONTEXT.
+ gcc/testsuite/
+ * g++.dg/modules/using-6_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (enum tree_tag): Add tt_decl.
+ (trees_{in,out}::decl_value): Broken out of ...
+ (trees_{in,out}::tree_value): ... here. Deal with non mergeble
+ cases only.
+ (trees_in::tree_node): Add tt_decl.
+ (trees_out::decl_node): Call decl_value.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Refactor some instantiation
+ discovery.
+
+2019-10-04 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r276597.
+
+ gcc/cp/
+ * module.c (trees_out:decl_node): More switchification and code
+ movement.
+
+ gcc/cp/
+ * module.c (trees_out:decl_node): Switchify, and move some checks
+ before template detection.
+
+ gcc/cp/
+ * module.cc (trees_in::tree_value): Rework merge_kind switching.
+ (trees_{in,out}::key_mergeable): Likewise.
+
+ gcc/cp/
+ * module.cc (enum merge_kind): Reorder.
+
+2019-10-03 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Merge and reorder tinfo
+ streaming.
+ (trees_in::tree_node): Merge tinfo streaming.
+
+ gcc/cp/
+ * module.cc (depset::hash::add_dependency): Separate EK_REDIRECT
+ handling from EK_MAYBE_SPEC.
+ (get_instantiating_module_decl): Reorder checks, remove fixme.
+
+ gcc/cp/
+ * module.cc (trees_out::decl_node): Check DECL_LANG_SPECIFIC.
+ (depset::hash::add_dependency): Likewise.
+ (get_originating_module_decl): Return global_namespace for null.
+ (get_originating_module): Correctly handle lack of
+ DECL_LANG_SPECIFIC.
+ (set_instantiating_module): Lazily allocate lang specific.
+ (set_originating_module): Call set_instantiating_module.
+ * pt.c (build_template_decl, tsubst_template_decl): Check
+ DECL_LANG_SPECIFIC.
+ * rtti.c (tinfo_base_init): Likewise.
+
+ gcc/cp/
+ * module.cc (elf_in::{defrost,begin}): Advise random seeking.
+
+ gcc/cp/
+ * module.cc (depset::hash::add_dependency): Drop is_import arg,
+ update callers. Calculate it here.
+
+ gcc/cp/
+ * cp-tree.h (MODULE_SLOT_*): Move to ...
+ * name-lookup.c (MODULE_SLOT_*): ... here.
+ * module.cc (depset::hash::add_dependency): More asserts.
+ * pt.c (build_template_decl, tsubst_template_decl): Always
+ propagate from result.
+
+2019-10-02 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::tree_ctx): Delete, forward all callers to
+ tree_node.
+ (trees_out::tree_namespace): Delete, move into tree_decl.
+ (trees_out::tree_decl): Rename to ...
+ (trees_out::decl_node): ... this. Update caller.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_type): Rename to ...
+ (trees_out::type_node): Drop walk_kind arg, return void. Update
+ callers.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_ctx): Drop need_contents parm.
+ Update callers.
+ (trees_out::tree_{type,decl}: Likewise.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_ctx): Drop inner_decl parm. Update
+ callers.
+ (trees_out::tree_namespace): Likewise.
+
+ gcc/cp/
+ * cp-tree.h (MK_*): Document better.
+
+ gcc/cp/
+ * cp-tree.h (MODULE_CURRENT, MODULE_IMPORT_BASE): Delete.
+ * module.cc: Replace with zero/one
+ * name-lookup.c: Likewise.
+ * decl2.c (no_linkage_error): Likewise.
+ * ptree.c (cxx_print_decl): Likewise.
+
+ Don't equivocate GMF with module
+ gcc/cp/
+ * cp-tree.h (MODULE_NONE, MODULE_PURVIEW): Delete.
+ (MODULE_CURRENT): New.
+ (MODULE_IMPORT_BASE): Reduce.
+ (DECL_MODULE_OWNER): Rename to ...
+ (DECL_MODULE_ORIGIN): ... this.
+ (DECL_MODULE_PURVIEW_P): New.
+ (MODULE_BITS): Reduce.
+ (lang_decl_base::module_purview_p): New bit.
+ (module_may_redeclare): Take decl.
+ * module.cc (MODULE_UNKNOWN_PARTITION): New.
+ (MODULE_LIMIT): Adjust.
+ (slurping::remap_module): Return int.
+ (trees_in::assert_definition): Adjust.
+ (dumper::impl::nested_name): Adjust.
+ (trees_{in,out}::lang_decl_bits): Stream module_purview_p.
+ (trees_out::tree_{namespace,decl,value}): Adjust.
+ (trees_in::tree_node): Adjust.
+ (depset::hash::add_{dependency,binding,specializations}): Adjust.
+ (module_state::check_not_purview): Adjust.
+ (module_state::read_{imports,partitions}): Adjust.
+ (module_state::write_{cluster,namespaces,unnamed}): Adjust.
+ (module_state::read_unnamed): Adjust.
+ (module_state::{write,read}): Adjust.
+ (module_visible_instantiation_path): Adjust.
+ (get_originating_module): Return int.
+ (get_instantiating_module): Adjust.
+ (module_may_redeclare): Reimplement.
+ (set_{instantating,originating}_module): Adjust.
+ (module_state::{do,direct}_import): Adjust.
+ (declare_module, module_preprocess, process_deferred_imports): Adjust.
+ ({init,finish}_module_processing): Adjust.
+ * name-lookup.c (get_fixed_binding_slot): Adjust.
+ (name_lookup::{search_namespace_only,adl_namespace_fns,search_adl):
+ Adjust.
+ (check_module_override, extract_module_binding): Adjust.
+ (note_pending_specializations): Adjust.
+ (get_imported_namespaxe, finish_nonmember_using_decl)
+ (lookup_type_scope_1): Adjust.
+ (add_imported_namespace): Take int.
+ * name-lookup.h ({add,get}_imported_namespace): Module is int.
+ * class.c (build_self_ref): Set instantiating module.
+ * decl.c (duplicate_decls): Adjust.
+ * decl2.c (no_linkage_error): Adjust.
+ * mangle.c (maybe_write_module): Adjust.
+ * pt.c (build_template_decl): Propagate purview flag.
+ (tsubst_template_decl): Likewise.
+ (tsubst_decl): Set instantiating_module as necessary.
+ * ptree.c (cxx_print_decl): Adjust, print purview flag.
+ * rtti.c (tinfo_base_init): Clear purview flag.
+ gcc/testsuite/
+ * g++.dg/modules/*: Update lang dump scans.
+
+2019-10-01 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (set_originating_module): Add friend_p.
+ * decl.c (grokdeclarator): Set it.
+ * module.cc (get_originating_module): Always look through template
+ info.
+ (set_originating_module): Add friend_p. Assert.
+ (set_instantiating_module): Assert.
+
+2019-09-30 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (set_module_owner): Delete.
+ * decl.c (duplicate_decls): Propagate module owner. Set module
+ export for builtins, no need to set owner.
+ * module.cc (set_module_owner): Delete.
+ gcc/testsuite/
+ * g++.dg/modules/isalnum.H: New.
+
+2019-09-27 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r276201.
+
+ gcc/cp/
+ * decl.c (fixup_anonymous_aggr): Partially revert recent change.
+ (grokfndecl): Call set_originating_module before determining
+ specialization.
+ (grokdeclarator): Likewise.
+
+ gcc/cp/
+ * cp-tree.h (set_{originating,instantiating}_module): Declare.
+ * class.c (layout_class_type): Use set_instantiating_module.
+ * pt.c (lookup_template_class_1): Likewise.
+ (tsubst_function_decl, instantiate_template_1): Likewise.
+ (tsubst_friend): Not here.
+ * decl.c (grokfndecl): Use set_originating_module.
+ (grokvardecl,grokdeclarator): Likewise.
+ * name-lookup.c (do_pushtag): Likewise.
+ * friend.c (do_friend): Not here.
+ * module.cc (set_implicit_module_origin): Rename to ...
+ (set_instantiating_module): ... here.
+ (set_originating_module): New.
+ gcc/testsuite/
+ * g++.dg/modules/friend-3.C: New.
+ * g++.dg/modules/friend-4_[ab].C: New.
+
+ gcc/cp/
+ * cp-tree.h (get_module_owner): Delete.
+ (get_instantiating_module_decl, get_instantiating_module): Declare.
+ * module.cc (get_instantiating_module_decl)
+ (get_instantiating_module): New.
+ (dumper::impl::nested_name, trees_out::tree_node)
+ (trees_out::tree_decl, depset::hash::add_specializations)
+ (set_module_owner): Use them.
+ (get_module_owner): Delete.
+
+ gcc/cp/
+ * cp-tree.h (get_declared_module_origin): Delete.
+ (get_originating_module, get_originating_module_decl): Declare.
+ * module.cc (get_originating_module_decl): New.
+ (get_originating_module): New.
+ (module_state::write_cluster, module_visible_instantiation_path): Use
+ get_originating_module.
+ * module.cc (module_state::write_unnamed)
+ (lazy_load_specializations): Use get_originating_module_decl.
+ * error.c (dump_module_suffix): Use get_originating_module.
+ * mangle.c (maybe_write_module): Likewise.
+ * name-lookup.c (init_global_partition): Use
+ get_originating_module.
+ (name_lookup::search_adl): Use get_originating_module_decl.
+ * pt.c (lookup_template_class_1): Propagate DECL_MODULE_EXPORT_P.
+
+2019-09-26 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (DECL_MODULE_OWNER): Restrict to
+ var/fn/type/template/namespace.
+ (MAYBE_DECL_MODULE_EXPORT_P): Delete.
+ ({set,get}_{declared,implicit}_module_origin): Declare.
+ (module_name): Delete and adjust.
+ * modules.cc: Adjust throughout for loss of
+ MAYBE_DECL_MODULE_EXPORT_P. Use get_module_owner more.
+ (fixup_unscoped_enum_owner): Delete.
+ * class.c (layout_class_type): Use set_implicit_module_origin.
+ * decl.c (duplicate_decls): Use get_module_owner.
+ (finish_enum_value_list): Set DECL_MODULE_EXPORT_P directly.
+ * decl2.c (no_linkage_error): Use DECL_MODULE_OWNER.
+ * error.c (dump_module_suffix): Reimplement.
+ * mangle.c (maybe_write_module): Adjust.
+ * name-lookup.c (init_global_partition): Adjust.
+ (name_lookup::search_adl): Owner always has module.
+ (do_pushdecl): Adjust namespace exporting.
+ (do_nonmember_using_decl): Adjust exporting check.
+ * pt.c (build_template_decl): Only propagate module info when
+ needed.
+ (lookup_template_class_1): Use set_implicit_module_origin.
+ (tsubst_friend_function): Propagate to outer template.
+ (tsubst_function_decl): Use set_implicit_module_origin.
+ (tsubst_template_decl): Simplify tsubst if cascade. Propagate
+ inner module info.
+ (instantiate_template_1): Use set_module_owner.
+ * ptree.c (cxx_print_decl): Protect module info display.
+ gcc/testsuite/
+ * g++.dg/modules/friend-1_a.C: Adjust scans.
+ * g++.dg/modules/indirect-[13]_[bc].C: Likewise.
+ * g++.dg/modules/indirect-4_b.C: Likewise.
+ * g++.dg/modules/late-ret-3_a.H: Likewise.
+ * g++.dg/modules/scc-1.C: Likewise.
+ * g++.dg/modules/vmort-2_[abc].C: Likewise.
+
+2019-09-25 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * modules.cc (enum merge_kind): Rearrange.
+ (merge_kind_name): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/inst_-[234]-[ab].C: Adjust scans.
+ * g++.dg/modules/indirect-[234]_b.C: Likewise.
+
+2019-09-24 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * modules.cc (trees_out::tree_decl): RESULT and LABEL decls
+ written by value. Assert only expected things remain by name.
+
+ gcc/cp/
+ * modules.cc (enum tree_tag): Add tt_data_member.
+ (trees_out::tree_decl): Use it for consts and fields.
+ (trees_in::tree_node): Read it.
+ (set_implicit_module_owner): Delete.
+ * name-lookup.c (get_field_ident, lookup_field_ident): New.
+ * name-lookup.h (get_field_ident, lookup_field_ident): Declare.
+ * cp-tree.h (set_implicit_module_owner): Delete.
+ gcc/testsuite/
+ * g++.dg/modules/class-3_[bd].C: Adjust scans.
+ * g++.dg/modules/indirect-1_c.C: Likewise.
+
+2019-09-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset): Add DB_BOTH_SPEC_BIT.
+ (specialization_add): Accept template aliases for !decl_p.
+ (depset::hash::add_specializations): Notice duplicate
+ specialization paths.
+
+2019-09-20 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * decl.c (fixup_anonymous_aggr): Clear LAZY flags, no need to
+ strip out fns.
+ * module.cc (module_state::lazy_load): Distinguish out of order
+ from failure to set slot.
+ * name-lookup.c (get_binding_or_decl): Fixme :(
+ gcc/testsuite/
+ * g++.dg/modules/anon-2{,_[ab]}.[hHC]: New.
+
+2019-09-19 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (enum merge_kind): Add MK_{decl,type}_tmpl_spec,
+ MK_type_partual_spec.
+ (tree_in::tree_value): Process them.
+ (trees_{in,out}::key_mergeable): Stream them.
+ * pt.c (match_mergeable_specialization): Only store if spec !=
+ NULL.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-tpl-merge-[12]{,_[ab].[hHC]: New.
+
+ gcc/cp/
+ * module.cc (slurping::slurping): Init current to mostpos - 1.
+ (module_state::read): Increment slurp->current when done.
+
+ gcc/cp/
+ * module.cc (trees_in::tree_node): Check overrun more.
+
+2019-09-18 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_in::is_matching_decl): Copy
+ DECL_TEMPLATE_INSTANTIATED.
+ gcc/testsuite/
+ * g++.dg/modules/inst-5_[ab].[CH]: New.
+
+ gcc/cp/
+ * module.cc (trees_in::mergeables): Vec of intptr_t.
+ (trees_in::register_mergeable): Return index.
+ (trees_in::unmatched_mergeable): New.
+ (trees_in::get_dupness): Drop last parm. Return DUP_bad as
+ necessary. Adjust callers.
+ (trees_in::tree_value): Call unmatched_mergeable as necessary.
+
+ gcc/cp/
+ * module.cc (trees_in): Delete skip_defns & handling. Add
+ any_deduping field.
+ (trees_in::register_mergeable): Outline.
+ (trees_in::{enum dupness,get_dupness}): New.
+ (trees_in::{enum odrness,get_odrness}): New.
+ (trees_in::lookup_mergeable): Delete.
+ (trees_in::is_existing_mergeable): Delete, use get_dupness.
+ (trees_in::is_skippable_defn): Delete, ise get_odrness.
+ (trees_in::assert_definition): Adjust.
+ (trees_in::read_{function,class,var,enum}_def): Adjust.
+ (topmost_decl): Delete.
+ gcc/testsuite/
+ * g++.dg/modules/part-3_c.C: Adjust scans.
+ * g++.dg/modules/tdef-6_b.C: Adjust scans.
+
+2019-09-17 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_in::is_skippable_defns): Defns always complete
+ incomplete.
+ gcc/testsuite/
+ * g++.dg/modules/merge-3_[ab].[CH]: New.
+
+2019-09-16 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset::DB_TYPE_SPEC_BIT): New.
+ (depset::is_type_spec): New.
+ (enum merge_kind): Replace MK_spec with MK_decl_spec, MK_type_spec.
+ (merge_kind_name): Update.
+ (trees_in::tree_value): Partition MK_spec handling.
+ (trees_{in,out}::key_mergeable): Likewise.
+ (depset::hash::add_specialization): Set DB_TYPE_SPEC_BIT.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-[234]_b.C: Update lang dump scans.
+ * g++.dg/modules/inst-[234]_[ab].C: Update lang dump scans.
+
+ gcc/cp/
+ * module.cc (spec_tuple): Delete type.
+ (specialization_add): Adjust data type.
+ (depset::hash::add_specializations): Drop PARTITIONS parm. Adjust.
+ (module_state::write): Adjust.
+
+ gcc/cp/
+ * cp-tree.h (check_mergeable_specialization): Declare.
+ (match_mergeable_specialization): Add DECL_P parm, drop INSERT_P parm.
+ * module.cc (trees_in::tree_value): Adjust
+ match_mergeable_spcialization calls.
+ (specialization_add): Use check_mergeable_specializatio.
+ * pt.c (check_mergeable_specialization): New.
+ (match_mergeable_specialization): Always insert, reorder parms.
+
+ gcc/cp/
+ * module.cc (enum merge_kind): Add MK_linkage.
+ (merge_kind_name): ... and here.
+ (trees_in::tree_value): Add it.
+ (trees_{in,out}::key_mergeable): Use it.
+ * name-lookup.c (match_mergeable_decl): Don't add anon-enum.
+ gcc/testsuite/
+ * g++.dg/modules/builtin-1_a.C: Adjust scan.
+ * g++.dg/modules/indirect-[234]_b.C: Likewise.
+ * g++.dg/modules/inst-[23]_a.C: Likewise.
+ * g++.dg/modules/tdef-6_[ab].[HC]: New.
+
+2019-09-15 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_in::chained_decls): No need to deal with clones here.
+ (trees_{in::read,out::write}_class_def): Don't chain
+ fields until we know we're the definition.
+
+ Merge trunk r275727.
+
+2019-09-13 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (get_namespace_binding): Fish out global binding,
+ if it's a vector.
+ gcc/testsuite/
+ * g++.dg/modules/binding-2.H: New.
+
+ gcc/cp/
+ * cp-tree.h (MODULE_VECTOR_LAZY_SPEC_P): Use TREE_THIS_VOLATILE.
+ gcc/testsuite/
+ * g++.dg/modules/binding-1_[abc].[HC]: New.
+
+2019-09-12 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.def (UNBOUND_CLASS_TEMPLATE): Correct docs.
+ * cp-tree.h (make_unbound_class_template_raw): Declare.
+ * decl.c (make_unbound_class_template_raw): New, break out of ...
+ (make_unbound_class_template): ... this, call it.
+ * module.cc (trees_out::tree_type): Handle UNBOUND_CLASS_TEMPLATE.
+ (trees_in::tree_node): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-tpl-parm-1_[ab].[HC]: New.
+
+ gcc/cp/
+ * module.cc (trees_out::core_vals): Never write template_decl's
+ type ...
+ (trees_in::tree_value): .. resurrect it here instead.
+
+ gcc/cp/
+ * module.cc: Sort many switch stmts.
+
+2019-09-11 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r275641.
+
+2019-09-09 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r275518
+
+ gcc/cp/
+ * module.cc (enum depset::disc_bits): Delete DB_REACHED_ONCE_BIT.
+ (depset::is_reached_once, depset::clear_mergeable): Delete
+ (trees_in::tree_value): Set template typedef type.
+ (depset::hash::add_dependency): No reached once stuff.
+ (sort_mergeables): Just live with tight clusters.
+ gcc/testsuite/
+ * g++.dg/modules/late-ret-2_a.H: Adjust scans.
+ * g++.dg/modules/late-ret-3_[abc].[CH]: New.
+
+2019-09-06 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (enum depset::disc_bits): Add DB_REACHED_ONCE_BIT.
+ (depset::is_reached_once, depset::clear_mergeable): New.
+ (depset::hash::add_dependency): Set and clear DB_REACHED_ONCE_BIT.
+ (sort_mergeables): Deal with internal entities.
+ (module_state::read_cluster): A voldemort might have been merged.
+ gcc/testsuite/
+ * g++.dg/modules/late-ret-2_[abc].[HC]: New.
+
+ Merge trunk r275458.
+
+2019-09-05 Nathan Sidwell <nathan@acm.org>
+
+ gcc/testsuite/
+ * g++.dg/modules/concept-2_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Stream constraint_info.
+ (trees_{in,out}::tree_value): Stream constrain node.
+ {trees_{in,out}::tpl_header): Stream parm(s) constraints.
+ * pt.c (set_constraints): Don't do spurious lookup.
+ gcc/testsuite/
+ * g++.dg/modules/concept-1_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (module_state::write_location): Check streaming here.
+ Adjust many callers.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Move some node handling
+ into the new switch.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Reorder part 7.
+ * decl.c (cp_tree_node_structure): Alphabetize.
+ gcc/
+ * tree.c (tree_node_structure_for_code): Likewise.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Reorder part 6.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Reorder part 5.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Reorder part 4.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Reorder part 3.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Reorder part 2.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Reorder part 1.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_type): There are no indescribable types.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Redo enum underlying type
+ streaming.
+
+ Merge trunk r275404.
+
+2019-08-30 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::tree_type): Stream ptrmemfuncs at the
+ appropriate point.
+
+ gcc/cp/
+ * module.cc (trees_in::finish{,_type}): Delete. Move into
+ trees_in::tree_value, removing type remapping etc,
+ (trees_out::start): Check not streaming an unexpected type.
+ (trees_{in,out}::core_vals): Pointers are not streamed.
+ (trees_in::tree_value): Move remnants of finish{,_type} here &
+ simplify handling.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_type): Write non-standard integer
+ types here.
+ (trees_in::tree_node): Read them here.
+ (trees_out::tree_value): We never see a naked type.
+ gcc/testsuite/
+ * g++.dg/modules/bfield-2_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::start): Refactor switch.
+ (trees_{in,out}::core_vals): Remove first switch.
+
+ gcc/cp/
+ * module.cc (enum streamed_extensions): New.
+ (module_state::extensions): New.
+ (module_state::write_readme): Adjust.
+ (trees_{in,out}::start): Note or check openmp extension.
+ (module_state::{read,write}_config): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/omp-1_c.C: New.
+ * g++.dg/modules/omp-2_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::start): Deal with OMP_CLAUSE.
+ (trees_{in,out}::core_vals): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/omp-1_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (friend_from_decl_list): Reimplement.
+ (trees_out::tree_decl): When streaming a local template friend
+ reference, make sure we find one.
+
+ gcc/cp/
+ * module.cc (enum tree_tag): Drop tt_mergeable, tt_clone.
+ (trees_out::tree_value): Emit tt_node & kind separately.
+ (trees_in::tree_node): Read tt_node kind explicitly.
+
+2019-08-29 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::tree_decl): VTTs are just vtables.
+ gcc/testsuite/
+ * g++.dg/modules/vtt-1_[abc].C: New.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): We never see
+ TS_CP_ARGUMENT_PACK_SELECT nodes.
+
+ Merge trunk r275034.
+
+2019-08-28 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (struct location_map_info): New.
+ (module_state::prepare_locations): Rename to ...
+ (module_state::prepare_maps): ... here. Return a
+ location_map_info.
+ (module_state::{read,write}_locations): Split to ...
+ (module_state::{read,write}_{ordinary,macro}_maps): ... here. Adjust.
+ (module_state::{read,write}): Split location map streaming.
+ gcc/testsuite/
+ * g++.dg/modules/macro-7_[abc].C: New.
+
+ Merge trunk r274992.
+
+2019-08-27 Nathan Sidwell <nathan@acm.org>
+
+ gcc/c-family/
+ * c.opt (fnote-include-translate): Renamed from finclude-translate.
+ gcc/
+ * doc/invok.texi: Update.
+ gcc/cp/
+ * module.cc (module_translate_include): Tweak.
+
+2019-08-26 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (note_includes): Renamed from inform_includes.
+ (module_translate_include): Emit note, not warning.
+ (init_module_processing, handle_module_option): Adjust.
+ gcc/c-family
+ * c.opt (finclude-translate): Renamed from -Winclude-translate.
+ gcc/
+ * doc/invoke.texi (finclude-translate): Document.
+
+2019-08-25 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_in::finish): Don't clear PENDING_TEMPLATE here.
+ Set IDENTIFIER_VIRTUAL_P if t is a vfunc.
+ (trees_out::core_bools): Write PENDING_TEMPLATE as false.
+ gcc/testsuite/
+ * g++.dg/modules/virt-1_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_decl): Vtables are distinguished by
+ DECL_VIRTUAL_P.
+
+2019-08-23 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r274867.
+
+ gcc/cp/
+ * module.cc (trees_out::core_bools): Don't propagate asm_written
+ for types.
+ (trees_{in,out}::lang_type_bools): Don't stream debug_requested.
+ (trees_in::read_{enum,class}_def): Register for debug.
+ (finish_module_processing): Don't write module when syntax only.
+ gcc/testsuite/
+ * g++.dg/modules/debug-1_[ab].C: New.
+
+2019-08-22 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset::hash::add_dependency): We should never find a
+ redirect.
+ (depset::hash::add_redirect): Rename to ...
+ (depset::hash::add_partial_redirect): ... here. Mark the redirect
+ as unreachable.
+
+ gcc/cp/
+ * module.cc (MOD_SNAME_PFX): Resurrect initial dot.
+ (elf_out::strtab_write): Elide global namespace.
+
+2019-08-21 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_in::assert_definition): Relax already-present
+ assert.
+
+ gcc/cp/
+ * module.cc (finish_module_processing): Protect against null
+ filename.
+
+ gcc/cp/
+ * module.cc (elf_in::release): Reset size too.
+ (enum ct_bind_flags): Correct cbf_wrapped value.
+ (module_state::read_cluster): Usings may be unwrapped.
+
+ gcc/c-family/
+ * c.opt (Winclude-translate*): New family of options.
+ gcc/cp/
+ * module.cc (inform_includes): New var.
+ (module_translate_include): Inform of translations.
+ (init_module_processing): Canonicalize inform list.
+ (handle_module_option): Process inform options.
+
+ gcc/cp/
+ * module.cc (set_cmi_repo): NULL means default init.
+ (module_mapper::module_mapper): Default init repo.
+ (module_mapper::translate_include): Add LEN parm, create STRING.
+ (canonicalize_header_name): Correctly prepend './'.
+ gcc/testsuite/
+ * g++.dg/modules/ben-1.map: Add $root.
+ * g++.dg/modules/gc-2.map: Add $root.
+ * g++.dg/modules/map-1.map: Add $root.
+ * g++.dg/modules/map-1_b.map: Add $root.
+
+2019-08-20 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_state::module_state): Header must be
+ .-relative if not absolute.
+ (get_module): Validate module name more.
+ gcc/testsuite/
+ * g++.dg/modules/map-2.{C,map}: New.
+
+ Merge trunk r274747.
+
+ Merge trunk r273943 (Jason's TEMPLATE_INFO changes).
+
+ Merge trunk r273906 (Martin's function_decl.decl_type changes).
+
+2019-08-19 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r273771.
+
+2019-08-04 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (get_cxx_dialect_name): Make extern.
+ * name-lookup.h (get_cxx_dialect_name): Declare.
+ * module.cc (module_state_config::get_opts): Just determine C++
+ dialect.
+ gcc/testsuite/
+ * g++.dg/modules/flag-1_[ab].C: Adjust.
+
+2019-08-01 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_state::deferred_macro): Emit warning if at end
+ of TU.
+ (finish_module_processing): Adjust.
+ gcc/
+ * doc/invoke.texi (fforce-module-macros): Replace documentation
+ with ...
+ (Winvalid-imported-macros): ... this.
+ gcc/c-family/
+ * c.opt (fforce-module-macros): Replace with ...
+ (Winvalid-imported-macros): ... this.
+ gcc/testsuite/
+ * g++.dg/modules/macro-4_[abcdeg].C: Update.
+ * g++.dg/modules/macro-5_c.C: Update.
+
+2019-07-28 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (node_template_info): Enums may be function-local.
+ gcc/testsuite/
+ * g++.dg/modules/enum-7.C: New.
+
+2019-07-27 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * doc/invoke.texi (C++ Modules): Update.
+
+2019-07-24 Nathan Sidwell <nathan@acm.org>
+
+ Default to gcm.cache directory.
+ gcc/cp/
+ * cxx-mapper.c (flag_root): Change default.
+ (module2bmi): Headers have same suffix.
+ (client::action): Prefix root dir to look for bmi.
+ gcc/
+ * doc/invoke.texi (C++ Module Mapper): Update docs.
+ gcc/testsuite/
+ * g++.dg/modules/dep-1_[ab].C: Update scans.
+ * g++.dg/modules/dep-2.C: Update scans.
+ * g++.dg/modules/modules.exp (DEFAULT_REPO): New.
+ (dg-module-cmi): Adjust.
+
+ Drop import alias detection, via controlling macros.
+ gcc/cp/
+ * module.cc (bytes_in::no_more): Delete.
+ (module_state::{read,write}_config): Drop controlling macro.
+ (module_state::write_readme): Likewise.
+ (module_state::read): Drop alias return.
+ (module_state::slurp): Delete. Replace all uses with field
+ access.
+ (module_state::resolve_alias): Delete.
+ (module_state::is_alias): Delete.
+ (module_state::read_imports): Drop alias detection.
+ gcc/testsuite/
+ * g++.dg/modules/alias-[12]_b.C: Drop controlling macro scans.
+ * g++.dg/modules/macro-2_c.H: Likewise.
+ * g++.dg/modules/macro-3_[abc].[CH]: Likewise.
+ * g++.dg/modules/stdio-1_a.H: Likewise.
+ * g++.dg/modules/alias-3_*: Delete.
+ * g++.dg/modules/sys/alias-3_a.H: Delete.
+
+ Merge trunk r273764.
+
+ gcc/testsuite/
+ * g++.dg/modules/alias-2_a.H: Add dg-module-header.
+ * g++.dg/modules/alias-3_a.H: Likewise.
+ * g++.dg/modules/mod-decl-0-2a.C: std=c++2a.
+ * g++.dg/modules/mod-decl-0.C: std=c++17.
+ * g++.dg/modules/modules.exp: Add dg-module-header, iterate over
+ different c++ stds.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_decl): Cope with using decls in the
+ binding list.
+ gcc/testsuite/
+ * g++.dg/modules/enum-6_[ab].[HC]: New.
+
+ gcc/cp/
+ * module.cc (enum merge_kind): Add MK_enum.
+ (trees_out::tree_decl): Deal with anon enums.
+ (trees_in::tree_value): Adjust for MK_enum.
+ (trees_{in,out}::tree_node): Adjust tt_enum_int streaming.
+ (trees_{in,out}::key_mergeable): Add MK_enum key.
+ (depset::hash::add_dependency): Enum values are like using decls.
+ (depset::hash::add_binding): Likewise.
+ (depset_cmp): Reorder for new requirements.
+ (enum ct_bind_flags): Add cbf_wrapped.
+ (sort_mergeables): Presume sorted by depset_cmp.
+ (module_state::{read,write}_cluster): Adjust.
+ * name-lookup.c (check_mergeable_decl): Deal with anon-enum
+ proxies.
+ gcc/testsuite/
+ * g++.dg/modules/enum-1_a.C: Adjust scan.
+
+2019-07-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset): Rename MARKED to SPECIAL, update all users.
+
+2019-07-22 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * parser.c (cp_parser_class_specifier_1): Fixup a template's type
+ with a late exception specifier.
+ gcc/testsuite/
+ * g++.dg/modules/except-1.C: New.
+
+2019-07-22 Boris Kolpackov <boris@codesynthesis.com>
+
+ gcc/cp/
+ * Make-lang.in (MODULE_REVISION): Add git rev, if it's git.
+
+2019-07-16 Nathan Sidwell <nathan@acm.org>r
+
+ gcc/cp/
+ * module.cc (module_state::read_{bindings,namespaces}): Use plain
+ vec
+ (module_state::read): Adjust.
+ (module_state::write_macros): Use plain vec.
+ (module_state::deferred_macro): Use plain vec.
+
+ gcc/cp/
+ * module.cc (depset::hash::add_writables): Use plain vec.
+ (typedef spec_tuple): Use plain vec.
+ (depset::hash::add_speciailizations): Correctly init vec.
+ (module_state::{read,write}_namespaces): Use plain vec.
+ (module_state::{read,write}): Adjust.
+
+ Fix it better.
+ gcc/cp/
+ * mangle.c (mangle_module_substitution): Offset overflow.
+ gcc/testsuite/
+ * g++.dg/modules/sym-subst-3_[ab].C: Fix
+ * g++.dg/modules/sym-subst-[456].C: New.
+
+ Fix module backref subst.
+ gcc/cp/
+ * cp-tree.h (mangle_substitution): Rename to ...
+ (mangle_module_substitution): ... here. Drop genecity.
+ * mangle.c: Likewise. Fix mangling.
+ * module.cc (module_state::mangle): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/sym-subst-1.C: Adjust scan.
+ * g++.dg/modules/sym-subst-2_[ab].C: Adjust scan.
+ * g++.dg/modules/sym-subst-3_[ab].C: New.
+
+2019-07-09 Nathan Sidwell <nathan@acm.org>
+
+ gcc/c-family/
+ * c-opts.c (c_common_handle_option): Remove {user,system}_search.
+ * c.opt ({user,system}-search): Delete.
+ (fmodule-header): Undeprecate.
+ gcc/cp/
+ * module.cc (module_state_config::get_opts): Drop
+ OPT_fmodule_header_.
+ (handle_module_option): Handle fmodule-header=.
+ gcc/
+ * gcc.c (cpp_unique_options): Drop {user,system}-search.
+
+2019-07-08 Nathan Sidwell <nathan@acm.org>
+
+ gcc/c-family/
+ * c-common.c (try_to_locate_new_include): Use strcmp and ignore
+ zero-line maps.
+ gcc/cp/
+ * module.cc (finish_module_processing): Inhibit module stats if
+ not moduling.
+
+2019-07-07 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r273185.
+
+ libcpp/
+ * files.c (cpp_find_failed): Replace with ...
+ (cpp_found_name): ... this.
+ (_cpp_stack_file): Check main_search option.
+ * include/cpplib.h (cpp_options): Add main_search.
+ * internal.h (cpp_find_failed): Replace with ...
+ (cpp_found_name): ... this.
+ * init.c (cpp_read_main_file): Examine main_search option.
+ gcc/c-family/
+ * c-opts.c (c_common_handle_options): Add OPT_{user,system}_search.
+ * c.opt (user-search, system-search): New.
+ gcc/
+ * gcc.c (cpp_unique_options): Add {user,system}-search.
+
+ gcc/
+ * module.cc (module_state::write_cluster): Return cluster size.
+ (avalable_clusters, loaded_clusters): New static vars.
+ (module_state::{read,write}): Adjust.
+ (finish_module_processing): Dump more stats.
+ gcc/testsuite/
+ * g++.dg/module/part-3_c.C: Adjust scan.
+
+ gcc/
+ * timevar.def (TV_MODULE_{IMPORT,EXPORT,MAPPER}): Define.
+ gcc/cp/
+ * module.cc: Include timvar.h. Sprinkle timevar accounting throughout.
+
+2019-07-05 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r273146.
+
+ Victory!
+ gcc/cp/
+ * decl2.c (c_parse_final_cleanups): Don't do static init things
+ for a header module.
+ * module.cc (trees_in::start): Drop unused second parm.
+ (module_state::{read,write}_inits): New.
+ (trees_out::core_bools): Restrict static->extern hack.
+ (module_state::{read,write}_config): Note inits.
+ (module_state::{read,write}): Stream inits.
+ gcc/testsuite/
+ * g++.dg/modules/iostream-1_b.C: Remove ioinit workaround.
+
+ gcc/testsuite/
+ * g++.dg/modules/iostream-1_[ab].[HC]: New.
+
+ gcc/cp/
+ * module.cc (module_state_config::get_opts): Drop -g* switches.
+
+ gcc/cp/
+ * cp-tree.h (get_tinfo_decl_direct): Declare.
+ * module.cc (trees_out::tree_decl): Stream more tinfo_var info.
+ (trees_in::tree_value): Use get_tinfo_decl_direct for tinfo vars.
+ * rtti.c (get_tinfo_decl_direct): Break out of ...
+ (get_tinfo_decl): ... here. Call it.
+
+2019-07-04 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_state::read_cluster): finalize_function may
+ not GC.
+
+ gcc/cp/
+ * module.cc (enum cluster_tag): Add ct_defn.
+ (enum ct_decl_flags): Rmove cdf_has_definition.
+ (module_state::{read,write}_cluster): Stream definitions after
+ declarations..
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::key_mergeable): Always stream context.
+ gcc/testsuite/
+ * g++.dg/modules/merge-1_[ab].[HC]: New.
+
+ gcc/cp/
+ * module.cc (trees_out::key_mergeable): Return merge kind.
+ (trees_out::tree_value): Note key writing.
+ (trees_in::tree_value): Adjust key dump.
+ gcc/testsuite/
+` * g++.dg/modules/builtin-1_b.C: Adjust scans.
+ * g++.dg/modules/inst-[1234]_b.C: Likewise.
+ * g++.dg/modules/part-3_[cd].C: Likewise.
+
+2019-07-03 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::tree_type): Add TYPEOF_TYPE, UNDERLYING_TYPE.
+ (trees_in::tree_node): Likewise.
+
+ gcc/cp/
+ * module.cc (struct unnamed_entity): GTY it.
+ (unnamed_map): Not a GTY object.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::fn_parms): Rename to ...
+ (trees_{in,out}::fn_arg_types): ... this.
+ (trees_{in,out}::fn_parms_{init,fini}): New.
+ (trees_{in,out}::tree_value): Call fn_parms_fini.
+ (trees_{in,out}::key_mergeable): Call fn_parms_init.
+ gcc/testsuite/
+ * g++.dg/modules/late-ret-1.H: New.
+ * g++.dg/modules/scc-1.C: Adjust scan.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_type): Add DECLTYPE_TYPE.
+ (trees_in::tree_node): Likewise.
+
+2019-07-02 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_in::core_vals): Protect binfo base reading.
+ (module_state::{read,write}_cluster): Insert types for horcrucifexes.
+ gcc/testsuite/
+ * g++.dg/modules/horcrux-1_[ab].C: New.
+
+ gcc/testsuite/
+ Rename bmi->cmi everywhere.
+
+ gcc/cp/
+ * cp-tree.h (module_has_cmi_p): Renamed.
+ * name-lookup.c (do_nonmember_using_decl): Adjust.
+ * module.cc (cmi_*): Renamed. Adjust all users.
+
+ gcc/cp/
+ * module.cc (trees_out::fn_parms): Don't use canonical type any
+ more.
+ gcc/testsuite/
+ * g++.dg/modules/merge-1_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_decl): Write types for typedefs.
+ (trees_in::tree_node): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/tdef-5_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_type): Add pack types.
+ (trees_{in,out}::tree_value): Tweak type streaming flags
+ (trees_in::tree_node): Add pack types.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_type): Detect bound template template
+ parm.
+ (trees_{in,out}::tree_value): Stream type on any TYPE_DECL that
+ its TYPE_STUB_DECL.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_type): Add COMPLEX and VECTOR types.
+ (trees_in::tree_node): ... and here.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_decl): Deal with tinfo vars and
+ vtables here ...
+ (trees_out::tree_node): ... not here.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_decl): Deal with tinfo type_decls
+ here.
+ (trees_out::tree_type): Dectect tinfo types here ...
+ (trees_out::tree_node): ... not here.
+ (trees_in::tree_node): Add tinfo type too.
+
+2019-07-01 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::tree_decl): Fix dump typo.
+ (trees_in::tree_value): Likewise.
+ (module_state::read_cluster): Show end.
+
+ gcc/cp/
+ * module.cc (module_state::write): Don't stream env.
+
+ gcc/cp/
+ * module.cc (trees_in:::read_function_def): Push the template for
+ post processing.
+ (module_state::read_cluster): Deal with abstract post processing.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-friend-7_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (depset::hash::add_binding): Return added flag. Deal
+ with orphaned using decls.
+ (depset::hash::add_writables): Return added flag.
+ gcc/testsuite/
+ * g++.dg/modules/using-5_[ab].C: New.
+
+ Clones
+ gcc/cp/
+ * module.cc (enum tree_tag): Add tt_clone_ref.
+ (get_clone_target): Replace get_clone_orig.
+ (FOR_EVERY_CLONE): New.
+ (trees_out::mark_mergeable): Add tag parm. Adjust.
+ (trees_in::chained_decls): Cope with already-linked clones.
+ (trees_out::tree_decl): Support clone walking.
+ (trees_{in,out}::tree_value): Likewise.
+ (trees_in::tree_node): Support tt_clone_ref.
+ (trees_{in,out}::key_mergeable): Key clones.
+ (trees_out::{mark,write}_definition): No clones here.
+ (trees_in::read_definition): Likewise.
+ (depset::hash::add_clone): Reimplement.
+ (module_state::write_cluster): Deal with clones.
+ gcc/testsuite/
+ * g++.dg/modules/clone-1_[ab].C: New.
+ * g++.dg/modules/friend-1_a.C: Adjust scan.
+ * g++.dg/modules/indirect-[1234]_[bc].C: Likewise.
+ * g++.dg/modules/inst-3_a.C: Likewise.
+
+2019-06-27 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset::entity_kind): Add EK_CLONE.
+ (depset::hash::add_clone): New.
+ (enum walk_kind): Move to global scope.
+ (enum merge_kind): New.
+ (trees_{in,out}::tree_value): Use new enums.
+ (trees_{in,out}::tree_mergeable): Likewise.
+ (get_clone): New.
+ (member_owned_by_class): Clones are never owned.
+ (trees_out::mark_declaration): Walk clones.
+ (trees_in::read_definition): Likewise.
+ (trees_out::write_definition): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/builtin-1_b.C: Adjust dump scans.
+ * g++.dg/modules/inst-1_b.C: Adjust dump scans.
+ * g++.dg/modules/part-3_[cd].C: Adjust dump scans.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Stream abstract_origin.
+
+ gcc/cp/
+ * class.c (build_clone): Neaten and assert.
+ * cp-tree.h (lang_decl_u5.cloned_function): Fix comment.
+ * name-lookup.c (get_lookup_ident): Don't fall off end of overload.
+
+ Add -Mno-modules.
+ gcc/c-family/
+ * c-opts.c (c_common_init_options): Default module deps on.
+ (c_common_handle_option): Handle M{no-}modules.
+ * c.opt (Mmodules, Mno-modules): New options.
+ gcc/
+ * doc/cppopts.texi (Mno-modules): Document it.
+ * doc/invoke.texi: Likewise.
+ * gcc.c (cpp_unique_options): Add it.
+ gcc/testsuite/
+ * g++.dg/modules/dep-3.C: New.
+ libcpp/
+ * include/cpplib.h (struct cpp_options): Add dep.modules.
+ * include/mkdeps.h: Include cpplib.h
+ (deps_write): Take a cpp_reader.
+ * init.c (cpp_finish): Adjust deps_write call.
+ * mkdeps.c: Include internal.h
+ (make_write): Adjust. Conditionally inhibit module output.
+ (deps_write): Adjust.
+
+2019-06-26 Nathan Sidwell <nathan@acm.org>
+
+ Don't elide primary from partition names.
+ gcc/cp/
+ * cp-tree.h (module_name): Drop maybe_primary parm.
+ * modules (module_state::get_flatname): Just get the flatname.
+ (get_primary): New.
+ (get_module): Expect fully qualified name. Drop parent arg.
+ Adjust callers.
+ (module_stae:set_flatname): Create fully qualified name.
+ (module_state::read_{imports,partitions}): Check partitions have
+ expected primary.
+ (module_state::{read,write}_config): Adjust.
+ (module_state::do_import, module_preprocess)
+ (finish_module_procesing): Adjust deps_add_module calls.
+ * name-lookup.c (make_namespace): Adjust anon namespace name
+ creation.
+ * ptree.c (cxx_print_decl): Adjust module_name call.
+ gcc/testsuite/
+ * g++.dg/modules/part-2_d.c: Adjust regexp.
+ * g++.dg/modules/part-3_c.c: Adjust scans.
+ libcpp/
+ * include/mkdeps.h (deps_add_module): Drop primary arg.
+ * mkdeps.c (deps_add_module): Drop primary arg.
+
+ Merge trunk r272714.
+
+ gcc/cp/
+ * decl.c (duplicate_decls): Non-modules are ok for builtins.
+ gcc/testsuite/
+ * g++.dg/modules/builtin-2.C: New.
+
+ gcc/cp/
+ * module.cc (depset::hash::add_mergeable_horcrux): Add redirect as
+ necessary.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-spec-7.C: New.
+
+ gcc/cp/
+ * module.cc (depset::hash::add_redirect): New.
+ (depset::hash::add_specialization): Use it.
+ (depset::hash::add_mergeable): Use it.
+ (depset::hash::add_dependency): Never add a redirect here.
+
+ gcc/cp/
+ * module.cc (finish_module_processing): Adjust failed to write error.
+ gcc/testsuite/
+ * g++.dg/modules/internal-1.C: Adjust.
+
+ gcc/cp/
+ * module.cc (depset::entity_kind): Add EK_REDIRECT.
+ (tree_out::tree_decl): Cope with redirects.
+ (depset::hash::add_dependency): Likewise.
+ (depset::hash::add_specialization): Add redirect for partials.
+ (depset::hash::add_mergeable): Likewise.
+ (module_state::write_cluster): Assert no redirects here.
+ (module_state::write): Check redirects here.
+ gcc/testsuite/
+ * g++.dg/modules/global-3_a.C: Disable.
+ * g++.dg/modules/tpl-spec-6_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::note_definition): Rename to ...
+ (trees_{in,out}::assert_definition): ... here. Update callers.
+
+ gcc/cp/
+ * cp-tree.h (match_mergeable_specialization): Add insert parm.
+ * pt.c (match_mergeable_specialization): Add insert parm.
+ * module.cc (depset::entity_kind): Add EK_MAYBE_SPEC.
+ (depset::disc_bits): Delete DB_FRIEND_BIT, ADD DB_PSEUDO_SPEC_BIT.
+ (depset::is_friend): Delete.
+ (depset::is_pseudo_spec): Add.
+ (trees_out::tree_decl): Some specializations are findable by name.
+ (trees_in::tree_value): Mergeables have an explicit kind.
+ (trees_in::tree_node): Protect more.
+ (trees_{in,out{::key_mergeable): Explicitly encode key kind.
+ (depset::hash::add_dependency): Support EK_MAYBE_SPEC.
+ (specialization_add): Add some consistency checking.
+ (depset::hash::add_specialization): Specialization might be an
+ import.
+ (depset::hash::add_mergeable_horcrux): New.
+ (sort_mergeables): Add horcrux deps.
+ (module_state::write_cluster): Don't mark cdf_is_friend.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-3_[ab].C: Reenable. Adjust scans.
+
+2019-06-25 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_state:note_cmi_name): New.
+ (module_state::read_config): Use it.
+ (module_state::check_read): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/atom-decl-3.C: Adjust diags.
+ * g++.dg/modules/atom-preamble-3.C: Likewise.
+ * g++.dg/modules/bad-mapper-1.C: Likewise.
+ * g++.dg/modules/bad-mapper-3.C: Likewise.
+ * g++.dg/modules/circ-1_c.C: Likewise.
+ * g++.dg/modules/flag-1_b.C: Likewise.
+ * g++.dg/modules/import-2.C: Likewise.
+ * g++.dg/modules/mod-stamp-1_d.C: Likewise.
+ * g++.dg/modules/p0713-3.C: Likewise.
+
+2019-06-24 Nathan Sidwell <nathan@acm.org>
+
+ Revert late specialization insertion.
+ gcc/cp
+ * module.cc (depset): Delete DB_OOT_SPEC_BIT.
+ (depset::~depset): Remove deletion.
+ (trees_out::key_mergeable): Assert specialization is marked.
+ (depset::hash::add_dependency): Assert no late specializations.
+ gcc/testsuite
+ * g++.dg/modules/modules.exp: Expand dg-module-do capabilities.
+ * g++.dg/modules/indirect-3_a.C: Disable.
+
+2019-06-23 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r272583.
+
+2019-06-21 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * modules.cc (depset): Add DB_OOT_SPEC_BIT.
+ (depset::~depset): Free the spec entry if we own it.
+ (trees_{in,out}::note_definition): Check template result isn't
+ there.
+ (depset::hash::add_dependency): Correctly insert discovered
+ non-member template instantiations.
+
+ gcc/cp/
+ * modules.cc (note_defs): New checking hash table.
+ (trees_{in,out}::note_definition): New checkers
+ (trees_in::read_{function,class,var,enum}_def): Add maybe_template
+ arg, use it. Note definitions.
+ (member_owned_by_class): New, extracted from ...
+ (trees_out::mark_class_member): ... here. Call it.
+ (trees_out::write_class_def): Only write the owned definitions.
+ (trees_out::write_definition): Note definition.
+ (trees_in::read_definition): Pass maybe_template to readers.
+ (module_state::write): Reset note_defs hash.
+ (init_module_processing): Init it.
+ (finish_module_processing): Delete it.
+
+ gcc/cp/
+ * modules.cc (dumper::operator ()): Print indentation level.
+ gcc/testsuite/
+ * g++.dg/modules/scc-1.C: Adjust dump scan.
+
+ gcc/cp/
+ * modules.cc (node_template_info): Enums are awkwarder.
+ gcc/testsuite/
+ * g++.dg/modules/enum-4_[ab].C: New.
+
+2019-06-20 Nathan Sidwell <nathan@acm.org>
+
+ Bitfields.
+ gcc/cp/
+ * module.cc (tree_out::mark_class_def): Mark bitfield's
+ representative field.
+ gcc/testsuite/
+ * g++.dg/modules/bfield-1_[ab].C: New.
+
+ Thunks.
+ gcc/cp/
+ * module.cc (enum tree_tag): Add tt_thunk.
+ (trees_out::tree_decl): Emit it.
+ (trees_out::tree_value): Assert we don't accidentally meet a
+ thunk.
+ (trees_in::tree_node): Read it.
+ (trees_out::{mark,write}_class_def): Emit thunks by value.
+ (trees_in::read_class_def): Install thunks.
+ gcc/testsuite/
+ * g++.dg/modules/thunk-1_[ab].C: New.
+
+ gcc/cp/
+ * parser.c (cp_lexer_tokenize): Skip pragmas.
+ * lex.c (module_preprocess_token): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/pragma-1_[ab].[HC]: New.
+ * g++.dg/modules/tname-spec-1_b.C: Move include earlier.
+
+ Deconstruct types.
+ gcc/cp/
+ * module.cc (enum tree_tag): Add tt_typename_decl,
+ tt_derived_type, tt_variant_type.
+ (trees_out::tree_decl): Stream typename types.
+ (trees_out::tree_type): Emit tt_{derived,variant}_type records.
+ (trees_in::tree_node): Add tt_typename_decl, tt_derived_type,
+ tt_variant_type handling.
+ gcc/testsuite/
+ * g++.dg/modules/class-3_b.C: Adjust dump scan.
+ * g++.dg/modules/tname-spec-1_[ab].[HC]: New.
+ * g++.dg/modules/typename-1_[ab].C: New.
+
+2019-06-19 Nathan Sidwell <nathan@acm.org>
+
+ Stream mergeables inline.
+ gcc/cp/
+ * module.cc (depset): Add DB_MERGEABLE_BIT.
+ (depset::is_mergeable): New.
+ (depset::hash::set_for_mergeable): Delete.
+ (trees_{in,out}::tree_mergeable): Delete.
+ (tress_{in,out}::key_mergeable): New.
+ (trees_out::tags): New enum.
+ (trees_out::mark_{mergeable,merged}): New.
+ (trees_out::reserve_mergeable,unset_for_mergeable): Delete.
+ (trees_out::{insert,ref_node}): Adjust.
+ (trees_out::core_vals): Don't stream tpl-tpl-parm contexts.
+ (trees_out::tree_decl): tpl-tpl-parms not found by name.
+ (trees_{in,out}::tree_value): Stream merging info inline.
+ (trees_{in,out}::tpl_header): Take template, not parms.
+ (trees_out::mark_declaration): Mark the template parms.
+ (depset::hash::find_dependencies): Adjust mergeable walk.
+ (depset::hash::add_mergeable): Adjust.
+ (module_state::sort_mergeables): Replace with ...
+ (sort_mergeables): ... this.
+ (enum cluster_tag): Delete ct_mergeable.
+ (module_state::write_cluster): Determine mergable ordering
+ earlier. Don't write a mergeable table.
+ (module_state::read_cluster): No mergeables to deal with here.
+ (module_state::write): Move cluster member dumping to write_cluster.
+ * name-lookup.h (match_mergeable_decl): Drop tpl_args parm.
+ * name-lookup.c (check_mergeable_decl): Likewise. Update callers.
+ gcc/testsuite/
+ * g++.dg/modules/builtin-1_a.C: Adjust dump scans.
+ * g++.dg/modules/friend-1_a.C: Likewise.
+ * g++.dg/modules/indirect-[234]_[bc].C: Likewise.
+ * g++.dg/modules/inst-[23]_[ab].C: Likewise.
+ * g++.dg/modules/part-3_[cd].C: Likewise.
+ * g++.dg/modules/scc-1.C: Likewise.
+ * g++.dg/modules/tpl-friend-[12]_a.C: Likewise.
+ * g++.dg/modules/tpl-spec-[12345]_[ab].C: Likewise.
+ * g++.dg/modules/vmort-2_b.C: Likewise.
+
+2019-06-18 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r272419.
+
+ gcc/cp/
+ * module.cc (specialization_cmp): Deal with more equivalencies.
+ (depset_cmp): New, cloned and adjusted from cluster_cmp.
+ (depset::hash::connect): Use it.
+
+2019-06-17 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::fn_parms): Stream canonical type.
+ (depset::hash::add_dependency): Adjust static inline check.
+ gcc/testsuite/
+ * g++.dg/modules/mutual-friend.ii: New.
+
+2019-06-14 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset::hash::add_dependency): Don't register
+ internal entities when in a header module.
+ (depset::hash::add_binding): Add internal entities in header modules.
+ gcc/testsuite/
+ * g++.dg/modules/stat-tpl-1_a.H: New.
+
+ gcc/cp/
+ * module.cc (depset::hash::add_dependency): Inhibit internal
+ linkage setting on functions.
+ (cluster_cmp): We can meet matching using decls.
+
+ gcc/cp/
+ * module.cc (depset::hash::add_dependency): Unnamed elaborated
+ types have no linkage.
+ gcc/testsuite/
+ * g++.dg/modules/enum-5_[ab].[HC]: New.
+
+ gcc/cp/
+ * module.cc (module_state::{read,write}_cluster): Check stat hack
+ is for implicit typedefs.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_type): Simplify if-tree.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Stream original_type of type of
+ typedefs, not their type.
+ (trees_out::tree_type): Stream type_name of typedefs.
+ (trees_out::tree_value): Insert the type of a typedef.
+ (trees_in::tree_value): Reconstruct the type of a typedef.
+ gcc/testsuite/
+ * g++.dg/modules/tdef-4_[abc].C: New.
+ * g++.dg/modules/class-3_b.C: Adjust scan.
+
+ gcc/cp/
+ * module.cc (binding_cmp): There can be an implicit and
+ non-implicit type_decl.
+ * name-lookup.c (check_mergeable_decl): Check implicitness of
+ type_decl.
+
+2019-06-13 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset::hash::add_specializations): Partial
+ instantiations need their template.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-tpl-mem-1_[ab].C: New.
+
+2019-06-11 Nathan Sidwell <nathan@acm.org>
+
+ Update Revision number
+
+2019-06-11 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r272149.
+
+2019-06-10 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_state::read_location): Don't map
+ UNKNOWN_LOCATION to loc.
+ (module_state::read_locations): Don't rely on that.
+ gcc/testsuite/
+ * g++.dg/modules/predef-2{.h,_[ab].C}: New.
+
+ gcc/cp/
+ * module.cc (loc_spans::init): Correct macro range ordering.
+ (module_state::write_locations): Fix more off-by-ones.
+ gcc/testsuite/
+ * g++.dg/modules/predef-1.[hC]: New.
+
+2019-06-07 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_state::write_env): New.
+ (module_state::write): Call it.
+
+ gcc/cp/
+ * Make-lang.in (REVISION_c): Don't test it.
+ * module.cc (module_state::write_locations): Fix off-by-one thinko.
+
+ gcc/cp/
+ * module.cc (loc_spans::init): Add lmaps parm, separate main from
+ forced header locs.
+ (loc_spans::SPAN_FIRST): New, use it for first span.
+ (loc_spans::SPAN_MAIN): Just after the first span.
+ gcc/testsuite/
+ * g++.dg/modules/macro-5_[abc].[CH]: Adjust.
+
+ gcc/cp/
+ * module.cc (dumper::MACRO): New flag.
+ (module_state::{write,install}_macros): Use it.
+ (module_state::{undef,deferred}_macro): Likewise.
+ gcc/
+ * doc.invoke (-fdump-lang): Document.
+ gcc/testsuite/
+ * g++.dg/modules/macro-[35]_[abc].[CH]: Update.
+
+ gcc/cp/
+ * module.cc (bytes_out::print_time): New.
+ (module_state::write_readme): Dump some environmental data.
+
+2019-06-06 Nathan Sidwell <nathan@acm.org>
+
+ Update Revision number
+
+2019-06-06 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * Make-lang.in (MODULE_REVISION): Read from Changelog.modules.
+
+2019-06-05 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (dumper::MAPPER): New flag. Use it on mapper things.
+ (dumper::push): Only do blank line when starting a new module
+ nest.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_type): We can meet ttps here.
+ (trees_{in,out}::tree_mergeable): Stream skeleton before locating info.
+ gcc/testsuite/
+ * g++.dg/modules/ttp-3_[ab].C: New.
+ * g++.dg/modules/builtin-1_[ab].C: Adjust module scan.
+ * g++.dg/modules/indirect-[234]_b.C: Likewise.
+ * g++.dg/modules/inst-[1234]_[ab].C: Likewise.
+
+ gcc/cp/
+ * module.cc (trees_out::core_vals): Template type parms are their
+ own canonical.
+ (trees_in::finish_type): Never subst a canonical type parm for the type.
+ gcc/testsuite/
+ * g++.dg/modules/ttp-2_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (global_tree_arys): Add c_global_trees.
+ gcc/c-family/
+ * c-common.h (enum c_tree_index): Add CTI_MODULE_HWM, move voltale
+ entries below it.
+
+ Merge trunk r271953.
+
+ gcc/
+ * tree-core.h (enum tree_index): Add TI_MODULE_HWM.
+ gcc/cp/
+ * cp-tree.h (enum cp_tree_index): Add CPTI_MODULE_HWM, move
+ volatile CPTI's below it.
+ (CPTI_STD_IDENTIFIER, std_identifier): Delete.
+ (DECL_NAMESPACE_STD): Simplify.
+ * decl.c (initialize_predefined_identifiers): Drop std_identifier.
+ (cxx_init_decl_processing): Adjust std_node creation. Use push/pop
+ nested namespace for std.
+ (cxx_builtin_function, cxx_builtin_function_ext_scope): Use
+ push/pop nested namespace for std.
+ * except.c (init_exception_processing): Likewise.
+ * rtti (init_rtti_processing): Likewise.
+ * module.cc (global_tree_arys): Restrict C & C++ trees.
+ * name-lookup.c (push_namespace): Set location if it was a
+ builtin.
+ gcc/testsuite/
+ * g++.dg/modules/std-1_[ab].C: New.
+
+2019-06-04 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * class.c (maybe_add_class_template_decl): Mark (some) local
+ templates.
+ * module.cc (friend_from_decl_list): Some friends are overloads.
+ (trees_{in,out}::core_vals): Stream TREE_VEC CHAIN.
+ (trees_out::mark_class_def): Directly mark friend decls.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-friend-6_[ab].C: New.
+
+ gcc/testsuite/
+ * g++.dg/modules/tpl-friend-5_[ab].C: New.
+
+ gcc/cp/
+ * name-lookup.c (lookup_type_scope_1): Look in imported slots too.
+ gcc/testsuite/
+ * g++.dg/modules/class-8_[ab].C: New.
+
+ gcc/cp/
+ * name-lookup.c (lookup_type_scope_1): Reimplement, handle local
+ and namespace scopes separately.
+
+2019-06-03 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (friend_from_decl_list): New.
+ (trees_out::{tree_decl,{write,mark}_class_def}): Use it.
+ (trees_in::{tree_node,read_class_def}): Likewise.
+
+ Template friends of templates.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-tpl-friend-1_[ab].C: New.
+
+ Non-template friends of templates.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-friend-4_[ab].C: New.
+
+ Non-template friends of templates.
+ gcc/cp/
+ * module.cc (has_definition): Use DECL_SAVED_TREE.
+ (trees_{in,out}::{read,write}_class_def): Stream definitions of
+ local friends.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-friend-3_[ab].C: New.
+
+ Merge trunk r271874.
+
+ Non-template friends of templates.
+ gcc/cp/
+ * module.cc (depset::disc_bits): Add DB_FRIEND.
+ (depset::is_friend): New.
+ (enum tree_tag): Add tt_friend_template.
+ (trees_out): Add section field, init it.
+ (trees_out::tree_decl): Deal with template friends. Assert lazy
+ ordering.
+ (trees_in::tree_node): Add tt_friend_template support.
+ (trees_{in,out}::{read,write,mark}_class_def): Deal with friend
+ templates.
+ (depset::hash::add_dependency): Notice friend templates.
+ (depset::hash::add_specializations): Add non-specializations.
+ (depset::hash::find_dependencies): Specializations depend on their
+ template & args.
+ (enum ct_decl_flags): Add cdf_is_friend.
+ (module_state::write_cluster): Set it.
+ (module_state::write): Add specializations before bindings.
+ Expand cluster dump.
+ * pt.c (push_template_decl_real): Friend template's DECL_CHAIN
+ points at the befriending class.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-friend-2_[ab].C: New.
+ * g++.dg/modules/tpl-friend-1_a.C: Adjust scans.
+
+2019-05-31 Nathan Sidwell <nathan@acm.org>
+
+ Non-template friends of templates.
+ gcc/cp/
+ * module.cc (trees_{in,out}::{read,write}_class_def): Stream
+ friend lists and decl lists specially.
+ (trees_out::mark_class_def): Mark local friend decls.
+ (depset::hash::add_specializations): Don't add non-specializations
+ that are in the table.
+ * pt.c (push_template_decl_real): Mark non-pushed friend templates.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-friend-1_[ab].C: New.
+
+2019-05-29 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * decl.c (duplicate_decls): Remove duplicate assert.
+ * pt.c (build_template_decl): Set RESULT & TYPE of the template
+ here ...
+ (process_partial_specialization): ... not here ...
+ (add_inherited_template_parms): ... nor here ...
+ (push_template_decl_Real): ... nor here. Refactor.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Document atomicity.
+ gcc/fortran/
+ * cpp.c (gfc_cpp_add_dep, gfc_cpp_add_target, gfc_cpp_init):
+ Rename mrules to mkdeps.
+
+ gcc/cp/
+ * module.cc (maybe_add_bmi_prefix): Replace FORCE with LEN_P.
+ Set it.
+ (create_dirs): Input is guarantueed unique.
+ (module_state::check_read): Show full BMI filename in errors.
+ (finish_module_processing): Likewise. Rename output atomically.
+ gcc/testsuite/
+ * g++.dg/modules/atom-decl-3.C: Adjust diagnostics.
+ * g++.dg/modules/atom-preamble-3.C: Likewise.
+ * g++.dg/modules/bad-mapper-[13].C: Likewise.
+ * g++.dg/modules/circ-1_c.C: Likewise.
+ * g++.dg/modules/flag-1_b.C: Likewise.
+ * g++.dg/modules/import-2.C: Likewise.
+ * g++.dg/modules/internal-1.C: Likewise.
+ * g++.dg/modules/mod-stamp-1_d.C: Likewise.
+ * g++.dg/modules/p0713-3.C: Likewise.
+
+2019-05-28 Nathan Sidwell <nathan@acm.org>
+
+ * decl.c (duplicate_decls): Assert a template newdecl has no
+ specializations.
+
+ Revert inadvertent commits.
+ gcc/cp/
+ * pt.c (push_template_decl_real): Here.
+ * decl.c (duplicate_decls): Here.
+
+ Merge trunk r271702.
+
+2019-05-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (loc_spans): Make spans a vec.
+ (module_state::{read,write}_locations): Use vec.
+
+ gcc/cp/
+ * module.cc (trees_in): Replace auto_vec with vec.
+
+ Template template parms, and a bunch of other stuff
+ gcc/cp/
+ * cp-tree.h (DECL_TEMPLATE_INFO): Augment docs.
+ * module.cc (depset::clear_flag_bit): New.
+ (depset::is_unreached): Replace is_implicit_specialization.
+ (depset::is_marked): Replace is_first_dep_repurposed.
+ (dumper::impl::nested_name): Template args may be NULL.
+ (trees_{in,out}::core_vals): Template decl result & args streamed
+ with decl.
+ (trees_out::tree_decl): TTPs by value.
+ (trees_{in,out}::tree_value): Reorder body streaming, stream more
+ template bits.
+ (trees_out::tree_mergeable): Redo specialization tagging.
+ (trees_out::mark_class_def): Only mark decls on decl list.
+ (trees_out::mark_declaration): Simplify.
+ (depset::hash::add_dependency): Deal with reaching unreached.
+ (specialization_add): Grab all instantiations from this TU.
+ (depset::hash::add_specialiazations): Determing is_unreached.
+ (depset::hash::find_dependencies): Iterate until no more unreached
+ reached.
+ (module_state::write_unnamed): Adjust.
+ * pt.c (tsubst_function_decl): Set DECL_MODULE_OWNER.
+ gcc/testsuite/
+ * g++.dg/modules/ttp-1_[ab].C: New.
+ * g++.dg/modules/indirect-[234]_[bc].C: Adjust scans.
+ * g++.dg/modules/inst-[24]_ab.C: Likewise.
+
+ gcc/cp/
+ * module.cc (dumper::impl::nested_name): Cope with TTPs.
+ (depset:hash::connect): Return the vec.
+ (depset::tarjan): Create and return the vec.
+ (module_state::write_{bindings,unnamed}): SCCS are in a vec.
+ (module_state::write): Likewise.
+
+2019-05-22 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset::hash::hash): Create worklist.
+ (depset::tarjan::tarjan): Create stack.
+ (depset::depset): Create deps.
+
+ Stream binfos properly (again).
+ gcc/cp/
+ * module.cc (trees_out::mark_node): Binfos may be marked.
+ (trees_{in,out}::start): Binfos may be streamed.
+ (trees_{in,out}::core_vals): Likewise.
+ (trees_{in,out}::tree_node): Reachable binfos may always be
+ inserted.
+ (trees_{in,out}::{read,write}_binfos): Delete.
+ (trees_out::mark_class_def): Mark the binfo heirarchy.
+ (trees_{in,out}::{read,write}_class_def): Stream binfos here.
+
+2019-05-21 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::mark_declaration): Add do_defn parm, mark
+ definition if set. Adjust callers.
+ (trees_out::mark_definition): Merge into mark_declaration.
+
+ Merge trunk r271478.
+
+ Merge trunk r271467.
+
+2019-05-20 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r271420.
+
+2019-05-17 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r271338.
+
+ gcc/cp/
+ * module.cc (trees_out::mark_class_member): Add do_defn parm.
+ Mark the definition.
+ (trees_out::mark_class_def): Adjust.
+ (depset::hash::find_dependencies, module_state::write_cluster):
+ Use mark_declaration.
+
+ gcc/cp/
+ * module.cc (trees_out::mark_node): Drop OUTERMOST parm. Don't
+ consider templateness.
+ (trees_out::mark_declaration): New.
+ (trees_out::mark_class_member): New.
+ (trees_out::mark_class_def): Use mark_class_member.
+ (depset::hash::find_dependencies): Adjust.
+ (module_state::write_cluster): Likewise.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::tpl_parms): Rename to ...
+ (trees_{in,out}::tpl_headr): ... here. Stream the whole parms.
+ (trees_out::tree_type): Assert no surprising
+ TEMPLATE_TEMPLATE_PARM.
+ (trees_{in,out}::tree_value): Stream template template parms.
+
+2019-05-16 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (dumper::operator ()): Add null check.
+ (trees_out::mark_node): Permit fixed nodes.
+ (trees_out::tree_decl, trees_in::tree_node): More anon.
+ * name-lookup.c (mark_pending_on_decl): Fix field marking thinko.
+ (lookup_by_ident): Lookup anon.
+ (get_lookup_ident): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/anon-1_[abc].C: New.
+
+2019-05-15 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset::DB_HIDDEN_BIT): New, add accessors.
+ (depset::hash::add_binding): Set hidden binding bit.
+ (binding_cmp): Adjust hidden.
+ (enum ct_bind_flags): New.
+ (module_state::{read,write}_cluster): Reimplement binding flag
+ streaming.
+ * name-lookup.c (name_lookup::adl_namespace_fns): Skip hidden.
+ gcc/testsuite/
+ * g++.dg/modules/friend-2_[ab].C: New.
+
+2019-05-14 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_in::tree_value): New, broken out of ...
+ (trees_in::tree_node): ... here. Call it.
+ (trees_{in,out}::lang_type_vals): Don't stream befriending classes.
+ gcc/testsuite/
+ * g++.dg/modules/friend-1_[abc].C: New.
+
+ Cleanup merging, friend streaming.
+ gcc/cp/
+ * module.cc (trees_{in,out}::tree_mergeable): Reimplement.
+ (trees_out::tree_value): Significant adjustment.
+ (trees_in::tree_node): Likewise.
+ (trees_{in,out}::tree_node_specific): Move into ...
+ (trees_{in,out}::tree_node_bools): ... here.
+ (trees_out::mark_mergeable): Delete.
+ (trees_{in,out}::insert): Adjust.
+ (trees_{in,out}::lang_vals): New, broken out of ...
+ (trees_node_vals): ... here. Call them.
+ (trees_out::ref_node): Process mergeable cases.
+ (trees_{in,out}::tpl_parms): Adjust.
+ (trees_{in,out}::{read,write}_class_def): Stream and connect
+ friend lists.
+ (binding_cmp): Order hidden decls.
+ (module_state::write_cluster): Adjust mergeable streaming.
+ (module_State::read_cluster): Hide hidden overloads.
+ * name-lookup.c (extract_module_binding): Don't skip hidden.
+ gcc/testsuite/
+ * g++.dg/modules/builtin-1_a.C: Adjust scans.
+ * g++.dg/modules/class-3_b.C: Likewise.
+ * g++.dg/modules/indirect-[24]_[bc].C: Likewise.
+ * g++.dg/modules/inst-[123]_[bcd].C: Likewise.
+
+2019-05-10 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * decl.c (duplicate_decls): Don't check moduleness on friend decl.
+ * pt.c (tsubst_friend_function): Set module ownership.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::{read,write}_function_def): Serialize
+ FRIEND_CONTEXT.
+ (trees_{in,out}::{read,write}_class_def): Reattach befriending classes.
+
+ gcc/cp/
+ * decl.c (duplicate_decls): Check and adjust anticipated builtin
+ decls.
+ * friend.c (do_friend): Set module ownership.
+ * module.cc (trees_{in,out}::lang_decl_vals): Conditionally stream
+ context and befriending classes.
+ * name-lookup.c (init_global_partition): Header unit uses global
+ slot.
+ * parser.c (cp_parser_template_declaration): Conditionalize export
+ warning.
+
+ Partial specializations!
+ gcc/cp/
+ * module.cc (trees_out::tree_mergeable): Correct finding of
+ general template.
+ (trees_in::tree_mergeable): Recover a merged partial
+ specialization.
+ (depset::hash::add_specializations): Deal with partial
+ specializations.
+ (enum ct_decl_flags): New.
+ (module_state::write_cluster): Set specialization flags.
+ (module_state::read_cluster): Install specializations.
+ (install_specialization): New.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-spec-5_[ab].C: New.
+
+2019-05-09 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc
+ gcc/testsuite/
+ * g++.dg/modules/indirect-[234]_[bc].C: Adjust module dump scans.
+ * g++.dg/modules/inst-[1234]_[ab].C: Likewise.
+ * g++.dg/modules/vmort-2_c.C: Likewise.
+
+ Atomically mark template's DECL_TEMPLATE_RESULT, IMPLICIT_TYPEDEF's type
+ gcc/cp/
+ * module.cc (enum tree_tag): Replace
+ tt_{primary,secondary}_type with tt_typedef.
+ (trees_out::mark_node): Mark the template_decl.
+ (trees_out::maybe_insert_typeof): Delete.
+ (trees_out::tree_decl): Stream the template_decl, name implicit
+ templates. Always mark result & type.
+ (trees_out::tree_type): Simplify implicit_typedef streaming.
+ (trees_out::tree_value): Assert correct ordering.
+ (trees_in::tree_node): Adjust tt switch. Insert result & type.
+ (module_state::{read,write}_cluster): Always add voldemort's type.
+ gcc/testsuite/
+ * g++.dg/modules/class-3_[bd].C: Adjust module dump scans.
+ * g++.dg/modules/indirect-[234]_[bc].C: Likewise.
+ * g++.dg/modules/inst-[234]_[ab].C: Likewise.
+ * g++.dg/modules/stdio-1_a.H: Likewise.
+ * g++.dg/modules/using-4_a.C: Likewise.
+
+2019-05-07 Nathan Sidwell <nathan@acm.org>
+
+ gcc/testsuite/
+ * g++.dg/template/pr39425.C: Adjust errors.
+ * g++.old-deja/g++.pt/spec20.C: Adjust errors.
+
+ Merge trunk r270943.
+
+2019-05-06 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * include/mkdeps.h: Rename struct mrules to struct mkdeps.
+ * mkdeps.c: Likewise.
+ * include/cpplib.h (cpp_get_deps): Rename return type..
+ * directives.c (cpp_get_deps): Likewise.
+ * internal.h (struct cpp_reader): Rename deps field type.
+ gcc/cp/
+ * cp-tree.h (module_preprocess): Adjust first arg type.
+ * module.cc: Rename mrules to mkdeps.
+ * lex.c (module_preprocess_token): Rename mrules->mkdeps.
+ gcc/c-family/
+ * c-opts.c (handle_defered_opts): Rename struct deps to struc mkdeps.
+
+ gcc/cp/
+ * module.cc (enum tree_tag): Delete tt_builtin.
+ (trees_out::tree_decl): Builtins are merely GMF entities.
+ (tree_in::tree_node): Delete tt_builtin handling.
+ * name-lookup.c (init_global_partition): New.
+ (get_fixed_binding_slot): Populate global & partition slots.
+ gcc/testsuite/
+ * g++.dg/modules/builtin-1_[ab].C: Adjust scans.
+ * g++.dg/modules/by-name-1.C: Likewise.
+
+ gcc/cp/
+ * cp-tree.h (global_purview_p): New.
+ (module_header_p): Rename to ...
+ (header_module_p): ... this.
+ (named_module_p): New. Replace ...
+ (module_not_header_p): ... this.
+ (module_global_p): ... delete.
+ * module.cc (trees_out::tree_mergeable, module_state::write)
+ (module_cpp_undef, finish_module_processing): Adjust.
+ * name-lookup.c (get_fixed_binding_slot, record_mergeable_decl)
+ (check_module_override, make_namespace): Adjust.
+ * parser.c (cp_parser_translation_unit, cp_parser_module_name): Adjust.
+
+2019-05-02 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (spec_entry): Moved from pt.c.
+ (walk_specializations): Declare.
+ (get_specializations_for_module): Delete.
+ * module.cc (depset): Add DB_FIRST_BIT.
+ (depset::{is,set}_first_dep_repurposed): New.
+ (depset::{,tarjan::}connect): Drop for_mergeable parm, use
+ is_first_dep_repurposed instead.
+ (spec_tuple): New.
+ (specialization_add): New.
+ (specialization_cmp): Adjust.
+ (depset::hash::add_specializations): Reimplement.
+ (depset::hash::add_mergable): Set set_first_dep_repurposed.
+ (module_state::sort_mergeables): Adjust.
+ (module_state::write): Likewise.
+ * pt.c (spec_entry): Move to cp-tree.h
+ (get_specializations, get_specializations_for_module): Replace
+ with ...
+ (walk_specializations): ... this.
+ gcc/testsuite/
+ * g++.dg/modules/inst-1_b.C: Adjust scans.
+
+2019-05-01 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset): Add DB_PARTIAL_BIT,
+ is_partial_specialization, set_implicit_specialization.
+ (depset::hash::add_dependency): Drop is_implicit parm. Return the
+ depset.
+ (trees_out::tree_decl): Set the implicit bit myself.
+ (depset::hash::add_specializations): Preliminary tweak.
+
+ gcc/cp/
+ * pt.c (get_specializations): Adjust type template checking.
+ (get_specializations_for_module): Get the type specializations
+ too.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-spec-4_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (set_module_owner): Deal with specializations.
+ * name-lookup.c (mark_pending_on_decl): Walk class members.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-spec-3_[ab].C: New.
+
+ gcc/cp/
+ * parser.c (cp_parser_explicit_specialization): Correctl unwind state.
+ * decl.c (grokfndecl): Set module ownership after specializationness
+ is known.
+
+ libcpp/
+ * macro.c (_cpp_new_macro): memset before initing.
+
+ gcc/cp/
+ * module.cc (module_state::write_bindings): Iterate over sccs
+ array, not hash table.
+ (module_state::write): Adjust.
+
+ libcpp/
+ * macro.c (_cpp_new_macro): Initialize imported field.
+
+ Merge trunk r270765.
+
+2019-04-30 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (module_normal_import_p): Declare.
+ * module.cc (module_normal_import_p): New.
+ * name-lookup.c (note_pending_specializations): Note already
+ loaded normal imports.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-spec-2_d.C: New
+
+ gcc/testsuite/
+ * tpl-spec-2_[abc].C: New.
+
+ Namespace-scope function specializations.
+ gcc/cp/
+ * cp-tree.h (MODULE_VECTOR_LAZY_{PARTITION,GLOBAL}_SPEC_P):
+ Delete.
+ * module.cc (struct specset): New.
+ (module_for_unnamed): New.
+ (lazy_load_specializations): New.
+ (module_state::{read,write}_unnamed): Register the
+ specializations.
+ ({init,finish}_module_processing): Adjust.
+ * name-lookup.c (mark_pending_on_decl, mark_pending_on_binding):
+ New.
+ (set_module_binding): If pending, mark the new decls.
+ (note_pending_specializations, note_loaded_specializations): New
+ * name-lookup.h (note_pending_specializations)
+ (note_loaded_specializations): Declare.
+ gcc/testsuite/
+ * g++.dg/modules/tpl-spec-1_[ab].C: New.
+
+2019-04-29 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (MODULE_VECTOR_LAZY_SPEC_P)
+ (MODULE_VECTOR_LAZY_GLOBAL_SPEC_P)
+ (MODULE_VECTOR_LAZY_PARTITION_SPEC_P): New.
+ * module.cc (struct unnamed_entity): New.
+ (unnamed_ary): Array of unnamed_entity.
+ (module_state::write_cluster): Return void.
+ (module_state::{read,write}_unnamed): Deal with specializations.
+ (module_State::{read,write}_specializations): Delete.
+ (module_state::read_cluster): Adjust.
+ (module_state_config): Drop specialization count.
+ (module_state::{read,write}_config): Adjust.
+ (module_state::{read,write}): Drop specialization streaming.
+
+ Merge trunk r270644. (GCC 10)
+
+ gcc/cp/
+ * modules.cc (depset::hash::add_depednency): More STRIP_TEMPLATE.
+
+2019-04-25 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (get_specializations_for_module): Declare.
+ * module.cc (depset): Add DB_IMPLICIT_BIT,
+ is_implicit_specialization.
+ (depset::hash::add_dependency): Add is_implicit arg. Allow NULL
+ current. Set is_imolicit_specialization.
+ (module_state::write_specializations): Implement.
+ (trees_out::tree_decl): Stream specializations.
+ (specialization_cmp): New.
+ (depset::hash::add_specializations): New.
+ (module_state::write_cluster): Count specializations.
+ (module_state::write): Add and stream specializations.
+ * pt.c (spec_hash_table): New typedef. Use it.
+ (get_specializations): New.
+ (get_specializations_for_module): New.
+
+2019-04-24 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (DECL_TEMPLATE_LAZY_SPECIALIZATIONS_P): New.
+ (lazy_load_specializations): Declare.
+ * module.cc (module_state::{read,write}_specializations): New.
+ (module_state::write_cluster) Return template count.
+ (module_state_config): Add num_specializations.
+ (module_state::{read,write}_config): Stream it.
+ (module_state::{read,write}): Stream spcializizations.
+ (lazy_load_specializations): New.
+ * pt.c (lookup_template_class_1, instantiate_template_1): Lazy
+ load specializations.
+
+ Merge trunk r270543.
+
+ Instantiations now streamed.
+ gcc/cp/
+ * module.cc (tree_tag): Delete tt_inst.
+ (trees_out::tree_decl): All instantiations are depended. Never
+ tt_inst.
+ (trees_in::tree_node): Delete tt_inst handling.
+ (trees_in::tree_mergeable): Deal with type specializations.
+ * pt.c (lookup_template_class_1): Set instatiation owner to
+ current TU.
+ (match_mergable): Accept type.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-[234]_[bc].C: Adjust scans.
+ * g++.dg/modules/inst-[34]_[bc].C: New.
+
+2019-04-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (module_name): New overload.
+ * module.cc (dumper::impl::nested_name): Adjust module dump.
+ (module_name): New.
+ * error.c (dump_module_suffix): Dump for namespace-scope decl.
+ (dump_aggr_type): Dump module suffix.
+ gcc/testsuite/
+ * g++.dg/modules/adhoc-1_b.C: Adjust regexps.
+ * g++.dg/modules/err-1_[cd].C: Likewise.
+ * g++.dg/modules/macloc-1_[cd].C: Likewise
+ * g++.dg/modules/by-name-1.C: Adjust scans.
+ * g++.dg/modules/class-3_[bd].C: Likewise.
+ * g++.dg/modules/enum-1_a.C: Likewise.
+ * g++.dg/modules/global-[23]_a.C: Likewise.
+ * g++.dg/modules/indirect-[1234]_[bc].C: Likewise.
+ * g++.dg/modules/inst-[12]_[ab].C: Likewise.
+ * g++.dg/modules/part-3_c.C: Likewise.
+ * g++.dg/modules/scc-1.C: Likewise.
+ * g++.dg/modules/stdio-1_a.H: Likewise.
+ * g++.dg/modules/using-4_a.C: Likewise.
+ * g++.dg/modules/vmort-2_[abc].C: Likewise.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::tree_mergeable): Stream more for
+ specializations.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Don't stream template
+ instantiations.
+ (trees_{in,out}::tree_mergeable): Refactor.
+ (module_state::prepare_locations): Fix dumper.
+
+ gcc/cp/
+ * Make-lang.in: Wedge revision number into REVISISON_s.
+
+ Function instantiation merging
+ gcc/cp/
+ * cp-tree.h (get_module_owner): Add tpl_owner parm.
+ (match_mergeable_specialization): New.
+ * mangle.c (maybe_write_module): Look through template
+ instantiations.
+ * method.c (implicitly_declare_fn): Do not set owner here.
+ * module.cc (trees_out::tree_decl): Namespace-scope function
+ instantiations are merged.
+ (trees_in::tree_node): Likewise.
+ (trees_{in,out}::tree_mergeable): Allow instantiation merging.
+ (depset::hash::add_dependency): Specializations are unnameable.
+ (module_state::write_cluster): Seed specializations too.
+ (module_state::read_define): Fix size_t/unsigned mismatch.
+ (module_visible_instantiation_path): Use TYPE_STUB_DECL.
+ (get_module_owner): Add inst_owner_p arg. Look through
+ instantiation, or don't.
+ * pt.c (instantiate_template_1): Set module owner here.
+ (instantiate_decl): ... not here.
+ (match_mergeable_decl): New.
+ gcc/testsuite/
+ * lib/scanlang.exp (scan-lang-dump-times): New. Cut-paste fu!
+ * g++.dg/modules/inst-[12]_[ab].C: New.
+ * g++.dg/modules/adl-1_c.C: Comment.
+ * g++.dg/modules/indirect[234]_[bc].C: Adjust.
+
+2019-04-12 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * Make-lang.in (MODULE_REVISION): New.
+ * module.cc (dumper::impl::nested_name): Print module number.
+ (module_state::write_readme): Write revision.
+ gcc/testsuite/
+ * g++.dg/modules/by-name-1.C: Adjust scans.
+ * g++.dg/modules/class-3_[bd].C: Likewise.
+ * g++.dg/modules/enum-1_a.C: Likewise.
+ * g++.dg/modules/global-[23]_a.C: Likewise.
+ * g++.dg/modules/indirect-[1234]_[bc].C: Likewise.
+ * g++.dg/modules/part-3_c.C: Likewise.
+ * g++.dg/modules/scc-1.C: Likewise.
+ * g++.dg/modules/stdio-1_a.H: Likewise.
+ * g++.dg/modules/using-4_a.C: Likewise.
+ * g++.dg/modules/vmort-2_[abc].C: Likewise.
+
+ gcc/cp/
+ * module.cc (dumper::impl::nested_name): Remove namespace owner
+ fiddling.
+ * name-lookup.c (make_namespace): Don't set owner. Adjust callers.
+
+ Ownership only on namespace-scope.
+ gcc/cp/
+ * module.cc (dumper::impl::nested_name): Show decl's ownership.
+ (trees_out::tree_decl): Remove unnecessary unnameable code.
+ (depset::hash::add_dependency): Add is_import parm.
+ (module_state::write_clister): Get owner decl of unnamed.
+ (get_module_owner): Always look at the namespace-scope entity.
+ (set_module_owner): Only set namespace-scope entity.
+ (set_implicit_module_owner): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/by-name-1.C: Adjust scans.
+ * g++.dg/modules/class-3_[bd].C: Likewise.
+ * g++.dg/modules/enum-1_a.C: Likewise.
+ * g++.dg/modules/global-[23]_a.C: Likewise.
+ * g++.dg/modules/indirect-[1234]_[bc].C: Likewise.
+ * g++.dg/modules/part-3_c.C: Likewise.
+ * g++.dg/modules/scc-1.C: Likewise.
+ * g++.dg/modules/stdio-1_a.H: Likewise.
+ * g++.dg/modules/using-4_a.C: Likewise.
+ * g++.dg/modules/vmort-2_[abc].C: Likewise.
+
+2019-04-11 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * mangle.c (decl_is_template_id): Rename to ...
+ (maybe_template_info): ... here. Simplify API.
+ (mangle_return_type, write_encoding, write_name)
+ (write_nested_name, write_prefix, write_template_prefix)
+ (write_unqualified_name): Update all callers.
+
+ gcc/cp/
+ * module.cc (module_for_{ordinary,macro}_loc): New.
+ (module_state::{read,write}_location): Deal with imported locations.
+
+ gcc/cp/
+ * module.cc (depset::entity_kind_name): Tweak.
+ (trees_{in,out}::tree_mergeable): Frob context.
+ * name-lookup.h (match_mergeable_decl): Pass context explicitly.
+ * name-lookup.c (match_mergeable_decl): Pass context explicitly.
+ gcc/testsuite/
+ * g++.dg/modules/global-[23]_a.C: Adjust scans.
+ * g++.dg/modules/stdio-1_a.H: Likewise.
+
+ gcc/cp/
+ * module.cc (loc_kind): New.
+ (module_state::{read,write}_location): Use tagging, compress macro
+ & adhoc better.
+
+ gcc/cp/
+ * module.cc (loc_spans): Main span is all but reserved.
+ (slurping): Drop pre_early_ok.
+ (loc_spans::init): Don't push command line and forced header
+ spans.
+ (loc_spans::macro): Fix comparison thinko.
+ (module_state::read_location): No such thing as early.
+ (module_state::prepare_locations): Drop command line and forced
+ header handling.
+ (maybe_add_macro): Ignore lazy macros.
+ (canonicalize_header_name): Return the buffer.
+ gcc/testsuite/
+ * g++.dg/modules/macro-5_c.C: Adjust regexp.
+
+2019-04-10 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_preprocess): Module partitions always produce
+ a BMI.
+ gcc/testsuite/
+ * g++.dg/modules/dep-2.C: New.
+
+ gcc/cp/
+ * module.cc (module_state::write_cluster): Remove unnecessary
+ check & FIXME.
+
+ gcc/cp/
+ * module.cc (trees_out::depending_p): Delete.
+ (trees_out::tree_decl): Refactor asserts.
+ (module_state::write_cluster): Refactor initial scan.
+
+ libcpp/
+ * mkdeps.c (deps_add_module): Swap primary & module args. Too
+ confusing.
+ gcc/cp/
+ * module.cc (module_state::do_import, module_preprocess)
+ (finish_module_processing): Adjust.
+
+2019-04-09 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (slurping): Move {ordinary,macro}_locs to ..
+ (module_state): ... here.
+ (module_state::read_location): Adjust.
+ (module_state::read_locations): Adjust, recorded locations are for
+ current TU.
+
+ gcc/cp/
+ * module.cc (get_module): Add parent option, use it.
+ (module_state::read_{imports,partitions}): Adjust.
+ (finish_module_processing): Show full module name on error.
+ gcc/testsuite/
+ * g++.dg/modules/ben-1{_[ab].C,.map}: New.
+ * g++.dg/modules/alias-1_f.C: Use [srcdir].
+ * g++.dg/modules/gc-2_a.C: Likewise.
+ * g++.dg/modules/inc-xlate-1_d.C: Likewise.
+ * g++.dg/modules/legacy-6_[cdef].C: Likewise.
+ * g++.dg/modules/map-1_[ab].C: Likewise.
+
+ gcc/cp/
+ * module.cc (depset::is_imported_entity): New.
+ (module_for_unnamed): Delete.
+ (depset::hash::add_dependency): Note imported dependencies.
+ (module_state::{read,write}_cluster): Deal with imported unnamed.
+ (module_state::write): Skip imported dependencies.
+ gcc/testsuite/
+ * g++.dg/modules/vmort-2_[abc].C: New.
+
+ libcpp/
+ * mkdeps (munge): Quote ':'.
+ (deps_add_module): Correct partion/module order.
+ (make_write): Add .c++m suffix to module name.
+ gcc/testsuite/
+ * g++.dg/modules/dep-1_[ab].C: New.
+
+ libcpp/
+ * mkdeps (mkrules::~mkrules): Use free appropriately.
+
+ gcc/
+ * doc/invoke.texi (C++ Module Mapper): Fix markup.
+
+ gcc/cp/
+ * cp-tree.h (language_function): Remove x_auto_return_pattern.
+ (current_function_auto_return_pattern): Delete.
+ (FNDECL_USED_AUTO): Correct documentation.
+ * decl.c (save_function_data): Delete.
+ (fndecl_declared_return_type): Don't look at language_function.
+ (start_preparsed_function): Replace
+ current_function_auto_return_pattern with
+ DECL_SAVED_AUTO_RETURN_TYPE.
+ (finish_function): Likewise.
+ * mangle.c (write_unqualified_name): Likewise.
+ * parser.c (cp_parser_jump_statement): Likewise.
+ * typeck.c (check_return_expr): Likewise.
+
+2019-04-08 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (unnamed_ary, unnamed_map_t, unnamed_map): New.
+ (struct slurping): Delete unnamed, alloc_unnamed, & deletion of
+ same.
+ (struct moduls_state): Add unnamed_lwm, unnamed_num.
+ (module_for_unnamed): New.
+ (dumper::impl::nested_name): More informative unnamedness.
+ (module_state::read_cluster): Use the unnamed_ary.
+ (module_state::read_unnamed): Populate unnamed_ary.
+ ({init,finish}_module_processing): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-4_[bc].C: Adjust scans.
+
+ gcc/cp
+ * cp-tree.h (struc mc_slot): Move to ...
+ * name-lookup.h: ... here.
+ * module.c (depset::hash::{add_mergeable,connect}): Use depsets
+ not decls.
+ (depset::tarjan::connect): Add for_mergeables parm.
+ (tree_node::{mark,tree}_mergeable): Likewise.
+ (module_state::sort_mergeables): Likewise,
+ (module_state::{read,write}_bindings): Return/expect number of
+ bindings.
+ (module_state::write_macros): Return number of macros.
+ (module_state::write_cluster): Adjust.
+ (module_state::{read,write}_config): Adjust.
+ (module_state::{read,write}): Adjust.
+
+2019-04-03 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (dumper): Add CLUSTER.
+ (module_state::write): Dump cluster information.
+
+ gcc/cp/
+ * module.cc (node_template_info): Move earlier, protect from
+ partial read in.
+ (dumper::impl::nested_name): Dump template args.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-[234]_[abc].C: Adjust scans.
+
+ gcc/cp/
+ * module.cc (module_state::write_cluster): Refactor.
+
+ gcc/cp/
+ * module.cc (cluster_tag): Remove ct_defn.
+ (module_state::{read,write}_cluster): Definitions marked via flag.
+
+ gcc/cp/
+ * module.cc (depset::hash): Rename mergeables flag to mergeable_dep.
+
+2019-04-02 Nathan Sidwell <nathan@acm.org>
+
+ Allow mapper protocol of file descriptors.
+ gcc/
+ * doc/invoke.texi (C++ Module Mapper): Document <> form.
+ gcc/cp/
+ * module.cc (module_mapper::module_mapper): Parse <> option.
+
+ Write bmi /after/ deferred instantiations.
+ gcc/cp/
+ * cp-tree.h (finish_module_processing): Add cpp arg.
+ (finish_module_parse): Delete.
+ * name-lookup.h (lookup_by_type): Declare.
+ * decl2.c (c_parse_final_cleanups): Adjust.
+ * module.c (tree_tag): Add tt_builtin.
+ (trees_out::tree_decl): Use tt_builtin for builtins.
+ (trees_in::tree_node): Likewise.
+ (finish_module_parse): Move processing into ...
+ (finish_module_processing): ... here.
+ * name-lookup.c (lookup_by_type): New.
+ gcc/testsuite/
+ * g++.dg/modules/builtin-1_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (depset): Add EK_UNNAMED. Delete DB_IS_UNNAMED_BIT,
+ is_unnamed accessor.
+ (depset::hash::add_dependency): Add entity_kind arg, simplify
+ logic. Update callers.
+ gcc/testsuite/
+ * g++.dg/modules/using-4_a.C: Adjust scan.
+
+2019-04-02 Ben Boeckel <ben.boeckel@kitware.com>
+ Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * mkdeps.c (mrules): Rename is_legacy to is_header_init, adjust uses.
+ (deps_add_module): Correctly duplicate and use strings.
+
+2019-04-02 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset::add_dependency): Drop maybe_using arg.
+ Adjust callers.
+ (dumper::operator()): Overloads have a name.
+ (has_definition): Adjust.
+
+2019-04-01 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset): Move flags into discriminator field. Adjust uses.
+
+ gcc/cp/
+ * module.cc (depset): Replace key wih entity/discriminator tuple.
+ Add entity_kind and disc_bits enums. Adjust hashing &
+ construction routines.
+
+ gcc/cp/
+ * module.cc (depset): Entity keying uses unique entity. Set
+ entity kind later.
+ (depset::hash): Adjust hashing.
+ (depset::hash::add_dependency): Set kind after insertion.
+ (depset::hash::add_mergeable): Adjust.
+ gcc/
+ * doc/invoke.texi: Fix module mapper thinko.
+
+2019-03-29 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (saved_scope): Remove this_module field.
+ (current_module): Delete.
+ (module_import_bitmap): Rename to ...
+ (get_import_bitmap): ... here. Lose arg.
+ * module.cc (module_import_bitmap): Rename to ...
+ (get_import_bitmap): ... here. Lose arg.
+ * name-lookup.c (name_lookup::search_namespace_only): Adjust.
+ (check_module_override, finish_nonmember_using_decl): Likewise.
+ (do_push_to_top_level): Drop this_module field init.
+
+2019-03-28 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * pt.c: Comment some structures.
+
+ gcc/
+ * doc/invoke.texi (C++ Modules): Update.
+
+ Merge trunk r269975.
+
+2019-03-27 Nathan Sidwell <nathan@acm.org>
+
+ Header unit compilations retrofit includeness.
+ gcc/cp/
+ * cxx-mapper.c (module2bmi): Don't use PCH suffix.
+ * module.cc (module_header_macro, controlling_node): Delete.
+ (module_state::write_macros): Rely on cpp to determine controlling
+ macro.
+ (module_state::{write,read}): Likewise.
+ (module_begin_main_file): Retrofit as a header.
+ (finish_module_parse): Delete header_macro stuff.
+ libcpp/
+ * files.c (_cpp_stack_file): Set main_file.
+ (_cpp_find_header_unit): Close the file.
+ (cpp_retrofit_as_include): New.
+ (cpp_main_controlling_macro): New.
+ * include/cpplib.h (cpp_retrofit_as_include): Declare.
+ (cpp_main_controlling_macro): Declare.
+ * internal.h (struct cpp_buffer): Add main_file flag.
+ (cpp_in_primary_file): Use it.
+ gcc/testsuite/
+ * g++.dg/modules/{,sys/}inext-1.H: New.
+ * g++.dg/modules/macro-[23]_[abc].[CH]: Adjust.
+ * g++.dg/modules/modules.exp (dg-module-bmi): Adjust.
+ * g++.dg/modules/stdio-1_a.H: Asjust.
+
+ Expunge header name quoting in mapper
+ gcc/cp/
+ * cxx-mapper.cc (IS_HEADER_NAME): New.
+ (module2bmi): Adjust.
+ * module.cc (module_mapper::imex_query): Drop quotes.
+ (module_mapper::translate_include): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp (dg-module-bmi): Adjust mapping.
+
+ Header unit names lack quotes
+ gcc/c-family/
+ * c.opt (fmodule-header): Set a var.
+ * cp-tree.h (module_map_header): Pass string as ptr/len tuple.
+ * lex.c (module_map_header): Move to module.cc.
+ (module_process_token): Remove gratuitous representation frobbing.
+ * module.cc (module_state::module_state): Assert no quotes.
+ (module_header_name): Delete.
+ (get_module): Detect header via pathism.
+ (module_mapper::imex_query): Add quotes.
+ (module_mapper::translate_include): Drop reader parms, don't push
+ buffer here.
+ (canonicalize_header_name): New, from lex.c.
+ (module_map_header): Wrapper for canonicalize_header_name.
+ (module_translate_include): Do buffer pushing here. Canonicalize
+ name.
+ (set_module_header_name): Delete.
+ (module_begin_main_file): Simplify header name setting.
+ (handle_module_option): Adjust header name flag setting.
+ * parser.c (cp_lexer_tokenize): Adjust header name mapping.
+ libcpp/
+ * lex.c (cpp_output_token): Add quotes back onto CPP_HEADER_NAME.
+ gcc/testsuite/
+ * g++.dg/modules/alias-3_[bc].C: Adjust.
+ * g++.dg/modules/leg-merge-4_c.C: Adjust.
+ * g++.dg/modules/macro-[2456]_[bcde].C: Adjust.
+ * g++.dg/modules/stdio-1_b.C: : Adjust.
+ * g++.dg/modules/sys: Add.
+
+ Header unit names are strings
+ gcc/cp/
+ * lex.c (module_map_header): Build string_cst.
+ (module_preprocess_token): Adjust.
+ * module.cc (module_state::module_state): Header names are
+ strings.
+ (module_name_hash): New.
+ (module_state_hash::{hash,equal}): Adjust.
+ (dumper::impl::nested_name): Fix string_cst.
+ (get_module): Tweak.
+ (module_state::set_flatname): Tweak.
+ (module_begin_main_file): Build string.
+
+2019-03-26 Nathan Sidwell <nathan@acm.org>
+
+ gcc/c-family/
+ * c-opts.c (c_common_post_options): Invert sense of
+ cpp_read_main_file arg.
+ * parser.c (cp_parser_translation_unit): Reject include
+ translation in module purview.
+ libcpp/
+ * files.c (_cpp_stack_file): Take include type parm. Drop line
+ parm. Do line-table adjusting here ...
+ (_cpp_stack_include): ... not here.
+ * include/cpplib.h (cpp_read_main_file): Invert final parm.
+ * init.c (cpp_read_main_file): Adjust.
+ * internal.h (include_type): Add more enumerations, and document.
+ (_cpp_stack_file): Adjust prototype.
+ gcc/testsuite/
+ * g++.dg/modules/alias-2_[ab].[CH]: New.
+ * g++.dg/modules/exp-xlate-1_[ab].[CH]: New.
+ * g++.dg/modules/legacy-3_c.H: Robustify testing.
+
+ Header units disambiguated by originating header path
+ libcpp/
+ gcc/
+ * doc/invoke.texi (-fmodule-header): Adjust.
+ * langhooks.h (struct lang_hooks): Adjust preprocess hook.
+ gcc/cp/
+ * cp-tree.h (module_preprocess_token): Adjust.
+ (module_map_header): Declare.
+ (module_translate_include): Adjust.
+ * cxx-mapper.cc (module2bmi): Header units map to relative path.
+ (client::action): Look for header bmi.
+ * lex.c (module_map_header): New.
+ (module_preprocess_token): Remap header unit names.
+ * module.cc (create_dirs): Fix.
+ (module_mapper::translate_include): Adjust.
+ (module_translate_include): Likewise.
+ (finish_module_parse): Fix directory creation.
+ (handle_module_option): Remove fmodule-header=FOO handling.
+ * parser.c (cp_lexer_tokenize): Remap header unit names.
+ gcc/c-family/
+ * c-lex.c (c_lex_with_flags): Build a string for header names.
+ * c-ppoutput.c (scan_translation_unit): Allow preprocess hook to
+ nadger token.
+ * c.opt (fmodule-header=): Deprecate.
+ libcpp/
+ * directives.c (do_include_common): Move include translation to ...
+ * files.c (_cpp_file): Add header_unit field.
+ (should_stack_file): Break into ...
+ (is_known_idempotent_file): ... this, and ...
+ (has_unique_contents): ... this.
+ (_cpp_stack_file): ... do include translation.
+ (cpp_find_header_unit): New.
+ * include/cpplib.h (cpp_callbacks): Adjust translate_include hook.
+ (cpp_find_header_unit): Declare.
+ gcc/testsuite/
+ * g++.dg/modules/: Many changes.
+
+2019-03-21 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * files.c (struct _cpp_file): Make bools bitfields, add
+ header_unit flag.
+ (_cpp_find_file): Don't write for (; !fake;) to mean if (!fake)
+ for (;;).
+ (_cpp_stack_file): Refactor.
+
+ Merge trunk r269839.
+
+ gcc/
+ * gcc.c (execute): Use . not (.).
+ * params.def (PARAM_LAZY_MODULES): Add trailing .
+ gcc/testsuite/
+ * lib/prune.exp (prune_gcc_output): Adjust collect regexp.
+
+ gcc/
+ * gcc.c (execute): Frob argv[0] to show spawning from driver.
+ (process_command): Don't check input file exists here.
+
+2019-03-20 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::mark_class_def): Skip friends in decl_list.
+
+ gcc/cp/
+ * module.cc (module_state::read_namespaces): Module-linkage
+ namespaces are visible in the module itself.
+ * name-lookup.h (add_imported_namespace): Rename parm.
+ * name-lookup.c (add_imported_namespace): Export_p becomes visible_p.
+ gcc/testsuite/
+ * g++.dg/modules/enum-3_[ab].C: New.
+
+ Enum members of templates part 2.
+ gcc/cp/
+ * module.cc (trees_out::tree_node): Any enum can be tt_enum_int.
+ (trees_out::mark_enum_def): Only mark integer_cst inits.
+ gcc/testsuite/
+ * g++.dg/modues/enum-2_[ab].C: Add.
+
+ Enum members of templates part 1.
+ gcc/cp/
+ * class.c (maybe_add_class_template_decl): No need to add
+ CONST_DECLs.
+ * pt.c (instantiate_class_template_1): CONST_DECLs are not on the
+ template decl list no more.
+ * module.cc (node_template_info): Cope with enum members of
+ templates.
+ (trees_in::insert): Allow null when failing.
+ (trees_{in,out}::core_vals): Uninstantiated enums have no
+ underlying type.
+ (trees_out::tree_decl): Enums can be members too.
+ (trees_out::write_class_def): Only announce when streaming.
+ (trees_out::mark_class_def): Don't mark const_decl fields.
+ (trees_out::mark_enum_def): Always mark the enum here.
+ gcc/testsuite.
+ * g++.dg/modules/enum-2_[ab].C: New.
+
+2019-03-19 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset::hash::find_dependencies): It might be a fixed
+ tree.
+ gcc/testsuite/
+ * g++.dg/modules/stdns_[ab].C: New.
+
+ Using decls part 3.
+ gcc/cp/
+ * cp-tree.h (ovl_iterator::exporting_p): Simplify.
+ * name-lookup.c (do_nonmember_using_decl): Upgrade export in place.
+ gcc/testsuite/
+ * g++.dg/modules/using-4_[ab].C: New.
+
+ gcc/testsuite/
+ * g++.dg/modules/using-3.C: New.
+
+ Using decls part 2.
+ gcc/cp/
+ * cp-tree.h (OVL_EXPORT_P): New.
+ (ovl_iterator::exporting_p): New.
+ (ovl_insert): Change using_p arg type.
+ * tree.c (ovl_insert): USINGNESS parm conveys exporting too.
+ * name-lookup.c (do_nonmember_using_decl): Deal with exports.
+ * module.cc (binding_cmp): Sort usings too.
+ (module_state::{read,write}_cluster): Using decls too.
+ gcc/testsuite/
+ * g++.dg/modules/using-2_[abc].C: New.
+
+ gcc/cp/
+ * name-lookup.c (do_nonmember_using_decl): Cleanups.
+ (finish_nonmember_using_decl): Likewise.
+
+2019-03-18 Nathan Sidwell <nathan@acm.org>
+
+ Using decls part 1.
+ gcc/cp/
+ * name-lookup.c (do_nonmember_using_decl): Unnest if.
+ (finish_nonmember_using_decl): Deal with module vector.
+ gcc/testsuite/
+ * g++.dg/modules/global-3_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (module_state::{read,write}_locations): Cope with
+ trailing empty expansions.
+
+ gcc/cp/
+ * module.cc (module_state::{read,write}_locations): Macro maps can
+ have embedded zeroes.
+
+ gcc/cp/
+ * name-lookup.c (do_nonmember_using_decl): Add install & fn_scope
+ args.
+ (finish_nonmember_using_decl): Adjust, prep for modules.
+ gcc/testsuite/
+ * g++.dg/lookup/using53.C: Restore & extend DR36 errors.
+
+2019-03-15 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (do_nonmember_using_decl): Have lookup passed in.
+ (validate_nonmember_using_decl): Delete. Absorb
+ into ...
+ (finish_nonmember_using_decl): ... here. Do lookup once.
+ lookup_enum_member): New. Broken out of ...
+ (get_binding_or_decl): ... here. Call it.
+ (finish_nonmember_using_decl): Drop LOOKUP parm. Do lookup here.
+ gcc/testsuite/
+ * g++.dg/cpp0x/using-enum-2.C: Adjust diagnostics.
+ * g++.dg/cpp0x/using-enum-3.C: Likewise.
+ * g++.dg/lookup/hidden-class9.C: Likewise.
+ * g++.dg/lookup/hidden-temp-class11.C: Likewise.
+ libstdc++-v3/
+ * testsuite/18_support/byte/global_neg.cc: Adjust diagnostics.
+ * testsuite/20_util/headers/type_traits/types_std_c++0x_neg.cc: Likewise.
+ * testsuite/26_numerics/headers/cmath/types_std_c++0x_neg.cc: Likewise.
+ * testsuite/27_io/headers/cstdio/functions_neg.cc: Likewise.
+ * testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc: Likewise.
+ * testsuite/29_atomics/headers/atomic/types_std_c++20_neg.cc: Likewise.
+
+ gcc/cp/
+ * name-lookup.h (finish_nonmember_using_decl): Drop LOOKUP parm.
+ * name-lookup.c (lookup_enum_member): New. Broken out of ...
+ (get_binding_or_decl): ... here. Call it.
+ (finish_nonmember_using_decl): Drop LOOKUP parm. Do lookup here.
+ * parser.c (cp_parser_using_declaration): Adjust.
+ * pt.c (tsubst_expr): Likewise.
+ gcc/testsuite/
+ * g++.dg/lookup/hidden-class9.C: Adjust diagnostics.
+ * g++.dg/lookup/hidden-temp-class11.C: Likewise.
+ libcc1/
+ * libcp1plugin.cc (plugin_add_using_decl): Adjust
+ finish_nonmember_using_decl call.
+ libstdc++-v3/
+ * testsuite/18_support/byte/global_neg.cc: Adjust diagnostics.
+ * testsuite/20_util/headers/type_traits/types_std_c++0x_neg.cc: Likewise.
+ * testsuite/26_numerics/headers/cmath/types_std_c++0x_neg.cc: Likewise.
+ * testsuite/27_io/headers/cstdio/functions_neg.cc: Likewise.
+ * testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc: Likewise.
+ * testsuite/29_atomics/headers/atomic/types_std_c++20_neg.cc: Likewise.
+
+ Merge using directive fields & fns.
+ gcc/cp/
+ * cp-tree.h (lang_decl_ns): Drop usings field.
+ (DECL_NAMESPACE_USING): Delete.
+ * name-lookup.h (finish_using_directive): Declare.
+ (finish_namespace_using_directive)
+ (finish_local_using_directive): Delete.
+ * name-lookup.c (name_lookup::search_usings)
+ (name_lookup::queue_namespace): Adjust.
+ (has_using_namespace_std_directive_p): No need to search
+ namespaces separately.
+ (finish_using_directive): New. Merged from ...
+ (finish_namespace_using_directive, finish_local_using_directive): ...
+ here. Delete.
+ (push_namespace): Adjust.
+ * parser.c (cp_parser_using_directive): Call finish_using_directive.
+ * pt.c (tsubst_expr): Likewise,
+ libcc1/
+ * libcp1plugin.cc (plugin_add_using_namespace): Call
+ finish_using_directive.
+
+2019-03-14 Nathan Sidwell <nathan@acm.org>
+
+ Merge finish using decl fns
+ gcc/cp/
+ * name-lookup.c (finish_nonmember_using_decl): New, merged from ...
+ (finish_namespace_using_decl, finish_local_using_decl): ... here.
+ Delete.
+ * name-lookup.h (finish_nonmember_using_decl): Declare
+ (finish_namespace_using_decl, finish_local_using_decl): Delete.
+ * parser.c (cp_parser_using_declaration): Adjust.
+ * pt.c (tsubst_expr): Likewise.
+ libcc1/
+ * libcp1plugin.cc (plugin_add_using_decl): Likewise.
+
+ Drop cp_binding_level::usings
+ gcc/cp/
+ * name-lookup.h (cp_binding_level): Remove usings field.
+ * name-lookup.c (push_using_decl, push_using_decl_1): Delete.
+ (validate_nonmember_using_decl): Make using decl here.
+
+ gcc/cp/
+ * name-lookup.c (validate_nonmember_using_decl): Drop DR 36 case.
+ gcc/testsuite/
+ * g++.dg/lookup/using53.C: Permit DR 36 case.
+
+ Merge trunk r269682.
+
+2019-03-13 Nathan Sidwell <nathan@acm.org>
+
+ Start doing something with using decls
+ gcc/cp/
+ * cp-tree.h (ovl_iterator): Add get_using accessor.
+ * module.cc (depset::is_using): New.
+ (depset::hash::add_dependency): Add maybe_using parm. Use it.
+ (depset::hash::add_binding): Deal with using decls.
+ (depset::hash::find_dependencies): Likewise.
+ (cluster_cmp): Likewise.
+ (module_state::{read,write}_cluster): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/using-1_[abc].C: New.
+
+ stdio.h can be a legacy unit!
+ gcc/testsuite/
+ * g++.dg/modules/stdio-1_[ab].[CH]: New.
+ * g++.dg/modules/global-2_[ab].C: New.
+
+ typedef struct {} foo; part 2
+ gcc/cp/
+ * module.cc (tt_anon_decl): New.
+ (trees_out::tree_decl): Deal with anonymous decls.
+ (trees_out::tree_type): Use TYPE_STUB_DECL.
+ (trees_in::tree_node): Deal with tt_anon_decl.
+ * name-lookup.c (get_lookup_ident): Assert not anonymous.
+ gcc/testsuite/
+ * g++.dg/modules/tdef-3_[ab].C: Extend.
+ * g++.dg/modules/tdef-3_c.C: New.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_decl): Refactor named decl streaming.
+ (trees_in::tree_node): Remove as_base special casing.
+ * name-lookup.c (lookup_by_ident, get_lookup_ident): Handle
+ as_base here.
+
+2019-03-12 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::tree_node): Refactor.
+ (module_state::write_cluster): Prefer non-anonymous name.
+
+ typedef struct {} foo; part 1
+ gcc/cp/
+ * module.cc (trees_out::tree_value): Cope with name-for-linkage.
+ (trees_out::write_class_def): Likewise.
+ (depset::hash::add_dependency): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/tdef-3_[ab].C: New.
+
+ gcc/cp/
+ * decl.c (fndecl_declared_return_type): Remove BMI FIXME.
+ * module.cc (trees_{in,out}::lang_decl_vals): Stream
+ saved_auto_return_type.
+
+ gcc/cp/
+ * tree.c (ovl_splice): Delete.
+
+ Kill DECL_SAVED_FUNCTION_DATA part 1
+ gcc/cp/
+ * cp-tree.h (lang_decl_fn): Replace saved_language_function with
+ saved_auto_return type.
+ (DECL_SAVED_FUNCTION_DATA): Delete.
+ (DECL_SAVED_AUTO_RETURN_TYPE): New.
+ * decl.c (duplicate_decls, start_preparsed_function): Adjust.
+ (save_function_data): Only save auto return type.
+ (finish_function): Drop DECL_SAVED_FUNCTION_DATA member zapping.
+ (fndecl_declared_return_type): Adjust.
+ * method.c (make_thunk, make_alias_for): Adjust.
+
+ gcc/cp/
+ * module.cc (writable_cmp): New.
+ (depset::hash::add_writables): Sort the hash before inserting.
+
+ gcc/cp/
+ * decl.c (fndecl_declared_return_type): Extend BMI hack.
+ * module.cc (tt_anon_id, tt_lambda_id): New.
+ (trees_{in,out}::tree_node): Stream them.
+ gcc/
+ * tree.c (make_anon_name): Drop format #.
+
+2019-03-11 Nathan Sidwell <nathan@acm.org>
+
+ Anon entities never placed in symbol tables.
+ gcc/cp/
+ * module.cc (depset::hash::add_binding): Assert not anonymous.
+ * name-lookup.c (pop_local_binding): Popping anonymous is a NOP.
+ (do_pushdecl): Pushing anonymous doesn't push to symbol table.
+ gcc/testsuite/
+ * g++.dg/other/pr28114.C: Adjust errors.
+
+ gcc/
+ * tree.h (make_anon_name): Drop optional parm.
+ * tree.c (make_anon_name): Drop 'extra' parm.
+ gcc/cp/
+ * cp-tree.h (TYPE_LAMBDA_P): New, require a type.
+ (LAMBDA_TYPE_P): Refactor.
+ (TYPE_ANON_P): New.
+ (TYPE_UNNAMED_P): Use it, reject lambdas.
+ * class.c (add_implicitly_declared_members): Replace LAMDBA_TYPE_P
+ with TYPE_LAMBDA_P.
+ (finalize_literal_type_property, explain_non_literal_class)
+ (check_bases_and_members, finish_struct)
+ (current_nonlambda_class_type, maybe_note_name_used_in_class): Likewise.
+ * constexpr.c (check_constexpr_bind_expr_vars): Likewise.
+ * decl.c (cp_finith_decomp, grokdeclarator): Likewise.
+ * lambda.c (begin_lambda_type): Don't clear IDENTIFIER_ANON_P.
+ (lambda_function): Replace LAMBDA_TYPE_P with TYPE_LAMBDA_P.
+ (current_lambda_expr, resolvable_dummy_lambda)
+ (nonlambda_method_basetype): Likewise.
+ * mangle.c (decl_mandling_context, write_unqualified_name): Likewise.
+ (write_local_name): Simplify anon check.
+ * method.c (synthesized_method_walk): Replace LAMBDA_TYPE_P with
+ TYPE_LAMBDA_P.
+ (maybe_explain_explicit_delete): Likewise.
+ * parser.c (cp_parser_simple_type_specifier)
+ (cp_parser_parameter_declaration_clause)
+ (cp_parser_parameter_declaration)
+ (synthesize_immplicit_template_parm): Likewise.
+ * pt.c (template_class_depth, check_for_bare_parameter_packes)
+ (push_templated_decl_real, lookup_template_class_1)
+ (instantiate_class_template_1, tsubst_expr)
+ (tsubst_copy_and_build): Likewise.
+ * semantics.c (finish_this_expr, finish_member_declaration): Likewise.
+ * error.c (dump_aggr_type): Check for lambda before anonymous.
+ * cp-lang.c (cxx_dwarf_name): Treat all anonymous names anonymously.
+
+2019-03-08 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.h (extract_module_binding): Return binding, not name.
+ * name-lookup.c (extract_module_binding): Return binding, not name.
+ * module.cc (depset::set_binding_name): New.
+ (depset::hash::add_binding): Drop name parm, check anon names
+ here.
+ (depset::hash::add_writables): Adjust extract_module_binding use.
+
+ gcc/cp/
+ * cp-tree.h (ovl_sort): Delete.
+ * name-lookup.h (extract_module_binding): Drop type_r parm.
+ * module.cc (depset::hash::add_binding): Drop type parm.
+ (depset::hash::add_writables): Adjust extract_module_binding API.
+ * name-lookup.c (extract_module_binding): Return name, valye by
+ reference. Don't sort.
+ * tree.c (ovl_sort): Delete.
+
+ Base lambda names off anonymous names.
+ gcc/cp/
+ * cp-tree.h (IDENTIFIER_LAMBDA_P): New.
+ (LAMBDA_TyPE_P): Key off name.
+ (TYPE_UNNAMED_P): Simplify.
+ (LAMBDANAME_PREFIX, LAMBDANAME_FORMAT): Delete.
+ (make_lambda_name): Delete.
+ * lambda.c (begin_lambda_type): Use make_anon_name.
+ * name-lookup.c (lambda_cnt, make_lambda_name): Delete.
+
+2019-03-07 Nathan Sidwell <nathan@acm.org>
+
+ Commonize anonymous name generation.
+ gcc/
+ * tree.h (IDENTIFIER_ANON_P): New.
+ (anon_aggrname_p, anon_aggrname_format): Delete.
+ (make_anon_name): Declare.
+ * tree.c (anon_aggrname_p, anon_aggrname_format): Delete.
+ (make_anon_name): New.
+ * lto-streamer-out.c (DFS::DFS_write_tree_body): Use IDENTIFIER_ANON_P.
+ (hash_tree): Likewise.
+ * tree-streamer-out.c (write_ts_decl_minimal_tree_pointers): Likewise.
+ gcc/cp/
+ * cp-tree.h (TYPE_UNNAMED_P): Use IDENTIFIER_ANON_P.
+ (make_anon_name): Delete.
+ * class.c (find_flexarrays): Use IDENTIFIER_ANON_P.
+ * cp-lang.c (cxx_dwarf_name): Likewise.
+ * decl.c (name_unnamed_type, xref_tag_1): Likewise.
+ * error.c (dump_aggr_type): Likewise.
+ * name-lookup.c (anon_cnt, make_anon_name): Delete.
+ (consider_binding_level): Use IDENTIFIER_ANON_P.
+ * pt.c (push_template_decl_real): Likewise.
+ gcc/d/
+ * types.cc (fixup_anonymous_offset): Use IDENTIFIER_ANON_P.
+ (layout_aggregate_members): Use make_anon_name.
+
+2019-03-06 Nathan Sidwell <nathan@acm.org>
+
+ Refactor all the things!
+ gcc/cp/
+ * module.cc: Tighten up access.
+
+ Refactor.
+ gcc/cp/
+ * module.cc (module_state): Reorder member fn definitions.
+
+ Refactor.
+ gcc/cp/
+ * module.cc (module_state::is_matching_decl): Moved to ...
+ (trees_in::is_matching_decl): ... here.
+ (trees_{in,out}::{mark,write,read}_*): Move earlier.
+
+ Refactor.
+ gcc/cp/
+ * module.cc (module_state::read_definition): Moved to ...
+ (trees_in::read_definition): ... here.
+ (module_state::is_skippable_defn): Move to ...
+ (trees_in::is_skippable_defn): ... here.
+ (module_state::read_{function,var,class,enum}_def): Move to ...
+ (trees_in::read_{function,var,class,enum}_def): ... here.
+ (module_state::read_binfos): Move to ...
+ (trees_in::read_binfos): ... here.
+
+ Refactor.
+ gcc/cp/
+ * module.cc (module_state::{write,mark}_definition): Move to ...
+ (trees_out::{write,mark}_definition): ... here.
+ (module_state::{write,mark}_{function,var,class,enum}_def): Move to ...
+ (trees_out::{write,mark}_{function,var,class,enum}_def): ... here.
+ (module_state::write_binfos): Move to ...
+ (trees_out::write_binfos): ... here.
+ (depset::hash::find_dependencies): Drop module_state parm.
+
+ Refactor.
+ gcc/cp/
+ * module.cc (module_state::{add_writables,find_dependencies}): Move
+ to ...
+ (depset::hash::{add_writables,find_dependencies}): ... here.
+ (depset::hash::get_work): Delete.
+
+ GMF pruning, Part 2
+ gcc/cp/
+ * module.cc (depset::hash): Rename flags fields.
+ (trees_out::tree_decl): Self references by dependency binding.
+ (depset::hash::add_dependency): Fix thinko.
+ (binding_cmp): New.
+ (depset::hash::finalize_dependencies): New.
+ (module_state::write): Adjust.
+ * name-lookup.c (extract_module_binding): The FIXMEs have become
+ irrelevant.
+ (get_binding_or_decl): Only imports for namespaces.
+ gcc/testsuite/
+ * g++.dg/modules/internal-1.C: Prune output.
+ * g++.dg/modules/mod-sym-2.C: Check GMF not discarded.
+
+ gcc/cp/
+ * module.cc (trees_out::trees_out): Add depset::hash parm.
+ (trees_out::depending_p): Invert streaming_p.
+ (module_state::write_cluster): Add depset::hash parm, adjust.
+ (trees_out::begin): Single ctor for both uses.
+ (trees_out::end): Don't clear dep_hash.
+ (module_state::find_dependencies): Adjust.
+ (module_state::write): Adjust.
+
+ Linkage promotion ban
+ GMF pruning, Part 1
+ gcc/cp/
+ * module.cc (depset::is_internal): New field.
+ (depset::hash): Add gmfs, & internals fields.
+ (depset::hash::add_dependency): Deal with gmf & internal.
+ (depset::hash::add_binding): Ignore GMF & internals here.
+ (module_state::write): Errors for referenced internals.
+ * name-lookup.c (get_binding_or_decl): Get globals.
+ gcc/testsuite/
+ * g++.dg/modules/internal-1.C: New.
+ * g++.dg/modules/namespace-[34]_[abc].C: Adjust.
+
+2019-03-05 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (depset::hash::add_binding): Ignore internal-linkage
+ entities.
+ (module_state::add_writables): Don't walk anonymous namespaces.
+ gcc/testsuite/
+ * g++.dg/modules/unnamed-1_a.C: Adjust scan.
+ * g++.dg/modules/unnamed-2.C: Adjust scan.
+
+ gcc/cp/
+ * module.cc (depset::add_dependency): Drop kind arg, return void.
+ (depset::hash::add_binding): Set current during addition.
+ (module_state::add_writables): Tweak.
+
+ gcc/cp/
+ * module.cc (depset): Add refs_internal field. Replace decl_key
+ and defn_key with entity_key. Remove is_decl, add is_namespace.
+ Replace get_decl with get_entity.
+
+2019-03-04 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r269375.
+
+ GMF content locations
+ gcc/cp/
+ * parser.h (cp_token): Remove C compatibility macros. Add
+ main_source_p field.
+ * parser.c (cp_lexer_get_preprocessor_token): Set main_source_p
+ field.
+ (cp_lexer_before_phase_4): Rename to ...
+ (cp_lexer_not_macro): ... here. Drop main-file check.
+ (cp_parser_translation_unit): Emit main-file errors.
+ (cp_parser_{module,import}_declaration): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/global-1_a.C: Adjust.
+ * g++.dg/modules/mod-decl-3.C: Adjust.
+ * g++.dg/modules/mod-decl-5_b.C: Adjust.
+ * g++.dg/modules/mod-exp-1_b.C: Adjust.
+ * g++.dg/modules/mod-sym-2.C: Adjust.
+ * g++.dg/modules/namespace-2_a.C: Adjust.
+ * g++.dg/modules/static-1_a.C: Adjust.
+ * g++.dg/modules/token-1.C: Adjust.
+ * g++.dg/modules/token-2_b.C: Adjust.
+ * g++.dg/modules/token-3.C: Adjust.
+ * g++.dg/modules/token-4.C: Adjust.
+ * g++.dg/modules/token-5.C: New.
+
+ New # semantics for popping to "" name.
+ libcpp/
+ * directives.c (do_linemarker): Popping to "" name means fill in
+ the name.
+ gcc/testsuite/
+ * c-c++-common/cpp/line-1.c: New.
+
+ Cleanups.
+ libcpp/
+ * include/cpplib.h (struct cpp_hashnode): Drop C compatibility
+ macros. Correct bit calculation.
+ * include/line-map.h: Formatting.
+ * line-map.c (get_pure_location): Formatting.
+
+ gcc/cp/
+ * module.cc (declare_module): Deal with de-GMFing here, get name
+ of implicit header module.
+ * parser.c (enum module_preamble): New enum.
+ (cp_parser_translation_unit): Use it.
+ (cp_parser_{module,import}_declaration): Use it.
+ gcc/testsuite/
+ * g++.dg/modules/p0713-3.C: Adjust diags.
+
+2019-03-01 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r269321.
+
+ Merge trunk r269078 (metadata update).
+
+ Apply trunk r269078.
+ gcc/cp/
+ * module.cc (module_state::{read,write}_function_def): Adjust.
+
+ gcc/cp/
+ * cp-tree.h (struct constexpr_fundef): Moved from constexpr.c.
+ (register_constexpr_fundef): Adjust.
+ (find_constexpr_fundef): Replace with ...
+ (retrieve_constexpr_fundef): ... this.
+ * constexpr.c (struct constexpr_fundef): Moved to cp-tree.h
+ (constexpr_fundef_hasher): Constify.
+ (retrieve_constexpr_fundef): Make extern.
+ (find_constexpr_fundef): Delete.
+ (check_constexpr_fundef): Adjust.
+ (register_constexpr_fundef): Adjust API.
+ * module.cc (module_state::{read,write}_function_def): Adjust.
+
+ Merge trunk r269077.
+
+ gcc/cp/
+ * parser.c (cp_lexer_set_source_position_from_token): Revert.
+
+2019-02-28 Nathan Sidwell <nathan@acm.org>
+
+ module & import-semi lexing rules
+ gcc/cp/
+ * parser.c (cp_lexer_tokenize): Fix EOF push.
+ (cp_lexer_before_phase_4): New.
+ (cp_lexer_set_source_position_from_token): Simplify.
+ (cp_parser_{module,import}_declaration): Check phase-4 requirements.
+ gcc/testsuite/
+ * g++.dg/modules/class-2_a.C: Do not #include
+ * g++.dg/modules/token-[123]*.C: New.
+
+ Remove eof_token
+ gcc/cp/
+ * parser.h (cp_token): Add tree_check_p, adjust GTY tagging.
+ (cp_lexer): Add saved_type, saved_keyword fields.
+ * parser.c (eof_token): Delete.
+ (cp_lexer_new_from_tokens): Overwrite EOF here.
+ (cp_lexer_destroy): Restore overwritten token here.
+ (cp_lexer_token_position, cp_lexer_previous_token_position): Simplify.
+ (cp_lexer_tokenize): Likewise.
+ (cp_lexer_peek_nth_token, cp_lexer_consume_token): Likewise.
+ (cp_lexer_purge_token, cp_lexer_purge_tokens_after): Likewise.
+ (cp_parser_nested_name_specifier, cp_parser_decltype)
+ (cp_parser_template_id): Set tree_check_p.
+
+2019-02-27 Nathan Sidwell <nathan@acm.org>
+
+ __import in extern "C"
+ gcc/cp/
+ * parser.c (cp_lexer_tokenize): Add extern_c_depth arg, tokenize
+ through extern "C".
+ (cp_parser_translation_unit): Handle top-level extern "C".
+ (cp_parser_module_name): Force header unit.
+ (cp_parser_{module,import}_declaration): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/inc-xlate-1_[cd].C: New.
+
+ gcc/cp/
+ * cp-tree.h (import_module): Return bool.
+ * module.cc (import_module): Return is_header flag.
+ * parser.c (cp_parser_tokenize): Rename to ...
+ (cp_lexer_tokenize): ... this. Reimplement.
+ (cp_parser_import_declaration): Return is_header flag.
+ (cp_parser_translation_unit): Adjust lexer tokenization interaction.
+
+2019-02-26 Nathan Sidwell <nathan@acm.org>
+
+ Flag_modules is strictly boolean.
+ gcc/c-family/
+ * c.opt (fmodules-ts): Allow negation.
+ gcc/cp/
+ * decl.c (duplicate_decls): Use modules_p.
+ * lex.c (module_preprocess_token): Use modules_p.
+ * parser.c (cp_parser_diagnose_invalid_type)
+ (cp_parser_translation_unit, cp_parser_tokenize): Likewise.
+ * module.cc (module_begin_main_file): Likewise.
+ (handle_module_option): Adjust.
+ gcc/
+ * doc/invoke.texi (fmodules-ts): Adjust.
+
+ Preprocess __import.
+ gcc/cp/
+ * cp-tree.h (import_module): Add extern C flag.
+ * lex.c (module_preprocess_token): Allow __import in extern-c
+ * module.c (import_module): Add extern C flag.
+ * parser.c (cp_parser_import_declaration): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/inc-xlate-1{.map,_[ab].H}: New.
+
+ Distinguished __import spelling.
+ gcc/c-family/
+ * c-common.c (c_common_reswords): Add __import spelling.
+ gcc/cp/
+ * module.cc (module_mapper::translate_include): Use __import.
+ gcc/testsuite/
+ * g++.dg/modules/legacy-[3456]*: Adjust.
+ * g++.dg/modules/map-2.C: Likewise.
+
+ Fix preprocessor tokenizing rules.
+ gcc/cp/
+ * lex.c (module_preprocess_token): Detect extern "C" {, tokenize
+ trailing attributes before importing header unit.
+ gcc/testsuite/
+ * g++.dg/modules/cpp-2_[abc].[CH]: Extend testing.
+
+ Fix interface partition export rules.
+ gcc/cp/
+ * module.cc (module_state::read_imports): Don't check partition
+ import/export here ...
+ (module_state::direct_import): ... or here ...
+ (module_state::write): ... but do it here.
+ gcc/testsuite/
+ * g++.dg/modules/part-2_[cd].C: Adjust.
+ * g++.dg/modules/part-2_e.C: New.
+
+2019-02-22 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * doc/invoke.texi: Update modules documentation.
+
+ libcpp/
+ * mkdeps.h (deps_write): Add phony arg.
+ (deps_phony_targets): Delete.
+ * init.c (cpp_finish): Adjust deps_write call.
+ * mkdeps.c (mrules): Add quote_lwm member.
+ (munge): Just return static buffer.
+ (deps_add_target, deps_add_dep, deps_add_module): Store unmunged.
+ (write_name): Rename ...
+ (make_write_name): ... here. Maybe munge here.
+ (write_vec, deps_write): Rename to ...
+ (make_write_vec, make_write): ... here. Adjust.
+ (deps_write): New wrapper.
+
+ gcc/cp/
+ * cp-tree.h (init_module_processing): Add arg.
+ * decl.c (cxx_init_decl_processing): Adjust.
+ * module.cc (init_module_processing): Check preprocess sanity.
+
+ libcpp/
+ * mkdeps.c (deps_add_module): Allow empty bmi name.
+ (deps_write): Refactor. Add PHONY.
+ gcc/cp/
+ * cp-tree.h (module_preprocess): Declare.
+ * lex.c (module_preprocess_token): Have a proper state object,
+ register imports with dependency machinery.
+ * module.cc (module_preprocess_token): New.
+ (module_begin_main_file): Cope with just preprocessing.
+
+2019-02-21 Nathan Sidwell <nathan@acm.org>
+
+ gcc/c-family/
+ * c.opt: Rename fmodule-legacy to fmodule-header
+ gcc/
+ * doc/invoke.texi: Update.
+ gcc/cp/
+ * cp-tree.h, module.cc, lang-specs.h, name-lookup.c, parser.c:
+ Rename.
+ gcc/testsuite/
+ * g++.dg/modules/: Likewise.
+
+ gcc/
+ * langhooks.h (struct lang_hooks): Adjust preprocess_token API.
+ gcc/cp/
+ * lex.c (module_preprocess_token): Adjust API.
+ * cp-tree.h (module_preprocess_token): Adjust API.
+ * module.cc (module_state::direct_import): Not fatal if preprocessing.
+ gcc/c-family/
+ * c-ppoutput.c (scan_translation_unit): Adjust preprocess_token
+ hook API.
+
+2019-02-20 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * REVISION: Add [].
+ gcc/cp/
+ * Make-lang.in (MODULE_VERSION): Replace ...
+ (MODULE_STAMP): ... this. Adjust
+ * cxx-mapper.cc: Update.
+ * module.cc: Update version behaviour.
+ (module_state::do_import): Add dependency.
+ libcpp/
+ * mkdeps.c (mrules): Add dtor properly. Add modules.
+ (deps_write): Spew module deps.
+
+2019-02-11 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r268782.
+
+ Make dependencies
+ libcpp/
+ * include/cpplib.h (cpp_get_deps): Change type.
+ * include/mkdeps.h (struct deps): Rename to ...
+ (struct mrules): ... this. Adjust accessors.
+ (deps_add_module): Declare.
+ * internal.h (sttuct cpp_reader): Likewise.
+ * mkdeps.c (struct mrules): Rename from deps. Add module fields.
+ (munge): Allow concatenation.
+ (deps_add_module): New.
+ (write_name, write_vec): New, broken out of ...
+ (deps_write): ... this. Add module pieces.
+ gcc/
+ * module.cc: #include mkdeps.h.
+ (module_state::direct_import): Add module to dependencies.
+ (finish_module_parse): Set target dependency info.
+ gcc/c-family/
+ * c-opts.c (handle_deferred_opts): Adjust dep accessors.
+ gcc/fortran/
+ * cpp.c (gfc_cpp_add_dep, gfc_cpp_add_target, gfc_cpp_init): Adjust
+ dep accessors.
+
+2019-02-08 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * mkdeps.c (struct deps): Make more C++y. Update all uses.
+
+2019-02-07 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_mapper::module_mapper): Fix local socket creation.
+
+ gcc/cp/
+ * c++-mapper.cc (module2bmi): Do not map dir separators.
+ gcc/testsuite/
+ * g+.dg/modules/modules.exp (decode_mod_spec): Likewise.
+
+ gcc/cp/
+ * module.cc (create_dirs): New.
+ (maybe_add_bmi_prefix): Add FORCE parm, adjust.
+ (finish_module_parse): Try and create intermediate dirs.
+
+2019-02-05 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (finish_namespace_using_decl): Add assert + FIXME.
+
+ gcc/cp/
+ * cxx-mapper.cc (client::action): Add mapper agent.
+ * module.cc (module_mapper::handshake): Add mapper agent slot.
+ gcc/
+ * doc/invoke.texi (C++ Module Mapper): Update handshake.
+
+ gcc/cp/
+ * module.cc (module_state::read_locations): Make warning
+ development-only.
+
+ gcc/cp/
+ * module.cc (get_module_slot): New broken out of ...
+ (get_module): ... here. Call it.
+ (module_mapper::translate_include): Cope with file mapper.
+ gcc/testsuite/
+ * g++.dg/modules/map-2.{C,map}: New.
+
+2019-02-01 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r268456.
+
+ gcc/cp/
+ * decl.c (duplicate_decls): Accomodate anticipated fns.
+ * module.cc (set_module_owner): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/printf-1_[ab].[HC]: New.
+
+2019-01-31 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (try_increase_lazy): Fix setrlimit call.
+ (init_module_processing): Fix getrlimit call.
+
+ gcc/cp/
+ * module.cc (init_module_processing): Dump even more config.
+ Tweak lazy limit.
+
+ Rework lazy limit handling.
+ gcc/cp/
+ * module.cc (lazy_limit, lazy_hard_limit, LAZY_HEADROOM): New.
+ (lazy_open): Invert sense, make unsigned. Adjust all uses.
+ (try_increase_lazy): New.
+ (module_state::freeze_an_elf): Call it first.
+ (init_module_processing): Adjust lazy_limit setting.
+
+2019-01-30 Nathan Sidwell <nathan@acm.org>
+
+ ADL part 2
+ gcc/cp/
+ * cp-tree.h (LOOKUP_FOUND_P): Allow enumeral type.
+ * module.cc (module_visible_instantiation_path): Protect against
+ not modules.
+ * name-lookup.c (name_lookup::adl_enum): New.
+ (name_lookup::adl_type): Use it.
+ (name_lookup::adl_namespace): INST_PATH may be null.
+ (name_lookup::search_adl): Add partitions of types.
+ gcc/testsuite/
+ * g++.dg/modules/adl-[23]_[abc].C: New.
+
+ ADL part 1
+ gcc/cp/
+ * cp-tree.h (module_visible_instantiation_path): Declare.
+ * module.cc (module_visible_instantiation_path): Implement.
+ * name-lookup.c (name_lookup::add_module_fns): Delete.
+ (name_lookup::add_namespace_fns): Add visible bitmaps,
+ reimplement.
+ (name_lookup::search_adl): Get path of instantiation.
+ gcc/testsuite/
+ * g++.dg/modules/adl-1_[abc].C: New.
+
+ gcc/cp/
+ * name-lookup.c (name_lookup::adl_namespace_only): Delete.
+ (name_lookip::adl_{namespace,class}_fns): New.
+ (name_lookup::adl_{namespace,class}): Adjust.
+ (name_lookup::search_adl): Refactor.
+
+2019-01-30 Iain Sandoe <iain@sandoe.co.uk>
+
+ gcc/cp/
+ * module.cc: Reorder includes.
+ * cxx-mapper.cc: Likewise.
+
+ gcc/testsuite/
+ * g++.dg/modules/fn-inline-1_{bc}.C: Adjust weak scan.
+
+2019-01-30 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * doc/invoke.texi (C++ Modules): Add submenu.
+
+2019-01-29 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (init_module_processing): Dump more config.
+
+ gcc/cp/
+ * module.cc (MAPPED_READING, MAPPED_WRITING): 0 or 1
+ (init_module_processing): Dump mapping behaviour.
+
+2019-01-28 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_mapper::make): Drop options arg, look at
+ CXX_MODULE_MAPPER.
+ gcc/
+ * doc/invoke.texi (fmodule-mapper): Document env var.
+ (C++ Module Mapper): Likewise.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Lambda location.
+ * cp-objcp-common.c (cp_common_init_ts): Fix LAMBDA_EXPR marking.
+ * cp-tree.h (tree_lambda_expr): Save 8 bytes.
+
+ Merge trunk r268337.
+
+2019-01-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Stream expression locii.
+
+ gcc/cp/
+ * cp-objcp-common.c (cp_common_init_ts): MARK_TS_EXP for tcc_statement.
+
+ gcc/cp/
+ * cp-objcp-common.c (cp_common_init_ts): MARK_TS_EXP for scope_ref
+ & noexcept_expr.
+ * module.cc (trees_{in,out}::core_vals): Rely on TS_EXP.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Adjust expression streaming.
+
+ Fix TS_CONTAINS_STRUCT for tcc_expression.
+ gcc/
+ (MARK_TS_EXP): New.
+ gcc/c-family/
+ * c-common.c (c_common_init_ts): Use MARK_TS_EXP. Mark
+ SIZEOF_EXPR.
+ gcc/cp/
+ * cp-objcp-common.c (cp_common_init_ts): MARK_TS_EXP for
+ tcc_expression nodes. Call c_common_init_ts.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Clean up enumeral type
+ handling.
+ (trees_out:tree_node, module_state::mark_enum_def): Use
+ SCOPED_ENUM_P.
+
+ gcc/cp/
+ * module.cc (tree_tag): Add tt_enum_int.
+ (trees_out::mark_node): Allow marking non-decls.
+ (trees_{in,out}::tree_node): Serialize enum values.
+ (module_state::mark_enum_def): Mark enum int_csts.
+ gcc/testsuite/
+ * g++.dg/modules/enum_1_[ab].C: Test serialization.
+
+ gcc/cp/
+ * module.cc (trees_in::finish_type): Don't speciual case
+ TYPE_PACKs.
+ * pt.c (template_parm_to_arg, coerce_template_parameter_pack)
+ (make_argument_pack, tsubst_template_args, tsubst)
+ (type_unification_real, unify_pack_expansion): Set
+ TYPE_STRUCTURAL_EQUALITY for type packs.
+
+2019-01-22 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-objcp-common.c (cp_common_init_ts): Set TYPE_PACK_EXPANSION
+ and TYPE_ARGUMENT_PACK correctly.
+ * module.c (trees_in::finish_type): Special case pack types and
+ bound parms.
+ gcc/testsuite/
+ * g++.dg/modules/var-tpl-1_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (tree_tag): Add tt_ptrmem_type.
+ (trees_{in,out}::core_vals): Don't scrog pointer's ptrmem cache.
+ (trees_out::tree_type): Stream pointers to member functions.
+ (trees_in::tree_node): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/nodes-1_[ab].C: More.
+
+2019-01-18 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Stream tcc_reference,
+ baselink, static_assert, trait_expr.
+ gcc/testsuite/
+ * g++.dg/modules/nodes-1_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): Fix TYPE_CACHED_VALUES
+ handling. Stream ptrmem_cst. Note userdef_literals unreachable.
+ gcc/testsuite/
+ * g++.dg/modules/nodes-1_[ab].C: Add prememdata
+
+ gcc/cp/
+ * module.cc (module_state::{read,write}_locations): Fix macro
+ expansion compression.
+
+2019-01-17 Nathan Sidwell <nathan@acm.org>
+
+ Enable partition entity merging.
+ gcc/cp/
+ * module.cc (depset::hash): Add mergeable flag.
+ (trees_out::{tpl_parms,tree_mergeable}): Protect from not
+ streaming.
+ (depset::hash::add_dependency): Deal with mergeablility.
+ (depset::hash::add_mergeable): New.
+ (depset::hash::connect): Adjust dump.
+ (module_state::write_cluster): Sort mergeables.
+ (module_state::find_dependencies): Deal with mergeability.
+ (module_state::sort_mergeables): New.
+ gcc/testsuite/
+ * g++.dg/modules/scc-1.C: Adjust scans.
+ * g++.dg/modules/part-3_[cd].C: Remove xfails.
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::fn_parms): New.
+ (trees_{in,out}::tree_mergeable): Call them.
+ (cluster_cmp): Move earlier.
+ (depset::hash::connect): New, broken out of ...
+ (module_state::write): ... here. Call it.
+
+2019-01-16 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_{in,out}::tree_mergeable): Allow non-implicit
+ typedefs.
+ gcc/testsuite/
+ * g++.dg/modules/leg-merge-9_[abc].[HC]: New.
+
+ Merge partition entities (disabled).
+ gcc/cp/
+ * module.cc (trees_{in,out}::tree_mergeable): Fold partitions.
+ (module_state::{read,write}_cluster): Register module entities.
+ gcc/testsuite/
+ * g++.dg/modules/part-3_[abcd].C: New.
+
+ gcc/cp/
+ * module.cc (dumper::GM): Rename to MERGE. Update uses.
+
+ gcc/cp/
+ * cp-tree.h (module_name): Replace FULL parm with primary pointer.
+ * error.c (dump_module_suffix): Adjust.
+ * module.cc (module_state::fullname): Rename to flatname.
+ (module_state::{get,set}_flatname): New. Use get_flatname.
+ (module_state::attach): Conditionally call set_flatname.
+ (get_module): Likewise.
+ (module_mapper::imex_query): Adjust.
+ (module_mapper::bmi_response): Likewise.
+ (module_state::write_readme): Adjust.
+ (module_state::{read,write}_config): Adjust name checking.
+ * name-lookup.c (make_namespace): Adjust anonymous name creation.
+ * ptree.c (cxx_print_decl): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/part-2_[cd].C: Adjust regex.
+
+ gcc/cp/
+ * cp-tree.h (module_name): Add FULL parm.
+ * module.cc (module_name): Check it and strip partitions if not.
+ * error.c (dump_module_suffix): Don't want full name.
+
+2019-01-15 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r267946.
+
+ Partition BMI folding, but not entity merging.
+ gcc/cp/
+ * cp-tree.h (get_module_owner): Mark PURE.
+ * module.cc (loc_spans::open): Add location parm.
+ (trees_out::{lang_decl_bools,tree_node_specific,tree_decl}): Account
+ for remapping.
+ (depset::hash::add_binding): Account for partitions.
+ (module_state::write_locations): Account for partitions.
+ (module_state::read_locations): Add partition spans to primary
+ interface.
+ (module_state::add_writables): Add partition bitmap arg. Adjust
+ extraction.
+ (module_state::write): Generate partition bitmap.
+ (module_state::read): Only read partitions on primary.
+ * name-lookup.h (extract_module_binding): Adjust parms.
+ * name-lookup.c (add_mergeable_decl): Break out from ...
+ (record_mergeable_decl): ... here. Call it.
+ (match_mergeable_decl): Likewise.
+ (check_mergeable_decl): Tweak.
+ (extract_module_binding): Examine partitions and merge.
+ * tree.c (ovl_sort): Simplify.
+ gcc/testsuite/
+ * g++.dg/modules/part-1_a.C: Adjust.
+ * g++.dg/modules/part-1_c.C: New.
+
+2019-01-14 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * tree.h (cache_integer_cst): Add defaulted small parm.
+ * tree.c (cache_integer_cst): Add small parm, adjust.
+ gcc/cp/
+ * module.cc (trees_out::start): FIXED_CST are C only.
+ (trees_in::finish): Merge small INTEGER_CSTs.
+ (trees_{in,out}::core_bools): Don't write base.public_flag of types.
+
+ gcc/cp/
+ * module.cc (trees_out::start): Catch POLY_INT_CST, adjust
+ VECTOR_CST.
+ (trees_{in,out}::core_vals): Do TS_VECTOR.
+ * g++.dg/modules/literals-1_[ab].C: Add vector cst.
+
+2019-01-11 Nathan Sidwell <nathan@acm.org>
+
+ String literals.
+ gcc/cp/
+ * module.cc (trees_{in,out}::core_vals): String literals (a NOP).
+ gcc/testsuite/
+ * g++.dg/modules/literals-1_[ab].C: Add string lit.
+
+ Real & complex literals.
+ gcc/cp/
+ * module.cc (bytes_{in,out}::buf): Void pointer
+ (trees_{in,out}::core_vals): Stream REAL_CST & COMPLEX.
+ gcc/testsuite/
+ * g++.dg/modules/literals-1_[ab].C: New.
+
+ gcc/cp/
+ * module.cc (get_module): Fix partition parsing.
+ (module_state::read_imports): Check interface import requirements.
+ (module_state::{read,write}_partitions): No need for exported.
+ (module_state::write_config): Write is_interface.
+ (module_state::direct_import): Check interface import
+ requirements.
+ (declare_module): Set interface_p, not exported_p.
+ * parser.c (cp_parser_module_name): Partitions only in non-legacy
+ module purview.
+ gcc/testsuite/
+ * g++.dg/modules/part-2_[abcd].C: New.
+
+2019-01-10 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (module_not_legacy_p): New.
+ * module.cc (trees_out::tree_namespace): Rema namespace owner.
+ (tree_in::tree_node): Protect bogus tt_namespace.
+ * name-lookup.c (record_mergeable_decl): New.
+ (check_mergeable_decl): Namespaces are never overloaded.
+ (check_module_override): Add to mergeable list.
+ (do_pushdecl): Record mergeable.
+ (make_namespace_finish): Use check_mergeable_decl. Never add to level
+ (push_namespace): Add to level here.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-1_b.C: Adjust dump scan.
+
+ gcc/cp/
+ * module.cc (finish_module_parse): Better location info on errors.
+ * name-lookup.c (name_lookup::search_namespace_only): Skip
+ partition slot too.
+ (check_module_override): Likewise.
+ (check_mergeable_decl): New broken out of ...
+ (match_mergeable_decl): ... here. Call it.
+ (reuse_namespace): Iterate over global slot.
+ * ptree.c (cxx_print_xnode): More cluster info.
+
+2019-01-09 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_state::read_partitions): New.
+ (module_state::read_imports): Deal with elided partitions.
+ (module_state::write_partitions): Write more.
+ (module_state::read): Read partitions.
+ (module_state::direct_import): Deal with elided partitions.
+ (process_deferred_imports): Don't request known filenames. Avoid
+ double request.
+ gcc/testsuite/
+ * g++.dg/modules/atom-preamble-2_d.C: Check no duplicate.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Update.
+
+ gcc/cp/
+ * module.cc (module_state::from_partition_p): New field.
+ (module_state::maybe_partition_name): New.
+ (module_state::{read,write}_imports): Adjust.
+ (module_state::write_partitions): New.
+ (module_state::remap_partitions): Delete.
+ (trees_out::tree_decl): Remap owner.
+ (module_state::write_readme): Adjust.
+ (module_state_config): Add imports and partitions fields.
+ (module_state::{read,write}_config): Adjust.
+ (module_state::write): Separate out hidden partitions. Adjust
+ import & partition writing.
+ (module_state::read): Adjust import reading.
+ gcc/testsuite/
+ * g++.dg/modules/import-1_c.C: Adjust scan.
+ * g++.dg/modules/mod-imp-1_c.C: Likewise.
+
+2019-01-08 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cxx-mapper.cc (module2bmi): Update mapping
+ * module.cc (module_state::{maybe_defrost,freeze_an_elf}): Quote
+ filename..
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp (decode_mod_spec): Update mapping.
+ * g++.dg/modules/freeze-1_d.C: Adjust scan-final.
+ * g++.dg/modules/import-2.C: Likewise.
+ * g++.dg/modules/mod-stamp-1_d.C: Likewise.
+
+ gcc/cp/
+ * module.cc (module_state::{interface_p,is_interface}): New.
+ (module_state::resolve_alias): Don't propagate exported_p here.
+ (module_state::write_readme): Show exportedness of imports.
+ (module_state::read_imports): Use resolve_alias.
+ (module_state::read_config): Set interface_p.
+ (module_state::read): Reformat.
+ (module_state::set_import): Correctly set imports.
+ (module_state::direct_import): Not here.
+ (declare_module): Set interface_p.
+ gcc/testsuite/
+ * g++.dg/modules/import-1_e.C: Adjust scan.
+
+ gcc/cp/
+ * module.cc (bytes_out::set_crc): Only set if crc_ptr != 0.
+ (module_state::write_readme): Update for partitions.
+ (module_state::{read,write}_config): Write exported_p for
+ partitions.
+ (finish_module_parse): Write partitions.
+ gcc/testsuite/
+ * g++.dg/modules/atom-decl-2.C: Adjust.
+ * g++.dg/modules/atom-pragma-3.C: Adjust.
+ * g++.dg/modules/mod-decl-1.C: Adjust.
+ * g++.dg/modules/mod-decl-3.C: Adjust.
+
+ gcc/cp/
+ * module.cc (module_state::direct_import): Add LAZY parm, use it
+ rather than legacy_p. Never expect a has_bmi file.
+ (declare_module): Always add to pending imports.
+ * parser.c (cp_parser_translation_unit): Expect a deferred import
+ for a legacy module.
+
+ gcc/cp/
+ * cp-tree.h (module_has_bmi_p): New.
+ * module.cc (module_state::{is_interface,interface_p}): Rename to ...
+ (module_state::{is_primary,primary_p}): ... here. Adjust users.
+ (module_state::read_cluster): Partitions need deduping too.
+ (declare_module): Set primary_p, partition_p.
+ (process_pending_imports): Adjust.
+
+ gcc/cp
+ * cp-tree.h (module_export_depth, module_purview): Replace with ...
+ (module_kind): ... this.
+ (MK_MODULE, MK_GLOBAL, MK_INTERFACE, MK_PARTITION, MK_EXPORTING): New.
+ (module_purview_p, not_module_p, module_legacy_p)
+ (module_interface_p, module_partition_p, module_global_p)
+ (module_exporting_p): Adjust.
+ (declare_module): Return bool.
+ * module.cc (module_export_depth, module_purview): Replace with ...
+ (module_kind): ... this.
+ (module_maybe_interface_p): Delete.
+ (module_state::direct_import, declare_module)
+ (module_begin_main_file, process_deferred_imports)
+ (finish_module_parse): Adjust.
+ * name-lookup.c (make_namespae): Use module_global_p.
+ * parser.c (cp_parser_module_declaration): Return bool. Deal with
+ GMF introducer.
+ (cp_parser_translation_unit, cp_parser_module_export): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/circ-1_d.C: Adjust.
+ * g++.dg/modules/mod-decl-1.C: Adjust.
+ * g++.dg/modules/mod-decl-5_b.C: Adjust.
+ * g++.dg/modules/p0713-3.C: Adjust.
+
+2019-01-07 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cxx-mapper.cc (module2bmi): Don't map ':'.
+ * module.cc: Update design description.
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp (decode_mod_spec): Don't map ':'
+
+2019-01-03 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.h (match_global_decl): Rename to ...
+ (match_mergeable_decl): ... this. Add global/partition flag.
+ * name-lookup.c (match_global_decl): Rename to ...
+ (match_mergeable_decl): ... this. Adjust.
+ * module.cc: Rename mme to mergeable.
+ (trees_{in,out}::tree_mergeable): Stream global/partition
+ indicator. Call match_mergeable_decl.
+
+ gcc/cp/
+ * name-lookup.c (module_binding_slot): Break apart to ...
+ (search_imported_binding_slot, get_fixed_binding_slot)
+ (append_imported_binding_slot): ... these.
+ (fixed_module_binding_slot): Delete.
+ (do_pushdecl, match_global_decl, import_module_binding)
+ (set_module_binding, get_binding_or_decl, get_imported_namespace)
+ (reuse_namespace, make_namespace_finish)
+ (add_imported_namespace): Update for new API.
+
+2019-01-02 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (module_binding_slot): Use FIXED parm.
+
+ gcc/cp/
+ * name-lookup.c (module_binding_slot): Add FIXED parm, adjust all
+ callers.
+
+ gcc/cp/
+ * module.cc: Rename gme -> mme, because partitions.
+
+ gcc/cp/
+ * cp-tree.h (DECL_MODULE_PURVIEW_P): Delete.
+ (MAYBE_DECL_MODULE_PURVIEW_P): Delete.
+ * mangle.c (maybe_write_module): Adjust.
+
+ gcc/testsuite/
+ * g++.dg/modules/legacy-8_[abcde].[CH]: New.
+
+ gcc/cp/
+ * cxx-mapper.cc (server): Workaround PR c++/88664.
+
+ Merge trunk r267509.
+ * module.cc, cxx-mapper.cc: Update copyright years.
+
+2018-12-20 Nathan Sidwell <nathan@acm.org>
+
+ MODULE_VEC has alloc field too.
+ gcc/cp/
+ * cp-tree.h (MODULE_VECTOR_ALLOC_CLUSTERS): New.
+ (MODULE_VECTOR_NUM_CLUSTERS): Adjust.
+ (struct tree_module_vec): Adjust.
+ * tree.c (make_module_vec): Adjust.
+ * name-lookup.c (module_binding_slot): Extend vector if it fits.
+ * ptree.c (cxx_print_xnode): Cope with lazy module-vector slots.
+
+ gcc/cp/
+ * module.cc (module_state::check_read): Fix bogus note.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-1_c.C: Add bogus note test.
+
+ gcc/cp/
+ * module.cc (module_state::remap): New member var.
+ (module_state::remap_partitions): New.
+ (module_state::write_imports): Skip partitions.
+ (module_state::write): Remap partitions.
+
+2018-12-19 Nathan Sidwell <nathan@acm.org>
+
+ Partition parsing. Don't get excited!
+ gcc/cp/
+ * module.cc (get_module): Attach current module for null
+ partition.
+ * parser.c (cp_parser_module_name): Parse partitions
+ gcc/testsuite/
+ * g++.dg/modules/part-1_[ab].C: New.
+
+2018-12-18 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (get_module): Add partition arg.
+ * module.cc (module_state): Add partition flag.
+ (module_state_hash): Hash & compare partition flag.
+ (module_state::mangle, get_module, attach): Add partition awareness.
+
+ gcc/cp/
+ * cp-tree.h (get_module): Default NULL parent.
+ * lex.c (module_preprocess_token): Adjust get_module call.
+ * module.cc (get_module, module_begin_main_file): Likewise.
+ * parser.c (cp_parser_module_name): Likewise.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_decl): Remove some remaining
+ non-atomic template hacks.
+
+ gcc/cp/
+ * module.cc (module_state::write): Sort dependency table.
+
+ gcc/cp
+ * module.cc (module_cpp_undef): Don't zap undef hook if we don't
+ own it.
+ gcc/c-family/
+ * c-opts.c (c_common_init): Don't unilaterally clobber undef
+ callback.
+ * c-ppoutput.c (cb_undef): Call lang_hook if non-null.
+ gcc/testsuite/
+ * g++.dg/modules/dir-only-1.C: New.
+
+ Merge trunk r267229.
+
+2018-12-17 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::{write,mark}_template_def): Delete.
+ (trees_out::{write,mark}_definition): Adjust.
+ (trees_in::read_template_def): Delete.
+ (trees_in::read_definition): Adjust.
+
+ Kill old broken global module merge code.
+ gcc/cp/
+ * module.cc (trees_in::finish): Remove DECL merging.
+ * name-lookup.c (merge_global_decl): Delete.
+ * name-lookup.h (merge_global_decl): Delete decl.
+
+ Atomic TEMPLATE_DECL + DECL_TEMPLATE_RESULT.
+ gcc/cp/
+ * module.cc (trees_out::mark_node): Remove temp tpl hack.
+ (trees_out::tree_decl): Remove tt_template remarking.
+ (trees_out::tree_value): Atomic TEMPLATE_DECL.
+ (trees_in::tree_node): Likewise.
+ (trees_out::{mark,read,write}_template_def): Move DECL_LIST to ...
+ (trees_out::{mark,read,write}_class_def): ... here.
+ (trees_{in,out}::tree_gme): Don't mark inner decl.
+ gcc/testsuite/
+ * leg-merge-8_[abc].[CH]: New.
+
+ Intermediate step to atomic TEMPLATE_DECL + DECL_TEMPLATE_RESULT.
+ Breaks leg-merge-7_c.C,
+ gcc/cp/
+ * module.cc (tree_tag): Add tt_template, tt_implicit_template.
+ (node_template_info): Not a member fn.
+ (trees_out::{mark_node,mark_gme}): Mark the template.
+ (trees_{in,out}::tree_decl): Do implicit_template.
+
+2018-12-14 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (trees_out::node_template_info): New, broken out of
+ ...
+ (trees_out::tree_decl): ... here. Use it.
+
+ gcc/cp/
+ * module.cc (trees_out::tree_decl): Adjust TEMPLATE_INFO access.
+
+2018-12-13 Nathan Sidwell <nathan@acm.org>
+
+ Function template deduping
+ gcc/cp/
+ * module.cc (trees_{in,out}::tpl_parms): New.
+ (trees_out::mark_gme): Mark template result too.
+ (trees_{in,out}::tree_gme): Do templates.
+ (module_state::write_cluster): Any decl can be a GME.
+ * name-lookup.c (match_global_decl): Do template matching.
+ gcc/testsuite/
+ * g++.dg/modules/leg-merge-7_[abc].[HC]: New.
+
+2018-12-04 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (slurping::remap): Heap allocate.
+ (gt_pch_nx): Delete hacks.
+
+ gcc/cp/
+ * module.cc (tree_tag): Replace tt_named_type with
+ tt_{primary,secondary}_type.
+ (trees_out::tree_type): Not recursive.
+ (trees_in::tree_node): Adjust tt_named_type case.
+
+ Class deduping
+ gcc/cp/
+ * module.cc (trees_in::tree_node): Record defn to skip.
+ (trees_in::is_skip{,pable}_defn): Fix int/long ptr const.
+ (module_state::read_{function,var,class}_def): Add skip checking.
+ gcc/testsuite/
+ * g++.dg/modules/leg-merge-6_[abc].[HC]: New.
+
+ TYPE streamed with its implicit typedef.
+ gcc/cp/
+ * module.cc (trees_in::reserve_gmes): Only 2 per.
+ (trees_in::{set,get}_backref_gme): Delete.
+ (trees_in::existing_gme): Rename to ...
+ (trees_in::is_existing_gme): ... this. Return bool.
+ (trees_out::mark_gme): Adjust assert.
+ (trees_in::insert): Add assert.
+ (trees_out::tree_type): Always look at typedef.
+ (trees_out::tree_value): Stream type with its decl.
+ (trees_in::tree_node): Likewise.
+ (trees_{in,out}::tree_gme): Adjust.
+
+ gcc/cp/
+ * module.c (module_state::{read,write,mark}_enum): Take DECL.
+ (module_state::{read,write,mark}_definition): Adjust.
+
+ gcc/cp/
+ * class.c (layout_class_type): Base type has same module as owner.
+ * module.c (module_state::{read,write,mark}_class): Take DECL.
+ (module_state::{read,write,mark}_definition): Adjust.
+ (topmost_decl, get_module_owner): Don't look at TYPE_CONTEXT.
+
+ gcc/cp/
+ * class.c (build_base_field_1): Refactor.
+ (layout_class_type): Give as_base type a name.
+ * decl.c (initialize_predefined_identifiers): Make as_base name
+ unpronouncable.
+ * module.cc (tree_tag): Delete tt_as_base.
+ (trees_out::mark_node): Don't expect fake base here.
+ (trees_out::tree_decl): Write fake base as pseudo-named.
+ (trees_out::tree_type): Don't handle fake base specially here.
+ (trees_in::tree_node): Read fake base as pseudo-named. Delete
+ tt_as_base handling.
+ (module_state::mark_class_def): Adjust.
+
+ gcc/cp/
+ * module.cc (trees_in): Rename bad_decls to skip_defns.
+ (trees_in::{record,is}_bad_decl): Delete.
+ (trees_in::{record,is,any}_skip_defn): New.
+ (module_state::is_ignorable_defn): Rename to ...
+ (module_state::is_skippable_defn): Key off namespace-scope decl.
+ (topmost_decl): New.
+ (module_state::read_function_def): Adjust.
+
+2018-11-30 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r266680.
+
+ gcc/cp/
+ * module.cc: Fix enums with trailing commas.
+ * name-lookup.c (match_global_decl): Avoid unused arg warning.
+
+ gcc/cp/
+ * module.cc (module_state::write_binfos): Binfo was not visited.
+
+ gcc/cp/
+ * module.cc (module_state::write_binfos): Always write number of
+ vbases.
+ (module_state::read_binfos): Don't smash the type here.
+ (module_state:{read,write}_class_def): Adjust binfo serializing.
+
+ gcc/cp/
+ * class.c (fixup_type_variants): Copy TYPE_SIZE & TYPE_SIZE_UNIT.
+ (finish_struct): Use fixup_type_variants for template.
+ * module.cc (trees_{in.out}::core_vals): Don't serialize TYPE_SIZE
+ and TYPE_SIZE_UNIT for classes.
+ (trees_in::finish_type): Don't layout clesses here.
+ (module_state::{read,write}_class_def): Do it here.
+
+ gcc/cp/
+ * module.cc (trees_in): Add bad_decls and post_decls.
+ (trees_in::{record,is}_bad_decl): New.
+ (trees_in::post_process): New.
+ (module_state::is_{matching_decl,ignorable_defn}): New.
+ (trees_in::tree_node): Use former.
+ (module_state::read_function_def): Use latter. Register for
+ post-processig.
+ (module_state::read_cluster): Post process.
+
+2018-11-29 Nathan Sidwell <nathan@acm.org>
+
+ Merge global module function definitions.
+ gcc/cp/
+ * modules.cc (module_state::write_function_def): Don't rely on
+ decl's form.
+ (module_state::read_function_def): Allow multiple decls.
+ gcc/testsuite/
+ * g++.dg/modules/leg-merge-5_[abc].[CH]: New.
+
+ gcc/cp/
+ * modules.cc (module_state::check_read): Adjust, print inform of
+ outer location.
+ (module_state::write_cluster): defns are decls too.
+ (lazy_load_binding): Don't inform here.
+ gcc/testsuite/
+ * g++.dg/modules/leg-merge-4_c.C: Adjust regexps.
+
+ Fixing GME classes
+ gcc/cp
+ * module.cc (trees_in::tree_node_vals): Add specific bool arg,
+ adjust.
+ (trees_in::existing_gme): Return cookie.
+ (trees_in::{get,set}_backref_gme): New.
+ (trees_out::mark_gme): Mark typedef target.
+ (trees_out::tree_type): Don't be fooled by GME TYPE_NAME.
+ (trees_out::tree_value): Write GME type code.
+ (trees_in::tree_node): Use backref channel for typedefs.
+ gcc/testsuite/
+ * g++.dg/modules/leg-merge-4_c.C: Adjust.
+
+ Some ODR checking of GMEs
+ gcc/cp/
+ * module.cc (trees_in::tree_node): Check type of matched GME.
+ (lazy_load_binding): Add note if diagnostics emitted.
+ * name-lookup.c (name_lookup::search_namespace_only): Forward
+ iterate over slots.
+ (match_global_decl): Return close matches.
+ gcc/testsuite/
+ * g++.dg/modules/leg-merge-4_[abc].[CH]: New.
+
+ Global module var declaration merging.
+ gcc/cp/
+ * module.cc (trees_in::reserve_gmes): Add headroom.
+ (trees_{in,out}::tree_gme): Deal with VAR_DECLs.
+ (module_state::write_cluster): Likewise.
+ * name-lookup.c (match_global_decl): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/leg-merge-3_[abcd].[CH]: New.
+
+ Global module class declaration merging.
+ gcc/cp/
+ * module.cc (trees_in::start): Check code & category.
+ (trees_in::tree_node): Allow gme types. Refactor gme/node
+ reading.
+ (trees_{in,out}::tree_gme): Allow implicit typedefs.
+ (module_state::write_cluster): GME Implicit typedefs too.
+ * name-lookup.c (match_global_decl): Match TYPE_DECLs too.
+ gcc/testsuite/
+ * g++.dg/modules/leg-merge-2_[abc].[CH]: New.
+
+2018-11-28 Nathan Sidwell <nathan@acm.org>
+
+ Global module function declaration merging.
+ gcc/cp
+ * module.cc (tree_tag): Add tt_gme.
+ (trees_in::gmes): New data member.
+ (trees_in::tree_node_specific): Add no-alloc flag.
+ (trees_in::{tree_gme,reserve_gmes,existing_gme}): New.
+ (trees_out::walk_kind): Add WK_gme.
+ (trees_out::{mark,tree}_gme): New.
+ (trees_out::{ref_node,insert}): Deal with WK_gme walk.
+ (trees_out::tree_{decl,value}): Likewise.
+ (trees_in::tree_node): Add tt_gme support.
+ (cluster_tag): Add ct_gme.
+ (module_state::{read,write}_cluster): Add gme support.
+ * name-lookup.h (match_global_decl): Declare.
+ (add_module_decl): Declare.
+ * name-lookup.c (match_global_decl): New.
+ (set_module_binding): Don't dedup here.
+ (add_module_decl): New.
+ gcc/testsuite/
+ * g++.dg/modules/leg-merge-1_[abcd].[CH]: New.
+
+ gcc/cp/
+ * modules.cc (trees_{in,out}::tree_node_bools): Break out
+ tree_node_specific.
+ (trees_out::ref_force_{lwm.hwm}): Delete.
+ (trees_out::gme_lwm): New.
+ (trees_out::insert): Change force to walk_kind.
+ (trees_out::mark_node): Drop walk_kind arg.
+ (trees_out::{,un}mark_trees): Adjust.
+ (trees_out::{mark_node,insert}): Adjust.
+ (trees_out::start): Drop CODE parm.
+ (trees_out::{ref_node,tree_ctx}): Adjust.
+ (trees_out::tree_value): Adjust.
+ (trees_{in,out}::tree_node): Likewise.
+ (module_state::write_binfos): Likewise.
+ (module_state::mark_{class,enum}_def): Adjust.
+ (module_state::{read,write}_cluster): Adjust.
+ (module_state::find_dependencies): Adjust.
+
+2018-11-26 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * modules.cc (trees_{in,out}::tree_node_raw): Bifurcate to ...
+ (trees_{in,out}::tree_node_{bools,vals}): ... these.
+ (trees_out::tree_value): Adjust.
+ (trees_in::tree_node): Likewise.
+
+ gcc/cp/
+ * modules.cc (trees_out::tree_ref): Rename to ...
+ (trees_out::ref_node): ... this.
+ (trees_out::tree{value,decl,type,namespace}): Replace FORCE
+ paramenter with walk_kind.
+ (trees_out::tree_node): Adjust.
+ (module_state::mark_{class,enum,template}_def): Adjust.
+ (module_state::write_cluster): Adjust.
+ (module_state::find_dependencies): Adjust.
+
+ gcc/cp/
+ * modules.cc (trees_out::walk_kind): New enum.
+ (trees_out::tree_ref): Return it.
+ (trees_out::tree_{ctx,decl,node}): Use it.
+
+ gcc/cp/
+ * modules.cc (trees_out::ref_force_{lwm.hwm}): New ref values.
+ (trees_out::{,un}mark_trees): Use them.
+ (trees_out::{mark_node,tree_ref}): Likewise.
+
+2018-11-20 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * modules.cc (dumper): Rename dump flags. Adjust throughout.
+
+2018-11-19 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (handle_module_option): Handle OPT_fmodule_legacy.
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp: Insert /./ in legacy names.
+ * g++.dg/modules/*.H: Adjust as necessary.
+
+ Merge trunk r266271.
+
+2018-11-15 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r266161.
+
+ gcc/
+ * doc/invoke.texi: Rename cookie->ident, people read too much into
+ 'cookie'.
+
+2018-11-07 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * parser.c (cp_parser_translation_unit): Refactor.
+
+ Implement d0924r1 (to be written).
+ gcc/cp/
+ * lex.c (init_reswords): Set D_CXX_MODULES mask.
+ * module.cc (declare_module): Check purview state.
+ * parser.c (cp_parser_translation_unit): Module and import are
+ always conditional.
+ (cp_parser_tokenize): Likewise.
+ gcc/
+ * doc/invoke.texi (fno-module-keywords): Delete.
+ gcc/c-family/
+ * c-common.c (c_common_reswords): Don't mark import, module for CXXWARN.
+ * c.opt (fmodule-keywords): Delete.
+ gcc/testsuite/
+ * g++.dg/modules/atom-decl-1.C: Delete.
+ * g++.dg/modules/keyword-1_[ab].C: Adjust.
+ g++.dg/modules/mod-decl-[13].C: Adjust.
+ g++.dg/modules/p0713-3.C: Adjust.
+
+ gcc/cp/
+ * cp-tree.h (module_gmf_p): Adjust.
+ (not_module_p): New.
+ * module.cc (declare_module): Don't deal with starting GMF.
+ * parser.c (cp_parser_translation_unit): Adjust module_purview
+ values.
+
+2018-11-04 Nathan Sidwell <nathan@acm.org>
+
+ Implement Bjarne's suggested solution.
+ gcc/cp/
+ * parser.cc (cp_parser_translation_unit): No tentative parsing.
+ Look for following ::.
+ (cp_parser_module_{name,declaration,import}): Adjust.
+ (cp_parser_tokenize): Adjust, tokenize more.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Update.
+ gcc/testsuite/
+ * g++.dg/modules/cpp-5_b.C: Update.
+ * g++.dg/modules/keyword-1_[ab].C: Likewise.
+
+2018-11-02 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * modules.c (module_state::read): Interface can be lazy too.
+
+ gcc/cp/
+ * name-lookup.c (STAT_EXPORTS): Rename to ...
+ (STAT_VISIBLE): ... this.
+ (name_lookup::search_namespace_only, name_lookup::add_module_fns)
+ (check_module_override, set_module_binding): Adjust.
+ * module.cc (module_state::read_cluster): Likewise.
+
+ gcc/cp/
+ * cp-tree.h (module_may_redeclare): Declare.
+ * decl.c (duplicate_decls): Check moduleness.
+ * module.cc (module_state::read_cluster): Adjust export tail.
+ (module_may_redeclare): New.
+ * name-lookup.c (name_lookup::search_namespace_only): Check
+ STAT_TYPE_VISIBLE_P.
+ (update_binding): Allow NULL LEVEL.
+ (check_module_override): New.
+ (do_pushdecl): Deal with module overrides.
+ (set_module_binding): Adjust. Don't push interface bindings.
+ gcc/testsuite/
+ * g++.dg/modules/ambig-1_[ab].C: New.
+ * g++.dg/modules/macro-4_e.C: Avoid error.
+ * g++.dg/modules/namespace-2_b.C: Remove xfail.
+
+ gcc/cp/
+ * module.cc (module_state::read_cluster): Preserve export_tail.
+ * name-lookup.c (STAT_HACK_TYPE_VISIBILE_P): New.
+ (name_lookup::process_module_binding): Reimplement.
+ (name_lookp::search_namespace_only): Likewise.
+ (set_module_binding): Adjust when STAT_HACK_EXPORTS is set.
+
+ gcc/cp/
+ * decl.c (duplicate_decls): Refactor export check.
+ gcc/testsuite/
+ * g++.dg/modules/export-1.C: New.
+
+ gcc/cp/
+ * decl.c (duplicate_decls): Refactor checks.
+ * name-lookup.c (name_lookup::process_module_binding): Only pubic
+ namespaces are shared.
+ gcc/testsuite/
+ * g++.dg/lookup/crash6.C: Adjust error
+ * g++.dg/parse/crash38.C: Likewise.
+
+2018-11-01 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r265714.
+ Move to autoconf 2.69.
+
+ gcc/cp/
+ * module.cc (module_state::read): Don't read macros for
+ preprocessed innput.
+ (module_state::set_import): Adjust legacy test.
+
+2018-10-31 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_state::check_not_purview): Check name.
+ (mangle_module, module_name): Likewise.
+ (declare_module): Set parent, not alias.
+
+ Merge trunk r265692.
+
+ Merge trunk r265679.
+
+ gcc/cp/
+ * cp-tree.h (OVL_EXPORT_P): Delete.
+ (OVL_DEDUP_P): Move to lang flag 0.
+ * module.cc (module_state::read_cluster): Don't set OVL_EXPORT_P.
+ * tree.c (ovl_copy): Don't copy OVL_EXPORT_P.
+
+2018-10-30 Nathan Sidwell <nathan@acm.org>
+
+ Module interface gets own mod number
+ gcc/cp/
+ * cp-tree.g (ovl_iterator::set_dedup): New.
+ * module.cc (module_state::{interface_p,is_interface}): New.
+ (module_state::check_not_purview): Adjust.
+ (mangle_module, module_name): Likewise.
+ (module_state::read_cluster): Adjust.
+ (module_state::read): Adjust.
+ (module_state::{set_import,direct_import}): Adjust import setting.
+ (declare_module): Module interface gets number.
+ * name-lookup.h (set_module_binding): Add iface parameter.
+ * name-lookup.c (name_lookup::search_namespace): Fix indexing.
+ (set_module_binding): Insert interface decls.
+ gcc/testsuite/
+ * g++.dg/modules/namespace-4_b.C: Remove xfails.
+ * g++.dg/modules/static-1_b.C: Remove xfails.
+
+ gcc/cp/
+ * cp-tree.h (OVL_HAS_USING_P): Rename to ...
+ (OVL_DEDUP_P): ... here.
+ * name-lookup.c (name_lookup::add_overload)
+ (get_class_binding_direct): Adjust.
+ * tree.c (ovl_make, ovl_copy, ovl_insert, lookup_maybe_add): Adjust.
+
+ Less ordered overloads
+ gcc/cp/
+ * cp-tree.h (ovl_sort): Declare.
+ * name-lookup.h (extract_module_binding): Binding is reference.
+ * tree.c (ovl_insert): Don't sort non-hidden members.
+ (ovl_splice, ovl_sort): New.
+ * name-lookup.c (extract_module_binding): Binding is reference.
+ Sort the binding.
+ * ptree.c (cxx_print_xnode): Print MODULE_VEC name.
+ * module.cc (module_state::add_writables): Binding is reference.
+ gcc/testsuite/
+ * g++.dg/lookup/friend21.C: New.
+
+2018-10-29 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (ovl_insert): Drop export_tail parm.
+ * name-lookup.c (update_binding): No need to track export_tail.
+ * tree.c (ovl_insert): Drop export_tail parm.
+ * ptree.c (cxx_print_xnode): Output formatting.
+
+ gcc/cp/
+ * module.cc (module_state::read_imports): Do in one pass.
+
+ gcc/cp/
+ * module.cc (module_state::direct_import): Drop DEFERRABLE arg.
+ ({import,declare}_module): Deal with deferring here.
+ (process_deferred_imports): Adjust direct_import call.
+
+2018-10-27 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r265554.
+
+2018-10-26 Nathan Sidwell <nathan@acm.org>
+
+ Anon namespaces
+ gcc/cp/
+ * module.cc (elf_out::strtab_write): Fallback to assembler name.
+ (elf_out::name): Allow 0 name.
+ (dumper::impl::nested_name): Fallback to assembler name.
+ (module_state::{read,write}_namespaces): Write assembler name for
+ anons.
+ * name-lookup.h (add_imported_namespace): add anon-name arg.
+ * name-lookup.c (get_imported_namespace): Look in current slot
+ too.
+ (make_namespace): Add anon-name arg, calculate as necessary.
+ (add_imported_namespace): add anon-name arg.
+ gcc/testsuite/
+ * gcc/testsuite/g++.dg/modules/namespace-4_[abc].C: New.
+
+ Statics on bindings
+ gcc/cp/
+ * module.cc (depset::hash::add_binding): Take overload and type
+ values, do pruning here.
+ (module_state::write_cluster): Reorder binding emission.
+ (module_state::read_cluster): Determine export_tail here.
+ (module_state::add_writables): Adjust.
+ * cp-tree.h (ovl_iterator::export_tail): Delete.
+ * name-lookup.h (extract_module_decls): Rename to ...
+ (extract_module_binding): ... here. Return overload set.
+ * name-lookup.c ( (extract_module_decls): Rename to ...
+ (extract_module_binding): ... here. Don't prune here.
+ (set_module_binding): Simplify.
+ (lookup_by_ident, get_lookup_ident): Simplify.
+ gcc/testsuite/
+ * g++.dg/modules/static-1_b.C: XFAIL error
+ * gcc/testsuite/g++.dg/modules/unnamed-1_[ab].C: Adjust scans.
+ * gcc/testsuite/g++.dg/modules/unnamed-2.C: Likewise.
+
+ gcc/cp/
+ * cp-tree.h (module_purview): Declare.
+ (module_purview_p, module_interface_p, module_gmf_p): Inline
+ predicates.
+ * module.cc (module_purview): Extern.
+ (module_purview_p, module_interface_p): Delete.
+
+ p1103 no implicit namespace export
+ gcc/cp/
+ * module.cc (trees_out::mark_node): Allow namespace marking.
+ (trees_out::tree_ctx): Namespaces may be forced.
+ (trees_out::tree_namespace): Reimplement.
+ (trees_out::tree_{type,decl}): Adjust tree_ctx calls.
+ (module_state::write_cluster): Likewise.
+ (module_state::{read,write}_namespace): Adjust.
+ (module_state::find_dependencies): Also walk namespaces.
+ * name-lookup.c (name_lookup::process_binding): Fixup hidden
+ namespaces.
+ (implicitly_export_namespace): New.
+ (do_pushdecl, push_namespace): Call it.
+ (add_imported_namespace): Add export_p arg, adjust.
+ * name-lookup.h (add_imported_namespace): Add export_p arg.
+ * ptree.c (cxx_print_node): Adjust MODULE_VEC printing.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-1_b.C: Adjust scans.
+ * g++.dg/modules/namespace-[23].C: Split to ...
+ * g++.dg/modules/namespace-[23]_[ab].C: ... these.
+
+2018-10-25 Nathan Sidwell <nathan@acm.org>
+
+ Rationalize bool ok == true
+ gcc/cp/
+ * module.cc (elf::has_error): Rename to ...
+ (elf::get_error): ... this. Update all callers.
+ (elf::end): Return true == ok. Update (indirect) callers.
+ (module_state::check_read): Likewise. Update callers.
+ (module_state::lazy_load): Zap slot on failure.
+ * name-lookup.c (get_binding_or_decl): No need to assert here.
+
+ gcc/cp/
+ * module.cc (module_state::write_readme): Tidy.
+ (module_state::{add_writables,find_dependencies): Dump
+ DEPENDENCIES.
+ (module_state::direct_import): Always pop dump.
+ * ptree.c (cxx_print_decl): Print DECL_MODULE_EXPORT_P.
+ gcc/c-family/
+ * c-ppoutput.c (scan_translation_unit): Remove unused var.
+
+2018-10-24 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (enum tree_tag): Add tt_namespace.
+ (trees_out::tree_namespace): Use it.
+ (trees_in::tree_node): Grok it.
+ * name-lookup.h (get_imported_namespace): Declare.
+ * name-lookup.c (get_imported_namespace): New.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-1_c.C: Adjust.
+
+ gcc/cp/
+ * module.cc (trees_out::{tree_{decl,type}): Drop owner arg.
+ (trees_out::tree_namespace): New.
+ (trees_out::ctx): Take owning-decl arg, use tree_namespace.
+ (trees_out::{core_vals,tree_binfo}): Adjust.
+ (trees_out::{read,write}_cluster): Adjust.
+
+2018-10-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc: Add dumper::TREES to tree streamers.
+ gcc/testsuite/
+ * g++.dg/modules/: Add -uid to several lang dumps.
+
+ gcc/cp/
+ * module.cc (slurping::remap_module): New.
+ (depset::hash::add_binding): Don't deal with namespaces here.
+ (module_state::write_namespaces): No longer static. Write
+ locations.
+ (module_state::read_namespaces): Read locations.
+ (module_state::add_writables): Deal with namespaces here.
+ (module_state::find_dependencies): Don't walk namespaces.
+ * name-lookup.h (get_lookup_ident, find_by_ident): Reorder args,
+ update callers.
+ (add_imported_namespace): Add location arg.
+ * name-lookup.c (module_binding_slot): Fix initial alloc.
+ (extract_module_decls): Return namespace.
+ (get_binding_or_decl, lookup_by_ident, get_lookup_ident): Reorder
+ args.
+ (make_namespace): Add loc & module args.
+ (push_namespace): Adjust.
+ (add_imported_namespace): Adjust.
+ * ptree.c (cxx_print_decl): Avoid final linefeed.
+ (cxx_print_xnode): Adjust MODULE_VEC
+ gcc/
+ * doc/invoke.texi: Document -fdump-lang-module options.
+ gcc/testsuite/
+ * g++.dg/modules/namespace-2.C: Adjust.
+
+2018-10-22 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (module_exporting_level): Delete.
+ (module_export_depth): Declare.
+ (module_exporting_p): New.
+ ({push,pop}_module_export): Adjust, make inline.
+ * module.cc (export_depth): Replace with ...
+ (module_exporting_level): ... this.
+ ({push,pop}_module_export): Delete.
+ (set_module_owner, import_module, module_begin_main_file)
+ (finish_module_parse): Adjust.
+ * parser.cc (cp_parser_module_export): Adjust.
+
+ gcc/cp/
+ * lex.c (module_preprocess_token): Fix padding/comment states.
+ * parser.c (cp_parser_tokenize): Reduce is_decl states.
+
+2018-10-21 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r265362.
+
+ Add -fno-module-keywords.
+ gcc/
+ * doc/invoke.text (fmodule-keywords): Document.
+ gcc/cp/
+ * lex.c (init_reswords): Don't add module keywords if
+ fno-module-keywords.
+ *module_preprocess_token): Adjust.
+ * module.cc (module_State_config:get_opts): Drop fmodule-keywords.
+ * parser.c (cp_parser_import_declaration): Allow to be tentative.
+ (cp_parser_translation_unit): Allow module & import to not be
+ keywords. Tentatively parse import declaration.
+ (cp_parser_module_keyword): Commit to tentative parse.
+ (cp_parser_tokenize): Allow import to not be a keyword.
+ gcc/testsuite/
+ * g++.dg/modules/keywords-1_[ab].C: New.
+
+ gcc/cp/
+ * lex.c (module_preprocessing_token): Pay attention to braces.
+ * parser.c (cp_parser_tokenize): Return ptr to stopping import.
+ Pay attention to CPP_HEADER tokenization.
+ (cp_parser_translation_unit): Adjust.
+
+ gcc/cp/
+ * parser.c (cp_parser_diagnose_invalid_type_name): Use C_RID_CODE
+ more.
+
+2018-10-19 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * parser.c (cp_parser_tokenize): Don't stop after nested
+ module/import decl.
+
+2018-10-18 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * parser.c (cp_parser_translation_unit): Adjust GMF deferred
+ imports.
+ (cp_parser_tokenize): Only pay attention to module/export at start
+ of decl.
+
+ gcc/cp/
+ * parser.c (cp_parser_translation_unit): Process deferred imports
+ here ...
+ (cp_parser_tokenize): ... not here.
+ gcc/testsuite/
+ * g++.dg/modules/macloc-1_d.C: Correct regexp.
+
+ Expunge -fmodules-atom as a thing.
+ gcc/
+ * doc/invoke.texi (fmodules-atom): Delete.
+ gcc/cp/
+ * cp-tree.h (modules_legacy_p): Adjust.
+ * module.cc: Expunge OPT_fmodules-atom.
+ gcc/c-family/
+ * c.opt (fmodules-ts): Adjust.
+ (fmodules-atom): Alias fmodules-ts
+ (fmodule-legacy*): Adjust.
+
+ gcc/testuite/
+ * g++.dg/modules/modules.exp (mode-list): Delete.
+ (main): Don't use mode-list.
+ * g++.dg/modules/: Add -fmodules-ts to many tests.
+
+ Remove ATOM as a distinction.
+ gcc/c-family/
+ * c-cppbuiltin.c (c_cpp_builtins): Remove __cpp_modules_{atom,ts}.
+ * c.opt (fmodules-ts): Adjust.
+ gcc/cp/
+ * cp-tree.h (modules_atom_p): Delete.
+ * module.cc (module_state::write_readme): Drop ATOM distinction.
+ (module_state::{read,write}_config): Likewise.
+ (init_module_processing): Drop atom distinction.
+ (handle_module_option): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/: Drop -fmodules-atom from all tests.
+
+ Simplify translate-include hook.
+ libcpp/
+ include/cpplib.h (cpp_translate_include_t): Delete.
+ (struct cpp_calbacks): Adjust translate_include decl.
+ gcc/
+ * langhooks.h (struct lang_hooks): Adjust preprocess_translate_include.
+ gcc/c-family
+ * c-opts.c (c_common_post_options): Adjust.
+ gcc/cp/
+ * cp-tree.h (maybe_import_include): Replace by ...
+ (module_translate_include): ... this.
+ * cp-lang.c (LANG_HOOKS_PREPROCESS_TRANSLATE_INCLUDE): Adjust.
+ * module.c (module_state::do_import): Check read on all top level
+ imports.
+ (do_translate_include): Rename to ...
+ (module_translate_include): ... this. Explicitly turn off.
+ (maybe_import_include): Delete.
+
+ Preamble on module
+ gcc/cp/
+ * parser.c (cp_parser_import_declaration): Always check past_preamble.
+ gcc/testsuite/
+ * g++.dg/modules/atom-norescan-1.C: Delete.
+ * g++.dg/modules/atom-pragma-1.C: Not atom-specific.
+ * g++.dg/modules/atom-pragma-3.C: Likewise.
+ * g++.dg/modules/atom-preamble-1.C: Likewise.
+ * g++.dg/modules/atom-preamble-2_a.C: Likewise.
+ * g++.dg/modules/atom-preamble-2_b.C: Likewise.
+ * g++.dg/modules/atom-preamble-2_c.C: Likewise.
+ * g++.dg/modules/atom-preamble-2_d.C: Likewise.
+ * g++.dg/modules/atom-preamble-2_e.C: Likewise.
+ * g++.dg/modules/atom-preamble-3.C: Likewise.
+ * g++.dg/modules/atom-preamble-4.C: Likewise.
+ * g++.dg/modules/mod-indirect-1_b.C: Adjust.
+
+ No export { import x; }
+ gcc/cp/
+ * parser.c (cp_parser_tokenize): Drop nested arg, adjust.
+ (cp_parser_translation_unit): Don't deal with outermost export { block.
+ gcc/testsuite/
+ * g++.dg/modules/err-1_a.C: Adjust.
+ * g++.dg/modules/err-1_c.C: Adjust.
+ * g++.dg/modules/import-1_c.C: Adjust.
+ * g++.dg/modules/mod-decl-1.C: Adjust.
+
+
+ No atom preamble in non-module
+ gcc/cp/
+ * parser.c (cp_parser_translation_unit): Preamble is tristate.
+ (cp_parser_module_name): Add FOR_MODULE arg, issue error.
+ (cp_parser_module_declaration): Adjust.
+ (cp_parser_import_declaration): Adjust twice.
+ gcc/testsuite/
+ * g++.dg/modules/atom-decl-[23].C: Adjust.
+ * g++.dg/modules/legacy-6_f.C: Remove XFAIL.
+
+2018-10-17 Nathan Sidwell <nathan@acm.org>
+
+ gcc/testsuite/
+ * g++.dg/modules/err-2_[ab].*: Move to ...
+ * g++.dg/modules/cpp-5_[ab].*: ... here.
+ * g++.dg/modules/cpp5_c.C: New.
+
+ Robustify parse errors on module/import decls.
+ gcc/cp/
+ * parser.c (cp_parser_consume_semicolon_at_end_of_statement):
+ Return void.
+ (cp_parser_translation_unit): Adjust.
+ (cp_parser_{module,import}_declaration): Don't try and resync
+ here.
+ (cp_parser_tokenize): Deal with unprocessed incoming tokens.
+ gcc/testsuite/
+ * g++.dg/modules/err-2_[ab].*: New.
+
+2018-10-16 Nathan Sidwell <nathan@acm.org>
+
+ Remove some atom/ts differences.
+ gcc/cp/
+ * module.cc (declare_module): Copy always.
+ * parser.c (cp_parser_translation_unit): Allo GMF under atom.
+ (cp_parser_module_name): Allow legacy name under ts
+ (cp_parser_initial_pragma): Fix from trunk.
+ gcc/testsuite/
+ * g++.dg/modules: Many changes.
+
+ gcc/cp/
+ * module.cc (module_purview): New.
+ (module_purview_p, module_interface_p): Use it.
+ (module_maybe_interface_p): New.
+ (module_state::direct_import): Use it.
+ (process_deferred_imports): Likewise.
+ (declare_module): Set it.
+ * parser.c (cp_parser_translation_unit): Inform modules of GMF.
+
+ gcc/testsuite/
+ * g++.dg/modules/macloc-1_[abcd].C: No longer atom-specific.
+
+ Locations for everyone!
+ gcc/cp/
+ * module.cc (loc_spans::{init,open,close}): Dump info.
+ (module_state::{read,write}_location): No longer atom-specific.
+ (module_state::{read,write}): Locations for everyone.
+ (process_deferred_imports): Open and close spans correctly.
+ gcc/testsuite/
+ * g++.dg/modules/adhoc-1_[ab].C: No longer atom-specific.
+ * g++.dg/modules/loc-1_[abc].C: Likewise.
+ * g++.dg/modules/loc-2_[abcdef].C: Likewise.
+
+ gcc/
+ * dumpfile.c (dump_switch_p_1): Don't let a '-' filename fool the
+ option machinery.
+
+ Legacy importing during -E
+ gcc/c-family/
+ * c-lex.c (init_c_lex): Don't use lang_hooks here.
+ * c-opts.c (c_common_init): Set them here.
+ gcc/cp/
+ * lex.c (module_preprocess_token): Enable legacy importing.
+ * module.cc (module_state::read): Skip items when preprocessing
+ only.
+ (module_cpp_undef): Adjust unsetting.
+ gcc/testsuite/
+ * g++.dg/modules/cpp-2_c.C: Adjust.
+
+ Remove token peeking & preamble related infrastructure.
+ libcpp/
+ * include/cpplib.h (cpp_relocate_peeked_tokens): Delete.
+ (cpp_peek_token_with_location): Delete.
+ (cpp_in_macro_expansion_p): Delete.
+ * directives-only.c (_cpp_preprocess_dir_only): Adjust
+ _cpp_handle_directive call.
+ * directives.c (struct if_stack): Drop hash_loc.
+ (PEEK_INVISIBLE): Delete.
+ (linemarker_dir): Adjust.
+ (_cpp_handle_directive): Drop hash_loc arg. dont set it.
+ (push_conditional): Drop hash_loc.
+ * init.c (read_original_filename): Adjust _cpp_handle_directive
+ call.
+ * internal.h (struct cpp_reader): Delete peeked_directive field.
+ (_cpp_handl_directive): Drop hash_loc arg.
+ * lex.c (cpp_relocate_peeked_tokens): Delete.
+ (cpp_peek_token): Swallow ...
+ (cpp_peek_token_with_location): ... this. Delete.
+ (_cpp_lex_token): Adjust _cpp_handle_directive call.
+ * macro.c (cpp_in_macro_expansion_p): Rename to ...
+ (cpp_in_macro_expansion): ... this. Make static.
+ * traditional.c (_cpp_scan_out_logical_line): Adjust
+ _cpp_handle_directive call.
+
+ gcc/testsuite/
+ * g++.dg/modules/*.H: Drop unnecessary -fmodules-atom option.
+
+ Reimplement preamble peeking
+ gcc/
+ * doc/invoke.texi (fmodule-preamble): Delete.
+ * langhooks-def.h (LANG_HOOKS_PREPROCESS_PREAMBLE): Replace with ...
+ (LANG_HOOKS_PREPROCESS_TOKEN): ... this.
+ * langhooks.h (struct lang_hooks): Replace preprocess_preamble
+ with preprocess_token.
+ c-family/
+ * c-ppoutput.c (scan_translation_unit): Adjust preprocess lang
+ hook.
+ * c.opt (fmodule-preamble, fmodule-preamble=): Delete.
+ gcc/cp/
+ * cp-lang.c (module_preamble_fsm): Delete.
+ (LANG_HOOKS_PREPROCESS_PREAMBLE): Delete.
+ (LANG_HOOKS_PREPROCESS_TOKEN): Override.
+ * cp-tree.h (enum module_preamble_state): Delete.
+ (module_preamble_prefix_{peek,next}): Delete.
+ (module_preprocess_token): Declare.
+ * lex.c (module_preamble_prefix_{peek,next}): Delete.
+ (module_preprocess_token): New.
+ * module.c (init_module_processing, handle_module_option): Drop
+ preamble option handling.
+ gcc/testsuite/
+ * g++.dg/modules/*: Many changes.
+
+ Remove preamble repeating.
+ gcc/cp/
+ * cp-tree.h (maybe_repeat_preamble): Delete.
+ * module.c (maybe_repeat_preamble): Delete.
+ * parser.c (cp_parser_initial_pragma): Revert to trunk.
+ * lex.c (modle_preamble_prefix_peek): Don't repeat preamble.
+ gcc/testsuite/
+ * g++.dg/modules/cpp-preamble-1.C: Adjust.
+ * g++.dg/modules/atom-preamble-1.C: Is now well formed.
+
+ Remove preamble peeking
+ gcc/cp/
+ * cp-tree.h ({import,declare}_module): return void.
+ (process_deferred_imports): Return void.
+ (module_state::direct_import): Return void, deferrable is
+ tristate. Push onto pending_import vector if permitted.
+ ({import,declare}_module): Don't return adjustment, use
+ direct_import always.
+ (process_deferred_imports): Don't return adjustment.
+ * parser.c (cp_parser_module_declaration): Return void, drop first
+ arg.
+ (cp_parser_import_declaration): Return void.
+ (cp_parser_module_export): Don't deal with module declaration
+ here.
+ (cp_parser_get_module_preamble_tokens)
+ (cp_parser_parse_module_preamble): Delete.
+ (cp_parser_tokenize): Delete #ifdef'd adjustment code.
+ (c_parse_file): Don't peek preamble.
+ libcpp/
+ * line-map.c (linemap_module_restore): Don't calculate adjustment.
+ * include/line-map.h (linemap_module_restore): Return void.
+
+ Common tokenizer for atom & ts
+ gcc/cp/
+ * module.cc ({import,declare}_module): Don't defer legacy modules.
+ * parser.c (cp_parser_translation_unit): Deal with atom preamble.
+ (cp_parser_module_declaration): No need to check if first.
+ (cp_parser_tokenize): Enable filename token as needed.
+ (c_parse_file): Disable preamble scan.
+ gcc/testsuite/
+ * g++.dg/modules/alias-1_b.C: Adjust.
+ * g++.dg/modules/atom-pragma-1.C: Adjust
+ * g++.dg/modules/atom-pragma-2.C: Delete.
+ * g++.dg/modules/atom-preamble-2_e.C: Copy from 2_f.C
+ * g++.dg/modules/atom-preamble-2_f.C: Delete.
+ * g++.dg/modules/atom-preamble-[34].C: Adjust.
+ * g++.dg/modules/atom-rescan-1.C: Delete.
+ * g++.dg/modules/ice-1.C: Adjust
+ * g++.dg/modules/macro-2_c.H: Adjust
+ * g++.dg/modules/macro-3_b.H: Adjust
+ * g++.dg/modules/macro-3_c.C: Adjust
+ * g++.dg/modules/macro-6_b.C: Adjust
+
+ gcc/cp/
+ * cp-tree.h (process_deferred_imports): Drop location arg.
+ * modules.cc ({import,declare}_module): Disable eager imports.
+ (process_deferred_imports): Drop location arg, take it from the
+ deferred imports.
+ * parser.c (cp_parser_translation_unit): Process deferred imports.
+ (cp_parser_tokenize): Correct close-brace handling. Process
+ deferred imports.
+ (c_parse_file): Adjust prcess_deferred_imports call.
+ gcc/testsuite/
+ * g++.dg/modules/atom-preamble-1.C: More workarounds
+
+ gcc/cp/
+ * parser.c (cp_parser_translation_unit): Detect GMF here ...
+ (cp_parser_module_declaration): ... not here.
+
+2018-10-15 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h ({import,declare}_module): Return adjustment.
+ * module.c (module_state::direct_import): Preserve line table,
+ return adjustment.
+ * parser.c (cp_parser_fill_main): Delete.
+ (cp_parser_tokenize): Take cp_token pointer, reorder check & push.
+ (cp_parser_translation_unit): Take cp_token pointer, call
+ cp_parser_tokenize.
+ (c_parse_file): Don't tokenize here.
+
+ gcc/cp/
+ * lang-specs.h: Fix .s elision with legacy modules.
+
+ gcc/
+ * langhooks.h (struct lang_hooks): Adjust preprocess_main_file
+ signature.
+ gcc/c-family/
+ * c-opts.c (push_command_line_include): Adjust
+ preprocess_main_file hook call.
+ (cb_file_change): Likewise.
+ gcc/cp/
+ * cp-lang.c (LANG_HOOKS_PREPROCESS_MAIN_FILE): Adjust.
+ * cp-tree.h (module_note_main_file): Rename to ...
+ (module_begin_main_file): ... here.
+ (maybe_begin_legacy_module): Delete.
+ * module.cc (declare_module): Remove legacy handling here.
+ (module_note_main_file): Rename to ...
+ (module_begin_main_file): ... here. Swallow ...
+ (maybe_begin_legacy_module): ... this.
+ (process_deferred_imports): We're already exporting for legacy
+ headers.
+ * parser.c (c_parse_file): Don't call maybe_begin_legacy_module.
+
+ gcc/cp/
+ * cp-tree.h (process_deferred_imports): New.
+ (module_preamble_load): Delete.
+ * module.cc (module_state::direct_import): Fatal error here.
+ (module_state::preamble_load): Delete, move into ...
+ (process_deferred_imports): ... here. Subsume ...
+ (module_preamble_load): ... this.
+ * parser.c (c_parse_file): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/atom-inc-1.C: Delete.
+ * g++.dg/modules/atom-inc-1_[abc].*: New.
+ * g++.dg/modules/import-2.C: Adjust.
+
+ gcc/cp/
+ * module.cc (module_state::direct_import): New.
+ ({import,declare}_module): Call it.
+ (module_state::preamble_load): Likewise.
+
+2018-10-12 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * lex.c (cpp_peek_token_with_location): Fix pragma rewinding.
+ gcc/cp/
+ * parser.c (cp_parser_initial_pragma): Peek at first token.
+
+ Merge trunk r265127.
+
+ gcc/cp/
+ * parser.c (cp_parser_{module,import}_declaration): Remove temp hacks.
+ (cp_parser_translation_unit, cp_parser_parse_module_preamble): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/atom-decl-1.C: Adjust errors.
+ * g++.dg/modules/atom-preamble-1.C: Likewise. XFAIL.
+ * g++.dg/modules/mod-decl-1.C: Likewise,
+ * g++.dg/modules/p0713-[23].C: Likewise.
+
+ gcc/cp/
+ * parser.c (cp_parser_translation_unit): Deal with one level of
+ export block here.
+ (check_module_outermost): Delete.
+ (cp_parser_{module,import}_declaration): Don't call it.
+ (cp_parser_declaration): Don't deal with module or import decls.
+ gcc/testsuite/
+ * g++.dg/modules/mod-decl-[13].C: Adjust errors.
+
+ gcc/cp/
+ * parser.c (cp_parser_translation_unit): Detect module and import
+ declarations here.
+
+ Start breaking out toplevel parsing.
+ gcc/c-family/
+ * c.opt (Wlegacy-header): Delete.
+ gcc/
+ * doc/invoke.texi (Wlegacy-header): Delete.
+ gcc/cp/
+ * cp-lang.c (module_preamble_fsm): Don't call atom_preamble_end.
+ * cp-tree.h (atom_preamble_end): Delete.
+ * lex.c (module_preamble_prefix_peek): Drop Wlegacy_header check.
+ * module.cc (module_preamble_end_loc): Delete.
+ (do_translate_include): Always translate.
+ (maybe_import_include): Drop Wlegacy_header check.
+ (atom_preamble_end): Delete.
+ * parser.h (cp_parser): Drop implicit_extern_c.
+ * parser.c (cp_parser_tokenize): New.
+ (cp_debug_parser): Drop implicit_extern_c.
+ (cp_parser_new): Likewise.
+ (cp_parser_translation_unit): Move global module detectin here.
+ (module_preamble_end_loc): Delete declaration.
+ (in_preamble): Temp hack.
+ (cp_parser_{import,module}_declaration): A couple of temp hacks.
+ (cp_parser_parse_module_preamble): Manipulate in_preamble.
+ (cp_parser_toplevel_declaration): New, broken out of ...
+ (cp_parser_declaration_seq_opt): ... here, call it. Drop top_level arg.
+ (c_parse_file): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/atom-decl-[23].C: Adjust diags.
+ * g++.dg/modules/atom-preamble-[13].C: Likewise.
+ * g++.dg/modules/legacy-6_[df].C: Likewise.
+
+2018-10-11 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r265055.
+
+ Kill proclaiming decls
+ gcc/cp/
+ * cp-tree.h (push_module_export): Drop proclaiming arg.
+ * module.c (proclaimer): Delete.
+ ({push,pop}_module_export): Adjust.
+ (maybe_begin_legacy_module, module_preamble_load): Adjust.
+ * parser.c (cp_parser_module_export): Adjust error.
+ (cp_parser_module_proclamation): Delete.
+ (cp_parser_declaration): Don't call it.
+ gcc/testsuite/
+ * g++.dg/modules/proclaim-1.C: Delete.
+
+ Macro locations! (ATOM only)
+ libcpp/
+ * internal.h (linemap_enter_macro): Move declaration to ...
+ * include/cpplib.h (linemap_enter_macro): ... here.
+ (linemap_lookup_macro_index): Declare.
+ * line-map.c (linemap_lookup_macro_index): Break out of ...
+ (linemap_macro_map_lookup): ... this. Use it.
+ gcc/cp/
+ * module.cc (loc_spans): Record macro spans.
+ (module_state::write_readme): Record controlling macro.
+ (module_state::{read,write}_location{s,}): Stream macro locations.
+ (module_state::write_readme): Move later.
+ gcc/testsuite/
+ * g++.dg/modules/macloc-1_[abcd].C: New.
+
+ Merge trunk r265037.
+
+2018-10-10 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (loc_spans::close): Close the current last map.
+ (module_state::prepare_locations): Adjust.
+ (module_state::preamble_load): Adjust span closing.
+ (finish_module_parse): Likewise.
+
+ gcc/cp/
+ * module.cc (pending_imports): New.
+ ({import,declare}_module): Use it.
+ (module_from_cmp): Delete.
+ (module_state::preamble_load): Use pending_imports array.
+
+ gcc/
+ * doc/invoke.texi (fmodule-legacy): Augment syntax.
+ gcc/cp/
+ * module.cc (module_controlling_macro): Replace with ...
+ (module_legacy_macro): ... this.
+ (module_state::{read,write}_config): Controlling macros only for
+ legacy mode.
+ (set_module_legacy_name): New.
+ (maybe_begin_legacy_module, handle_module_option): Use it.
+ (init_module_processing, finish_module_parse): Adjust.
+ gcc/c-family/
+ * c.opt (fmodule-macro): Delete.
+ gcc/testsuite/
+ * g++.dg/modules/alias-1_a.H: Fix.
+ * g++.dg/modules/legacy=0[ab].H: Adjust.
+ * g++.dg/modules/alias-2_*: New.
+
+ gcc/cp/
+ * module.cc (module_state::controlling_macro): Delete.
+ (module_state_config): New struct.
+ (module_state::{read,write}_config): Wrap args in a struct.
+ (get_option_string): Move into module_state_config.
+ (module_state::write_macros): Adjust.
+ (module_state::{read,write}): Adjust.
+
+ gcc/cp/
+ * module.cc (module_state::{read,write}_defines): Rename to ...
+ (module_state::{read,write}_macros): ... here.
+ (module_state::{read,write}): Cope with legacy aliases.
+ (finish_module_parse): Install initialized controlling macro.
+ gcc/testsuite/
+ * g++.dg/modules/alias-1_[cdef].C: New.
+
+2018-10-09 Nathan Sidwell <nathan@acm.org>
+
+ Lazy macro table loading
+ gcc/cp/
+ * module.cc (struct slurping): Add macro_tbl, rename macros to
+ macros_def.
+ (slurping::~slurping): Release macro_tbl.
+ (module_state::{read,write}_config): Replace macro count with
+ boolean.
+ (module_state::{import,install}_defines): New.
+ (module_state::read_defines): Map in the table, don't read it.
+ (module_state::{check_read,freeze_an_elf}): Adjust.
+ (import_module, module_state::preamble_load): Use install_defines.
+ gcc/testsuite/
+ * g++.dg/modules/macro-6_[abc].*: New.
+
+ Controlling macros & alias detection
+ gcc/cp/
+ * module.cc (cpp_node, identifier): Conversions between
+ cpp_hashnode and IDENTIFIER. Use them.
+ (data_in::no_more): Seek end.
+ (module_state::{resolve,is}_alias): New.
+ (module_state::read): Return alias.
+ (module_state::read_config): Initialize controlling macro,
+ determine alias.
+ (module_state::{read,write}_define): Allow unlocated macros.
+ (module_controlling_macro): New switch.
+ (module_state::{read_imports,do_import}): Deal with aliases.
+ (module_state::write_config): Write controlling macro.
+ (module_state::write_defines): Deal with controlling macro.
+ (module_state::preamble_load): Deal with aliases.
+ (finish_module_parse): Process explicit controlling macro.
+ gcc/testsuite/
+ * g++.dg/modules/alias-1*: New.
+ * g++.dg/modules/macro-[234]*: Adjust.
+ * g++.dg/modules/only-[23].C: Adjust.
+ libcpp/
+ * include/cpplib.h (HT_NODE,NODE_LEN,NODE_NAME): Adjust.
+ (cpp_set_deferred_macro): Add defaulted forced arg.
+
+2018-10-05 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.cc (module_state::deferred_macro): Print macro
+ definition.
+ gcc/testsuite/
+ * g++.dg/modules/macro-2_d.C: Adjust regexps.
+ * g++.dg/modules/macro-4_[de].C: Likewise.
+ * g++.dg/modules/macro-5_c.C: Likewise.
+ libcpp/
+ * include/cpplib.h (cpp_macro_definition): Add overload.
+ (cpp_macro_definition_location): Make inline, adjust.
+ * macro.c (get_deferred_or_lazy_macro): New, broken out of ...
+ (_cpp_notify_macro_use): ... here. Call it.
+ (warn_of_redefinition): Call it.
+ (cpp_macro_definition): Split into two overloads. Deal with
+ deferred macros.
+ (cpp_macro_definition_location): Delete.
+
+ gcc/cp/
+ * module.cc (module_state): Add controlling_macro, unionize slurp
+ with alias. Add accessors. Use them.
+ (module_state::{read,do_import,read_config}): Drop check_crc arg.
+ (module_state::read_imports): Zap direct_p before importing.
+
+ Use 'include translation' terminology.
+ gcc/c-family/
+ * c-opts.c (c_common_post_options): Adjust.
+ gcc/cp/
+ * cp-lang.c (LANG_HOOKS_PREPROCESS_TRANSLATE_INCLUDE): Override.
+ * cp-tree.h (maybe_import_include): Adjust return type.
+ * module.cc (module_mapper::translate_include): Replace ...
+ (module_mapper::divert_include): ... this.
+ (do_translate_include): Replace ...
+ (do_divert_include): ... this.
+ (maybe_import_include, atom_preamble_end): Adjust.
+ gcc/
+ * langhooks-def.h (LANG_HOOKS_PREPROCESS_DIVERT_INCLUDE): Replace
+ with ...
+ (LANG_HOOKS_PREPROCESS_TRANSLATE_INCLUDE): ... this.
+ * langhooks.h (struct lang_hooks): Replace
+ preprocess_divert_include with preprocess_translate_include.
+ libcpp/
+ * directives.c (do_include_common): Adjust.
+ * include/cpplib.h (cpp_divert_include_t): Rename to ...
+ (cpp_translate_include_t): ... this.
+ (struct cpp_callbacks): Replace divert_include with translate_include.
+
+ Mainfile loc has no line number.
+ libcpp/
+ * internal.h (_cpp_stack_file): Add line_one_p arg.
+ * files.c (_cpp_stack_file): Likewise. Use it.
+ * include/cpplib.h (cpp_read_main_file): Add line_one_p arg.
+ * init.c (cpp_read_main_file): Likewise, use it.
+ gcc/c-family/
+ * c-opts.c (c_common_post_options): Start main file on line zero.
+ (push_command_line_include): Call preprocess_main_file hook here ...
+ (cb_file_change): ... except when reading preprocessed source.
+ * c.opt: Add full stops.
+ gcc/cp/
+ * module.cc (module_note_main_file): Remove fixmes fixed yesterday.
+ gcc/testsuite/
+ * g++.dg/modules/macro-4_[de].C: Adjust regexp.
+ * g++.dg/modules/macro-5_c.C: Likewise.
+ * lib/options.exp (check_for_options): Fix comment typos.
+
+2018-10-04 Nathan Sidwell <nathan@acm.org>
+
+ Dump command line macros, better command line locs
+ libcpp/
+ * include/cpplib.h (cpp_force_token_locations): Take location, not
+ pointer.
+ * internal.h (cpp_reader): Replace forced_token_location_p with
+ forced_token_location.
+ * init.c (cpp_create_reader): Adjust.
+ * lex.c (_cpp_lex_direct, cpp_force_token_locations): Adjust.
+ (cpp_stop_forcing_token_locations): Adjust.
+ gcc/c-family/
+ * c-opts.c (c_finish_options): Force command line locations.
+ gcc/cp/
+ * module.cc (loc_spans::init): Add fixed and cmd line locs.
+ (loc_spans::SPAN_*): New.
+ (loc_spans::cmd_line): New.
+ (module_state::read_location): Adjust, return module loc for
+ UNKNOWN.
+ (module_state::{prepare,read,write}_locations): Adjust.
+ (maybe_add_macro): Write cmd_line macros.
+ (load_macros): Location is main source file.
+ gcc/fortran/
+ * cpp.c (gfc_cpp_init): Adjust token forcing.
+ gcc/testsuite/
+ * g++.dg/modules/macro-4_[de].C: Adjust regexp.
+ * g++.dg/modules/macro-5_*: New.
+
+2018-10-01 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r264769.
+ Slip in module.c -> module.cc rename
+
+ Merge trunk r264765.
+
+ gcc/cp/
+ * lang-specs.h: Error out on -fcoroutines.
+
+ From c++-coroutines branch:
+ 2018-10-01 Iain Sandoe <iain@sandoe.co.uk>
+ gcc/c-family/
+ * c-common.h (RID_CO_AWAIT, RID_CO_YIELD, RID_CO_RETURN,
+ D_CXX_COROUTINES, D_CXX_COROUTINES_FLAGS): New.
+ * c-common.c (c_common_reswords): co_await, co_yield,
+ co_return New keywords.
+ gcc/cp/
+ * lex.c (init_reswords): Handle flag_coroutines.
+ gcc/c-family/
+ * c.opt (fcoroutines, fcoroutines-ts): New.
+
+ Avoid UB type punning union shenanigans
+ gcc/cp/
+ * module.c (macro_import::slot): Explicitly code bit
+ manipulation. Update all users.
+ gcc/testsuite/
+ * g++.dg/modules/adhoc-1_b.C: Adjust regexp for wierd dejagnu/TCL bug.
+
+ AdHoc locations
+ gcc/cp/
+ * modules.c (dumper): Add LOCATIONS, flags.
+ (dumper::operator()): Add default arg.
+ (dumper::push): Set flags.
+ (module_state::{read,write}_location): Serialize adhoc locs.
+ (module_state::deferred_macro): Optimize current TU undef case.
+ gcc/testsuite/
+ * g++.dg/modules/adhoc-1_[ab].C: New.
+
+2018-09-28 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (module_state::deferred_macro): Fix undef hiding logic.
+ gcc/testsuite/
+ * g++.dg/modules/macro-4*: New.
+
+2018-09-27 Nathan Sidwell <nathan@acm.org>
+
+ No speculative undefs.
+ gcc/cp/
+ * module.c (maybe_add_macro): Simplify.
+ (module_state::undef_macro): Only add undef for a deferred macro.
+
+ Add -fforce-module-macros
+ libcpp/
+ * include/cpplib.h (get_deferred_macro): Declare.
+ * macro.c (undefer_macro): Rename to ...
+ (get_deferred_macro): ... here. Adjust callers.
+ gcc/
+ * doc/invoke.texi (fforce-module-macros): Document.
+ gcc/c-family/
+ * c.opt (fforce-module-macros): New.
+ gcc/cp/
+ * module.c (get_option_string): Prune more options.
+ (load_macros): New.
+ (finish_module_parse): Walk identifiers, if forcing macros.
+
+2018-09-26 Nathan Sidwell <nathan@acm.org>
+
+ Add deferred cpp_hashnode field. Replace macro_imports hash table
+ with vector and refactor.
+ libcpp/
+ * include/cpplib.h (NODE_DEFERRED_MACRO): Delete.
+ (cpp_hashnode): Reduce flags width. Add deferred field.
+ (cpp_deferred_macro_p): Delete.
+ (cpp_set_deferred_macro): Don't set flag.
+ * directives.c (do_undef): Adjust deferred check.
+ * macro.c (undefer_macro): Adjust.
+ gcc/cp/
+ * module.c (macro_export): Drop node field. Add ctor.
+ (macro_import): Rename one to struct slot. Add ctors, type
+ erase. Delete struct traits.
+ (macro_imports): Change to vec type.
+ (macro_import::{append,exported}): Adjust.
+ (get_macro_{imports,exports}): Allocate node deferred index,
+ adjust.
+ (maybe_add_macro): Add to macros vector, check unexported undefs
+ here.
+ (macro_loc_cmp): Reimplement.
+ (module_state::{read,write}_macros): Adjust.
+ (module_state::{undef,deferred}_macro): Likewise.
+ (finish_module_parse): Adjust deallocation.
+
+ Macro import and export (corrected).
+ libcpp/
+ * include/cpplib.h (cpp_callbacks): Add user_deferred_macro.
+ (NODE_DEFERRED_MACRO): New.
+ (cpp_hashnode): Increase flags size.
+ (cpp_deferred_macro_p, cpp_set_deferred_macro): New.
+ (cpp_compare_macros): Take two macros.
+ * internal.h (_cpp_notify_macro_use): Take source location, return bool.
+ (_cpp_maybe_notify_macro_use): Likewise.
+ * directives.c (do_undef): Don't warn about unresolved deferred
+ macros.
+ (do_ifdef, do_ifndef): Cope with deferred macros evaporating.
+ * expr.c (parse_defined): Likewise.
+ * macro.c (undefer_macro): New.
+ (enter_macro_context): Adjust notify call.
+ (cpp_get_token_1): Deal with deferred nodes.
+ (warn_of_redefinition): Node extraction of compare, call ...
+ (cpp_compare_macros): ... this to compare two macros.
+ (cpp_create_definition): Adjust compare call.
+ (_cpp_notify_macro_use): Deal with deferred macros.
+ gcc/
+ * langhooks-def.h (LANG_HOOKS_PREPROCESS_DEFERRED_MACRO): New.
+ * langhooks.h (struct langhooks): Add preprocess_deferred_macro.
+ gcc/c-family/
+ * c-lex.c (init_c_lex): Register deferred_macro hook.
+ gcc/cp/
+ * cp-tree.h (module_cpp_deferred_macro): Declare.
+ * cp-lang.c (LANG_HOOKS_PREPROCESS_DEFERRED_MACRO): Override.
+ * module.c (bytes_in::random_access): New.
+ (elf_in::{preserve,release}): New.
+ (slurping::{legacies,macros}): New fields.
+ (slurping::close): New.
+ (module_state::legacies): Remove field.
+ (module_state::slurper): Delete.
+ (module_state::{read,write}_config): Add number of macros.
+ (module_state::{read,write}_define{,s}): Reimplement.
+ (module_state::{undef,deferred}_macro): New.
+ (cpp_undefs): Delete.
+ (struct macro_export, struct macro_import): New.
+ (get_macro_{export,import}): New.
+ (maybe_add_macro,macro_loc_cmp): Adjust.
+ (module_state::{read,write}): Adjust.
+ (module_state::check_read): Adjust.
+ (module_state::set_import): Adjust.
+ (module_state::freeze_an_elf): Preserve macros.
+ (import_module): Update legacies bitmap.
+ (module_cpp_undef): Call module_state::undef_macro.
+ (module_cpp_deferred_macro): New.
+ (finish_module_parse): Free macro state.
+ gcc/testsuite/
+ * g++.dg/modules/macro-2_*: Adjust tests.
+ * g++.dg/modules/macro-3_*: Likewise.
+
+2018-09-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * modules (module_state): Add legacies bitmap.
+ (module_state::write): Write README later.
+ (module_state::read): Set legacies bit.
+ (module_state::set_import): Update legacies.
+ gcc/testsuite/
+ * g++.dg/modules/unnamed-1_b.C: Update.
+
+2018-09-16 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * doc/invoke.texi (C++ Modules): Update mapper protocol.
+ * cxx-mapper.c (client): Remove bewait, forget members.
+ (client::action): Remove BYIMPORT, BEWAIT & RESET.
+
+ Remove BYIMPORT, BEWAIT.
+ gcc/cp/
+ * module.c (module_mapper::uncork): Send blank command.
+ (module_mapper::imex_query): Take exported_p bool.
+ (module_mapper::bewait_{cmd,response}): Delete.
+ (module_mapper::send_command): Don't shortcut blank format.
+ (module_state::preamble_load): Avoid async commands.
+
+2018-09-14 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * langhooks.h (preprocess_main_file): Drop index arg.
+ gcc/c-family/
+ * c-opts.c (cb_file_change): Adjust preprocess_main_file hook.
+ gcc/cp/
+ * cp-tree.h (module_node_main_file): Drop index parm.
+ * module.c (loc_spans::init_p, ): New.
+ (loc_spans::init_once): Rename to ...
+ (loc_spans::init): ... here.
+ (loc_spans::main_start): New.
+ (prefix_line_maps_hwm, prefix_locations_hwm): Delete.
+ (maybe_add_macro, declare_module, do_divert_include)
+ (module_note_main_file, maybe_begin_legacy_module): Adjust.
+
+ A grand renaming
+ gcc/cp/
+ * cp-tree.h (atom_preamble_state, atom_preamble_prefix_peek)
+ (atom_preamble_prefix_next): Rename to ...
+ (atom_preamble_state, atom_preamble_prefix_peek)
+ (atom_preamble_prefix_next): ... here.
+ (atom_cpp_undef, atom_module_preamble, atom_main_file)
+ (atom_divert_include, maybe_atom_legacy_module): Rename to ...
+ (module_cpp_undef, module_preamble_load, module_note_main_file)
+ (maybe_import_include, maybe_begin_legacy_module): ... here.
+ * cp-lang.c (LANG_HOOKS_PREPROCESS_MAIN_FILE)
+ (LANG_HOOKS_PREPROCESS_DIVERT_INCLUDE)
+ (LANG_HOOKS_PREPROCESS_UNDEF, LANG_HOOKS_PREPROCESS_PREAMBLE): Adjust.
+ (module_preamble_fsm): Adjust.
+ * lex.c (atom_preamble_prefix_peek, atom_preamble_prefix_next):
+ Rename to ...
+ (atom_preamble_prefix_peek, atom_preamble_prefix_next): ... here.
+ Adjust.
+ * module.c (atom_cpp_undef, atom_module_preamble, atom_main_file)
+ (atom_divert_include, maybe_atom_legacy_module): Rename to ...
+ (module_cpp_undef, module_preamble_load, module_note_main_file)
+ (maybe_import_include, maybe_begin_legacy_module): Here ... Adust.
+ * parser.c (cp_parser_get_module_preamble_tokens, c_parse_file):
+ Adjust.
+
+ Expunge the spewer
+ gcc/cp/
+ * module.c (struct slurping): No need to tag.
+ (struct spewing): Delete.
+ (declare_module, module_state::atom_preamble)
+ (finish_module_parse): Don't deal with it.
+
+ Expunge old location scheme
+ gcc/cp/
+ * module.c (struct slurper): Remove early_locs, late_locs,
+ loc_offset, filenames.
+ (module_state::{prepare,read,write}_locations): Delete
+ (module_state::{read,write}): Adjust.
+
+ New locations working
+ gcc/cp/
+ * module.c (module_state::prepare_locations): New, broken out of ...
+ (module_state::write_locations): Adjust.
+ (module_state::read_locations): Fix.
+
+2018-09-13 Nathan Sidwell <nathan@acm.org>
+
+ Read & write new locations (buggy, disabled).
+ gcc/cp/
+ * module.c (module_state::{read,write}_location): Add new-loc
+ scheme.
+ (module_state::{read,write}_locations): Adjust.
+ (module_state::read): Select location scheme.
+ gcc/testsuite/
+ * g++.dg/modules/loc-1_c.C: Use regexp for note loc.
+
+ Reading location spans (but not using them).
+ gcc/cp/
+ * module.c (loc_range_t): Global typedef.
+ (loc_spans::release): Delete.
+ (slurping): Add new range locs.
+ (module_state::write_locations): Adjust.
+ (module_state::read_locations): New.
+ (module_state::read): Call it.
+
+ Stop passing line_map around. There is only one.
+ gcc/cp/
+ * cp-tree.h (import_module, declare_module, atom_module_preamble)
+ (finish_module_parse, maybe_atom_legacy_module): Drop line_map
+ arg.
+ * decl2.c (c_parse_final_cleanups): Adjust.
+ * parser.c (cp_parser_module_declaration)
+ (cp_parser_import_declaration, c_parse_file): Adjust.
+ * module.c (loc_spans): Drop lmaps member & adjust.
+ (module_state): Drop line_maps from some but not all members.
+
+ Refactor location spans
+ gcc/cp/
+ * module.c (class loc_spans): New. Absorb ...
+ ({open,close,ordinary,macro}_interval): ... these. Update all uses.
+
+2018-09-12 Nathan Sidwell <nathan@acm.org>
+
+ Adding location spans
+ gcc/cp/
+ * module.c (loc_range_t): New range.
+ (struct lmap_interval): New.
+ (lmap_spans): New.
+ (open_interval, close_interval, ordinary_interval)
+ (macro_interval): New.
+ (module_state::write_locations): Write spans.
+ (module_state::write): Write spans.
+ (module_state::atom_preamble): Update spans.
+ (atom_main_file): Initialize spans.
+ (finish_module_parse): Close out span.
+
+ gcc/cp/
+ * parser.c (cp_parser_get_module_preamble_tokens): Don't read past
+ EOF.
+ gcc/testsuite/
+ * g++.dg/modules/ice-1.C: New.
+ * g++.dg/modules/modules.exp: Remove old pruning.
+
+ Implement p1103r0 19.3/2 not-a-keyword.
+ gcc/cp/
+ * module (module_state::write_define): Don't export keywords.
+ gcc/testsuite/
+ * g++.dg/modules/legacy-7_{a.H,b.C}: New.
+
+2018-09-10 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * diagnostic.c (diagnostic_report_current_module): Do not line
+ break after module name.
+ gcc/testsuite/
+ * lib/prune.exp (prune_gcc_output): Adjust module loc regexp.
+ * g++.dg/modules/loc-2_[def].C: Adjust dg-regexp.
+ * g++.dg/modules/macro-2_d.C: Likewise.
+
+2018-09-06 Nathan Sidwell <nathan@acm.org>
+
+ gcc/c-family/
+ * c.opt (fmodule-only): Set flag.
+ gcc/cp/
+ * decl2.c (c_parse_final_cleanups): Always call finish_module_parse.
+ * module.c (finish_module_parse): Warn on incorrect -fmodule-only.
+ gcc/testsuite/
+ * g++.dg/modules/only-[123].C: New.
+
+ Add -fmodule-only, rename -fmodules-legacy
+ gcc/c-family/
+ * c.opt (fmodules-legacy*): Rename to ...
+ (fmodule-legacy*): ... here.
+ (fmodule-only): New.
+ gcc/cp/
+ * lang-specs.h: Incorporate -fmodule-only.
+ * module.c (get_option_string, handle_module_option): Adjust.
+ gcc/
+ * doc.invoke.texi: Update module options.
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp: Adjust.
+ * g++.dg/modules/*: Adjust options.
+
+2018-08-31 Nathan Sidwell <nathan@acm.org>
+
+ libiberty/
+ * configure.ac (checkfuncs, AC_CHECK_FUNCS): Add pipe2.
+ * configure, config.in: Regenerated.
+ * pex-unix.c (pex_unix_execute): Use pipe to transfer child failure.
+
+2018-08-30 Nathan Sidwell <nathan@acm.org>
+
+ AIXify tests
+ fcc/testsuite/
+ * fn-inline-1_[abc].C: Adjust regexps.
+ * sym-subst-2_a.C: Don't add -fat-lto option, use scan-assembler instead.
+
+ Fix AIX
+ gcc/cp/
+ * cxx-mapper.cc (buffer::get_request): Reinit pos.
+
+ Fix --enable-checking=release.
+ gcc/cp/
+ * name-lookup.c (set_module_binding): Add static cast.
+
+ Fix more GC
+ gcc/cp/
+ * module.c (module_state): Tag for_user.
+ (module_state_hash): Defive from ggc_ptr_hash.
+ (init_module_processing): GGC alloc hash table. get mapper when
+ not lazy, add ggc_collect.
+ (finish_module_parse): Don't zap hash table here ...
+ (finish_module_processing): ... do it here instead.
+ gcc/testsuite/
+ * g++.dg/modules/gc-2_a.C: New.
+ * g++.dg/modules/gc-2.map: New.
+
+ AIX build
+ gcc/
+ * configure.ac: Check sighandler_t, memrchr.
+ * config.in, configure: Rebuilt.
+ gcc/cp/
+ * Make-lang.in (MODULE_STAMP): Protect against non--r capable
+ date.
+ (cxx-mapper): Add LIBINTL, not LIBBACKTRACE.
+ * module.c (memrchr, sighandler_t): Provide fallback.
+ * cxx-mapper.cc (memrchr, sighandler_t): Provide fallback.
+
+ * Merge trunk r263974.
+
+2018-08-29 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (atom_cpp_undef): location_t arg is unused.
+
+ gcc/cp/
+ * module.c (module_state::{read,write}_define): Add NUL
+ terminators to CPP_TOKEN_FLD_STR elements.
+
+ libcpp/
+ * lex.c (cpp_alloc_token_string): Don't clobber ending NUL.
+
+2018-08-28 Nathan Sidwell <nathan@acm.org>
+
+ Undefs
+ gcc/cp/
+ * cp-lang.c (LANG_HOOKS_PREPROCESS_UNDEF): Override.
+ * cp-tree.h (atom_cpp_undef): Declare.
+ * module.c: Include langhooks.h.
+ (cpp_undefs): New global.
+ (module_state::{read,write}_defines): Stream undefs.
+ (atom_cpp_undef): Define.
+ gcc/
+ * langhooks-def.h (LANG_HOOKS_PREPROCESS_UNDEF): Default.
+ (LANG_HOOKS_INITIALIZER): Add it.
+ * langhooks.h (struct lang_hooks): Add preprocess_undef hook.
+ gcc/c-family/
+ * c-lex.c: Include langhooks.h
+ (init_c_lex, cb_undef): Look at lang hook.
+ gcc/testsuite/
+ * g++.dg/modules/macro-3_[ab].H: New.
+ * g++.dg/modules/macro-3_c.C: New.
+
+ Sorted macros
+ gcc/cp/
+ * module.c (module_state::{read,write}_define): New, single-macro
+ streamers.
+ (module_state::write_define_cb): Delete.
+ (maybe_add_macro, macro_loc_cmp): New.
+ (module_state::write_defines): Write in source order.
+ (module_state::read_defines): Adjust.
+
+ Macro define locations
+ libcpp/
+ * include/cpplib.h (cpp_macro): Add imported field.
+ gcc/cp/
+ * module.c (module_state::write_define_cb): Ignore imported, write
+ location.
+ (module_state::read_defines): Read location.
+ gcc/testsuite/
+ * g++.dg/modules/macro-2_[abc].H: New.
+ * g++.dg/modules/macro-2_d.C New.
+
+ Reading macros.
+ gcc/cp/
+ * module.c (bytes_{in,out}::cpp_node): New.
+ (bytes_out::buf): New.
+ (bytes_{in,out}::str): Treat zero-length strings specially.
+ (module_state::write_define_cb): Concatenate strings.
+ (module_state::write_defines): Write padding byte.
+ (module_state::read_defines): New.
+ (module_state::read): Call it.
+ libcpp/
+ * include/cpplib.h (cpp_alloc_token_string): New.
+ (cpp_compare_macros): Declare.
+ * lex.c (cpp_alloc_token_string): New, broken out of ...
+ (create_literal): ... here. Call it.
+ * macro.c (warn_of_redefinition): Rename to ...
+ (cpp_compare_macros): ... this, and make it extern.
+ (_cpp_create_definition): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/macro-1_a.H: Adjust.
+ * g++.dg/modules/macro-1_b.C: New.
+
+ Writing macros.
+ gcc/cp/
+ * cp-tree.h (import_module, declare_module, atom_module_preamble,
+ finish_module_parse, maybe_atom_legacy_module): Add cpp_reader
+ arg.
+ * decl2.c (c_parse_final_cleanups): Adjust finish_module_parse.
+ * module.c (bytes_out::str): Overload for cpp_hashnode.
+ (module_state::read_imports,write_imports,do_import): Add
+ cpp_reader arg.
+ (module_state::atom_preamble): Likwise.
+ (import_module, declare_module, atom_module_preamble)
+ (finish_module_parse, maybe_atom_legacy_module): Likewise.
+ (module_state::write_{define_cb,defines}): New.
+ (module_state::write): Write defines when in legacy mode.
+ * parser.c (cp_parser_module_declaration)
+ (cp_parser_import_declaration, c_parse_file): Pass parse_in.
+ gcc/testsuite/
+ * g++.dg/modules/macro-1_a.H: New.
+
+2018-08-27 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r263897.
+
+ gcc/cp/
+ * module.c (module_state): Remove depth.
+ (module_state::maybe_create_loc): Replace ...
+ (module_state::set_loc): ... this.
+ (module_state::read_imports): Check CRC of indirect imports too.
+ (module_state::attach): Simplify logic.
+ libcpp/
+ * include/linemaph (linemap_module_loc): Drop CURRENT parm.
+ * line-map.c (linemap_module_loc): Drop reseating capability.
+
+ gcc/cp/
+ * module.c (module_state::check_not_purview): New.
+ (module_state::read_imports,import_module): Use it.
+
+ Remove %M formatter, it is not worth complexity.
+ gcc/c-family/
+ * c-format.c (local_module_ptr_node): Remove
+ (gcc_cxxdiag_char_table): Remove 'M'
+ (init_dynamic_diag_info): Remove module_state lookup
+ * c-format.h (T89_M): Remove
+ gcc/cp/
+ * cp-tree.h (class module_state): Move to module.c section.
+ (pp_module_name): Delete.
+ * error.c (cp_printer): Remove %M.
+ * module.c: Remove %M error printing.
+ (pp_module_name): Delete.
+ * ptree.c (cxx_print_decl): Print module number too.
+
+2018-08-27 Nathan Sidwell <nathan@acm.org>
+
+ Mangling substitutions!
+ gcc/cp/
+ * cp-tree.h (module_vec_name): Delete.
+ * mangle.c (mangle_substitution): Fix name typo.
+ * module.c (class module_state): Drop vec_name field. Make mod
+ short. Add subst field.
+ (module_state::mangle): New.
+ (mangle_module): Deal with substitutions.
+ (mangle_module_fini): Undeal with substitutions.
+ (module_vec_name): Delete.
+ (module_state::attach): Don't set vec_name.
+ gcc/testsuite/
+ * g++.dg/modules/sym-subst-1.C: New.
+ * g++.dg/modules/sym-subst-2_[ab].C: New.
+
+ Fix module-state lifetime issue.
+ gcc/cp/
+ * cp-tree.h (finish_module): Break into ...
+ (finish_modle_{parse,procesing}): ... these two.
+ * decl2.c (c_parse_final_cleanups): Adjust modules finalization.
+ * modules.c (finish_modules): Break into ...
+ (finish_module_{parse,procesing}): ... these two.
+ (module_state::release): Break out ...
+ (module_state::slurped): ... this.
+ (module_state::{init,fini}): Fold into callers.
+
+ Refactor mangling interface.
+ gcc/cp/
+ * cp-tree.h (mangle_module, mangle_module_fini): Declare.
+ (mangle_substitution, mangle_identifer): Declare.
+ * mangle.c (mangle_substitution, mangle_identifer): Define.
+ (struct globals): Add mod field.
+ (maybe_write_module): Call mangle_module.
+ (finish_mangling_internal): Call mangle_module_fini.
+ * module.c (mangle_module, mangle_module_fini): Define.
+
+2018-08-23 Nathan Sidwell <nathan@acm.org>
+
+ Module state gains parent.
+ gcc/cp/
+ * cp-tree.h (get_module): Add parent argument.
+ (module_name): Return string.
+ * error.c (dump_module_suffix): Adjust module_name use.
+ * module.c (module_state_hash): Adjust for having a parent.
+ (module_state: Add parent & fullname fields.
+ (module_state::set_name): Delete.
+ (get_module): Add parent.
+ (get_module): Split string.
+ (module_mapper::{export_done,imex_query}): Adjust module name access.
+ (module_state::write_readme): Adjust.
+ (module_state::{read,write}_{imports,config}): Adjust.
+ (module_state::set_loc): Use fullename.
+ (module_state::attach): Create fullname.
+ * parser.c (cp_parser_module_name): Generate parental name.
+ * ptree.c (cxx_print_decl): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/mod-decl-1.C: Adjust diags.
+
+ Kill N: prefix notation
+ gcc/cp/
+ * module.c (enum module_kind): Delete.
+ (module_state): Replace kind with legacy, adjust is_legacy.
+ (module_state::set_name): Adjust.
+ (module_state_hash): Adjust hasher & comparator.
+ (module_legacy_system_p): Delete.
+ (make_flat_name): Move into ...
+ (get_module): ... here. Adjust.
+ (get_module): Add string variant.
+ (module_mapper::module_mapper): Adjust.
+ (module_mapper::{module_name_kind,response_name}): Delete.
+ (module_mapper::{imex_query,bewait_response,divert_include}): Adjust.
+ (module_state::{read_imports,attach}): Adjust.
+ (pp_module_name): Adjust.
+ (maybe_atom_legacy_module, init_module_processing)
+ (handle_module_option): Adjust.
+ * cxx-mapper.cc (module2bmi): Remove encoding.
+ (encode_module_name): Remove encoding.
+ gcc/c-family/
+ * c-lex.c (c_lex_with_flags): CPP_HEADER include quoting.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Adjust protocol doc.
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp: Adjust BMI mapping.
+ * g++.dg/modules/legacy-0[ab].H: New.
+ * g++.dg/modules/legacy-*: Adjust.
+
+2018-08-22 Nathan Sidwell <nathan@acm.org>
+
+ %M formatter
+ gcc/c-family/
+ * c-format.c (local_module_ptr_node): New.
+ (gcc_cxxdiag_char_table): Add 'M'.
+ (argument_parser::handle_conversions): Allow wanted type to be
+ NULL.
+ (init_dynamic_diag_info): Simplify lookup, add module_state.
+ * c-format.h (T89_M): New.
+ gcc/cp/
+ * cp-tree.h (class module_state): Declare before diagnostics.
+ * error.c (cp_printer): Add %M.
+ * module.c: Use %M error printing.
+
+ Use modules as handles themselves.
+ gcc/cp/
+ * cp-tree.h (class module_state): Forward declare.
+ (get_module, pp_module_name): Declare.
+ (import_module, declare_module, push_module_export): Take
+ module_state.
+ * module.c (proclaimer): A module.
+ (get_module, pp_module_name): Define.
+ (push_module_export, import_module, declare_module): Adjust.
+ * parser.c (cp_parser_module_name): Return module_state.
+ (cp_parser_module_declaration, cp_parser_import_declaration)
+ (cp_parser_module_proclamation): Adjust.
+
+ Fix GTY
+ gcc/cp/
+ * cp-tree.h (struct mc_index): Don't mark.
+ (struct mc_slot): Converted from union. Adjust.
+ (struct module_cluster): Skip mc_index.
+ * module.c (struct slurping,spewing): Skip range_t members.
+ (class module_state): Remove static data members.
+ (global_tree_arys, fixed_trees, global_crc, our_opts, lazy_lru)
+ (lazy_open, modules, modules_hash): New static vars. Adjust uses.
+ (finish_module): Add gc point.
+ gcc/testsuite/
+ * g++.dg/modules/gc-1_[abcd].C: New.
+
+2018-08-21 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (declare_module, import_module): Separate name from
+ location.
+ * module.c (module_state::attach): Drop maybe_vec_name arg.
+ (module_state::get_module): Flatten here.
+ (declare_module, import_module): Separate name and from loc.
+ (maybe_atom_legacy_module): Adjust.
+ * parser.c (cp_parser_module_name): Return tree only.
+ (cp_parser_module_declaration, cp_parser_import_declaration): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/legacy-4.H: Adjust error.
+
+ gcc/cp/
+ * module.c (module_mapper::divert_include): Don't append export attrib.
+ (import_module): Don't scan attribs.
+ (maybe_atom_legacy_module): Push exporting.
+ gcc/testsuite/
+ * g++.dg/modules/legacy-3_[bc].H: Adjust.
+ * g++.dg/modules/legacy-5_b.C: Adjust.
+ * g++.dg/modules/legacy-6_[cd].C: Adjust.
+
+ gcc/cp/
+ * module.c (module_state::get_module): Lose dflt & insert args.
+ (module_state::insert_mapping): Move directly into ...
+ (module_mapper::module_mapper): ... here.
+ (module_mapper::bewait_response, module_state::read_imports): Adjust.
+ (import_module, declare_module): Adjust.
+
+ gcc/cp/
+ * module.c (module_state::is_mapping): Rename to ...
+ (module_state::is_detached): ... here. Use from_loc.
+ (module_state::attach): New broken out of ...
+ (module_state::find_module): ... here. Delete, fold into ...
+ (module_state::read_imports, import_module, declare_module): ...
+ these callers.
+ (module_state::read): Adjust module index setting.
+
+ libiberty/
+ * pex-unix.c (IS_FAKE_VFORK): Rename to VFORK_IS_FORK.
+ (pex_unix_exec_child): Avoid spuros clobber warning, use stdio
+ when forking.
+
+2018-08-20 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r263679.
+
+ Merge trunk r263673.
+
+ Revert r263619 2018-08-17 Nathan Sidwell <nathan@acm.org>
+ Revert r263597 2018-08-16 Nathan Sidwell <nathan@acm.org>
+ They break GTY strangely.
+
+2018-08-17 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (module_state::is_detached): New.
+ (module_state::attach): New, broken out of ...
+ (module_state::find_module): ... here. Call it.
+ (declare_modules): Do module-specific attaching here.
+
+2018-08-16 Nathan Sidwell <nathan@acm.org>
+
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp (dg-module-pre-prune): Delete
+ (g++-dg-prune): Don't override.
+ * g++.dg/modules/legacy-4.H: Use dg-regexp.
+ * g++.dg/modules/loc-2_[def].C: Likewise.
+
+ gcc/cp/
+ * cp-tree.h (class module_state): Forward declare.
+ (get_module, pp_module_name): Declare.
+ (push_module_export, declare_module, import_module): Take
+ module_state.
+ * error.c (cp_printer): Accept %M.
+ * module.c (module_state::find_module): Take module_state.
+ (module_state::get_module): Drop default & insert args.
+ (module_state::insert_mapping): Delete.
+ (module_mapper::{module_mapper,bewait_response): Adjust.
+ (module_mapper::divert_include): Drop indentation.
+ (module_state::read_imports): Adjust.
+ (proclaimer): Is a module_state pointer.
+ (push_module_state, declare_module, import_module): Adjust.
+ (pp_module_name): New.
+ (get_module): New.
+ (maybe_atom_legacy_module): Adjust.
+ * parser.c (cp_parser_module_name): Return module_state, adjust.
+ (cp_parser_module_declaration, cp_parser_import_declaration):
+ Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/legacy-4.H: Adjust regexp.
+
+2018-08-08 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r263429.
+
+2018-08-02 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r263272.
+
+2018-07-12 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * include/cpplib.h (cpp_clear_if_stack): Renamed from
+ cpp_pop_directives.
+ * directives.c (cpp_clear_if_stack): Likewise, drop all arg.
+ gcc/c-family/
+ * c-ppoutput.c (scan_translation_unit): Fixup.
+
+ gcc/c-family/
+ * c.opt (fmodule-preamble): Alias fmodule-preamble=
+ (fmodule-preamble): Fix type.
+ * module.c: Add i18n markers.
+ (init_module_processing): Detect unsupported option combos.
+ (handle_module_option): Don't zap explicit modules-ts.
+ gcc/
+ * diagnostic.c (diagnostic_report_current_module): Add i18n
+ markers.
+ gcc/testsuite/
+ * g++.dg/modules/cpp-preamble-9.C: New.
+ * g++.dg/modules/modules.exp (mode_list): Preamble is atom.
+ libcpp/
+ * directives.c (cpp_pop_directives): Buffer could be NULL.le
+
+ gcc/cp/
+ * lex.c (atom_preamble_prefix_peek): Use cpp_macro_p.
+
+ Hide NT_MACRO
+ libcpp/
+ * include/cpplib.h (cpp_macro_p): New.
+ * macro.c (cpp_fun_like_macro_p): Use it.
+ gcc/c-family/
+ * c-ada-spec.c (count_ada_macro, store_ada_macro): Use
+ cpp_macro_p.
+ * c-ppoutput.c (dump_macro): Likewise.
+ * c-spellcheck.cc (should_suggest_as_macro_p): Likewise.
+ gcc/
+ * config/rs6000/rs6000-c.c (rs6000_macro_to_expand): Use cpp_macro_p.
+ * config/powerpcspe/powerpcspe-c.c (rs6000_macro_to_expand): Likewise.
+ gcc/fortran/
+ * cpp.c (dump_macro): Use cpp_macro_p.
+
+2018-07-06 Nathan Sidwell <nathan@acm.org>
+
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp: Restore g++-dg-prune after test.
+ * g++.dg/modules/legacy-5_c.C: Fix scan-lang-dump.
+
+2018-07-05 Nathan Sidwell <nathan@acm.org>
+
+ No ALIASes for IMPORTS
+ gcc/cp/
+ * cxx-mapper.cc (module2bmi): No aliases here.
+ (client::imex_response): Adjust.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Remove ALIAS from IMPORT response
+ set.
+
+ Legacy header warning
+ gcc/
+ * invoke.texi (Wlegacy-header): New warning.
+ gcc/c-family/
+ * c.opt (Wlegacy-header): New.
+ gcc/cp/
+ * cp-tree.h (atom_preamble_end): Declare.
+ * cp-lang.c (atom_preamble_fsm): Use it.
+ * lex.c (atom_preamble_prefix_peek): Check OPT_Wlegacy_header.
+ * module.c (do_divert_include): Likewise.
+ (atom_divert_include): Default -Wlegacy-header.
+ (atom_preamble_end): New.
+ * parser.c (c_parse_file): Use it.
+ gcc/testsuite/
+ * g++.dg/modules/legacy-6*: New.
+
+ Legacy header aliasing
+ gcc/
+ * doc/invoke.texi (C++ Modules): Update protocol docs
+ gcc/cp/
+ * cxx-module.cc (module2bmi): Deal with aliasing.
+ (encode_module_name): New.
+ (read_mapping_file): Use it. Deal with aliasing.
+ (client::imex_response): Likewise.
+ (client::action): Likewise,
+ * module.c (module_mapper::module_name_kind): New.
+ (module_mapper::response_name): Use it.
+ (module_mapper::divert_include): Allow aliasing.
+ gcc/testsuite/
+ * g++.dg/modules/legacy-5*: New.
+
+2018-07-03 Nathan Sidwell <nathan@acm.org>
+
+ Merge legacy header options to -fmodules-
+ gcc/
+ * doc/invoke.texi (C++ Modules): Adjust.
+ gcc/c-family/
+ c.opt (fmodules_legacy, fmodules_legacy=): New.
+ (fmodule-{user,system}-header{,=}): Delete.
+ gcc/cp/
+ * cp-tree.h (modules_legacy_p): Renamed from modules_header_p.
+ * lang-specs.h (@c++-header): Update.
+ * lex.c (atom_preamble_prefix_peek): Adjust.
+ * module.c (module_legacy_name): Do not force to empty string.
+ (module_state::get_option_string): Adjust.
+ (declare_module, maybe_atom_legacy_module, init_module_processing)
+ (handle_module_option): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/legacy-[1234]*: update.
+ * g++.dg/modules/atom-inc-1.C: Update.
+
+ Explicit user/system legacy headers
+ gcc/c-family/
+ * c-lex.c (c_lex_with_flags): Encode header names in tree lists.
+ * c.opt (fmodule-{user,system}-header): New.
+ gcc/cp/
+ * cxx-mapper.cc (module2bmi): Adjust.
+ (read_mapping_file): Encode legacy header names.
+ * lang-specs.h (@c++-header): Update.
+ * module.c (module_state_hash::hash): Update hashers.
+ (enum module_kind): New.
+ (module_state::set_name): Adjust.
+ (module_state_hash::equal): Adjust.
+ (module_header_is_system): New.
+ (make_legacy_name): Delete.
+ (module_state::get_module): Adjust.
+ (module_mapper::response_name): New.
+ (module_mapper::imex_query): Adjust.
+ (module_mapper::bewait_response): Adjust.
+ (module_mapper::divert_include): Adjust.
+ (declare_module, maybe_atom_legacy_module): Likewise.
+ (handle_module_option): Check new options.
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp: update BMI encodings.
+ * g++.dg/modules/legacy-[1234]*: update.
+ * g++.dg/modules/atom-inc-1.C: Update.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Document new options.
+
+2018-06-29 Nathan Sidwell <nathan@acm.org>
+
+ Diverted header column preservation
+ libcpp/
+ * directives.c (do_include_common): Adjust divert callback.
+ * include/cpplib.h (cpp_divert_include_t): Likewise.
+ gcc/cp/
+ * module.c (module_mapper::divert_include): Add line_maps.
+ Preserve column number.
+ (import_module): Look at attribs.
+ (do_divert_include): Adjust.
+ * parser.c (cp_parser_module_declaration): Return loc of name.
+ (cp_parser_import_declaration): Likewise.
+ (cp_parser_parse_module_preamble): Adjust.
+ gcc/
+ * langhooks.h (lang_hooks): Adjust preprocess_divert_include.
+ gcc/testsuite/
+ * g++.dg/modules/legacy-3_b.H: Adjust.
+ * g++.dg/modules/legacy-3_c.H: Adjust.
+ * g++.dg/modules/legacy-4.H: Adjust.
+
+ Diverted include line numbering
+ libcpp/
+ * directives.c (do_include_common): Fixup diversion line
+ numbering.
+ (_cpp_pop_buffer): Free to_free even if not a file.
+ gcc/c-family/
+ * c-ppoutput.c (print_line_1): More C++y.
+ gcc/cp/
+ * module.c (module_mapper::divert_include): Two \n's.
+ gcc/testsuite/
+ * g++.dg/modules/legacy-4: New.
+ * g++.dg/modules/legacy-3_b.H
+
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp (dg-module-pre-prunes): Renamed.
+
+ libcpp/
+ * directives.c (do_include_common): Include diverter will push
+ buffer.
+ * include/cpplib.h (cpp_divert_include_t): Adjust signature.
+ gcc/
+ * langhooks.h (lang_hooks): Adjust preprocess_divert_include
+ signature.
+ gcc/cp/
+ * module.c (module_mapper::divert_include): Push buffer here.
+ (do_divert_include): Adjust.
+
+2018-06-28 Nathan Sidwell <nathan@acm.org>
+
+ gcc/testsuite/
+ * g++.dg/modules/legacy-3*: New.
+
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp: Fix execution tests. Add dg-module-literal
+ * g++.dg/modules/legacy-2_d.C: Fix expected line number.
+ * g++.dg/modules/loc-2_[def].C: Use dg-module-literal.
+
+ (Beginnings of) Include diversion.
+ gcc/c-family/
+ * c-opts.c (c_common_post_options): Set divert_include hook.
+ (cb_file_change): Fixup precedence.
+ gcc/cp/
+ * cp-lang.c (LANG_HOOKS_PREPROCESS_DIVERT_INCLUDE): Override.
+ * cp-tree.h (modules_header_p): New.
+ (atom_divert_include): Declare.
+ * cxx-mapper.cc (flag_fallback): New flag.
+ (module2bmi): Deal with NULL names.
+ (buffer::get_request): Fix off-by-one error.
+ (read_mapping_file): Can be multiply called. Target file name can
+ be null.
+ (client::action): Deal with INCLUDE.
+ (main): There can be may files after connection. Fixup networking
+ errors.
+ * lex.c (atom_preamble_prefix_peek): Don't rescan legacy header
+ module.
+ * module.c (module_preamble_end_loc): Declare here.
+ (module_mapper::module_mapper): Prepend path for anything looking
+ defaulty.
+ (module_mapper::divert_include): New.
+ (do_divert_include): New.
+ (atom_divert_include): New.
+ (init_module_processing): Set header mode here.
+ * parser.c (module_preamble_end_loc): Extern.
+ gcc/
+ * doc/invoke.text (C++ Modules): Document -fmodule-header.
+ * langhooks-def.h (LANG_HOOKS_PREPROCESS_DIVERT_INCLUDE): Provide
+ default.
+ * langhooks.h (lang_hooks): Add preprocess_divert_include.
+ libcpp/
+ * directives.c (do_include_common): Add diversion smarts.
+ * include/cpplib.h (cpp_divert_include_t): New.
+ (struct cpp_callbacks): Add divert_include.
+ * line-map.c (linemap_module_loc): Missed commit.
+ gcc/testsuite/
+ * g++.dg/modules/legacy-2.*: New.
+ * g++.dg/modules/modules.exp: Fixup header compilation.
+
+2018-06-27 Nathan Sidwell <nathan@acm.org>
+
+ (Beginnings of) Legacy importing
+ gcc/cp/
+ * cxx-mapper.cc (module2bmi): Map legacy header names.
+ * module.c (module_state::legacy): New field.
+ (module_state::{is_legacy,set_name}): New.
+ (make_legacy_name): New.
+ (module_state::get_module): Canonicalize legacy name.
+ (module_state::get_option_string): Strip -fmodule-header.
+ (declare_module): Check correct kind.
+ (maybe_atom_legacy_module): Use make_legacy_name.
+ * parser.c (cp_parser_module_name): Parse legacy names.
+ (cp_parser_import_declaration): Don't special case legacy names
+ here.
+ gcc/testsuite/
+ * g++.dg/modules/atom-inc-1.C: Add expected errors.
+ * g++.dg/modules/legacy-1_[abc].[CH]: New.
+ * g++.dg/modules/modules.exp: Support legacy header compilation.
+
+ (Beginnings of) Legacy header modules
+ libcpp/
+ * line-map.c (linemap_module_loc): Expect ordinary loc.
+ gcc/
+ * langhooks-def.h (LANG_HOOKS_PREPROCESS_MAIN_FILE): Provide
+ default.
+ * langhooks.h (lang_hooks): Add preprocess_main_file hook.
+ gcc/c-family/
+ * c-opts.c (cb_file_change): Call new hook.
+ gcc/cp/
+ * cp-tree.h (enum atom_preamble_state): Define.
+ (atom_preamble_prefix_{peek,next}): Use enum.
+ (atom_main_file, maybe_atom_legacy_module): Declare.
+ * cxx-mapper.cc (module2bmi): Munge legacy module chars.
+ * lang-specs.h (@c++-header): Fix -fmodule-header use.
+ * lex.c (atom_preamble_prefix_{peek,next}): Adjust for enum.
+ * module.c (prefix_line_maps_hwm, prefix_locations_hwm): New.
+ (module_state::{read,write,prepare}_locations): Adjust prefix checking.
+ (ordinary_loc_of): New.
+ (import_module): Use it.
+ (declare_module): Set preamble prefix if needed.
+ (atom_main_file, maybe_atom_legacy_module): New.
+ (init_module_processing): Don't default module_header_name here.
+ (atom_module_preamble, finish_module): Push & pop exporting state in
+ legacy mode.
+ * parser.c (cp_parser_get_module_preamble_tokens): Adjust for
+ preamble state. Return indicator of preamble contents.
+ (c_parse_file): Maybe inject legacy module decl.
+ * cp-lang.c (LANG_HOOKS_PREPROCESS_MAIN_FILE): Override hook.
+ (atom_preamble_fsm): Adjust for state enum.
+
+2018-06-26 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r262148.
+
+ gcc/
+ * configure.ac: Fix AF_INET6 & accept4 tests.
+ * configure, config.in: Rebuilt.
+ gcc/cp/
+ * module.c: Update some comments.
+ (module_mapper::module_mapper): Fix up conditional code.
+ (module_state::read_imports): Replace local class with std::pair,
+ because C++98.
+ * cxx-mapper.cc (accept_from): Fixup conditional code.
+
+2018-06-25 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cxx-mapper.cc (kill_signal): New.
+ (server): Fixup inet_ntop use.
+
+ gcc/
+ * configure.ac: Check for inet_ntop.
+ * configure, config.in: Rebuilt.
+ gcc/cp/
+ * cxx-mapper.cc (server): Use inet_ntop when available.
+
+2018-06-24 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cxx-mapper.cc: BMI->GCC
+ * module.c: Likewise.
+ gcc/
+ * doc/invoke.texi: Likewise.
+
+2018-06-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cxx-mapper.cc (struct netmask): New.
+ (server): Validate connection addresses.
+ (accept_from): New.
+ (process_args): Add -a arg.
+
+ Simplify protocol.
+ gcc/cp/
+ * cxx-mapper.c (buffer::empty): New.
+ (buffer::send_response): Fixup buffer management.
+ (client::imex_response): New.
+ (client::action): Reimplement.
+ * module.c (module_mapper): Update.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Update protocol.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-1_c.C: Tweak scan.
+
+ A proper server
+ gcc/cp/
+ * cxx-module-mapper.sh: Delete.
+ * cxx-mapper.cc: New.
+ * Make-lang.in: Adjust.
+ * module.c (module_mapper:get_response): Fixup errors.
+ (module_mapper::import_query): Drop filename.
+
+2018-06-22 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (module_mapper::send_command): Fix off-by-one.
+ (module_mapper::get_response): Cleanup batch splitting.
+ (module_mapper::handshake): Adjust.
+ * cxx-module-mapper.sh (cmd): Adjust HELLO.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Tweak mapper protocol.
+
+ gcc/
+ * configure.ac: Check select, accept4.
+ * config.in, configure: Rebuilt.
+
+2018-06-21 Nathan Sidwell <nathan@acm.org>
+
+ gcc/c-family/
+ * c.opt: Add -fmodule-header.
+ gcc/cp/
+ * lang-specs.h: Add legacy import options.
+ * module.c (module_header_name): New.
+ (init_module_processing): Default it.
+ (handle_module_option): Set it.
+
+ Use getaddrinfo, not gethostbyname2
+ gcc/
+ * configure.ac (HAVE_AF_INET6): Test for getaddrinfo.
+ * configure: Rebuilt.
+ * doc/invoke.text (C++ Modules): Default is loopback.
+ gcc/cp/
+ * module.c (module_mapper::module_mapper): Reorganize network startup.
+ gcc/testsuite/
+ * g++.dg/modules/bad-mapper-[23].C: Adjust diagnostics.
+
+2018-06-19 Nathan Sidwell <nathan@acm.org>
+
+ Early & late location maps.
+ gcc/cp/
+ * modules.c (slurping, spewing): Rearrange.
+ (module_state::{prepare,read,write}_locations): Reimplement.
+ (module_state::{read,write}): Adjust.
+ (module_state::atom_preamble): Adjust.
+
+2018-06-18 Nathan Sidwell <nathan@acm.org>
+
+ gcc/testsuite/
+ * g++.dg/modules/loc-2_[a-f].C: New.
+
+2018-06-17 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * configure.ac: Detect epoll & pselect.
+ * configure, config.in: Rebuilt.
+
+ gcc/cp/
+ * module.c (module_mapper::module_mapper): Fixup length errors.
+
+ gcc/cp/
+ * cxx-module-mapper.sh: Remove recompilation capability.
+ gcc/testsuite/
+ * g++.dg/modules/import-2.C: Adjust messages.
+ * g++.dg/modules/main-aux.cc: Delete.
+ * g++.dg/modules/main_1.C: Delete.
+
+2018-06-15 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * diagnostic.c (diagnostic_report_current_module): Starting
+ location could be a module.
+ gcc/cp/
+ * module.c (trees_{in,out}::loc): Move to ...
+ (module_state::{read,write}_location}): ... here.
+ (trees_{in,out}::core_vals): Adjust.
+ (module_state::{read,write}_imports): Serialize import location.
+ (module_state::set_loc): Add floc parm, adjust.
+ gcc/testsuite/
+ * lib/prune.exp (prune_gcc_output): Adjust regexp.
+
+ gcc/cp/
+ * cp-tree.h (make_module_loc): Delete.
+ * lex.c (make_module_loc): Delete.
+ * module.c (module_state): Add depth field.
+ (module_state::set_loc): Deal with reseating. Add line_maps parm.
+ (module_state::read_imports): Do two passes.
+ (module_state::write_imports): Write length.
+ gcc/testsuite/
+ * g++.dg/modules/import-1_e.C Adjust lang dump scan.
+ * g++.dg/modules/mod-imp-1_d.C: Likewise.
+ libcpp/
+ * include/line-map.h (linemap_module_loc): Add incomping loc parm.
+ * line-map.c (linemap_module_loc): Do reseating.
+
+ Location! Location! Location!
+ gcc/cp/
+ * module.c (module_state::slurper): New.
+ (trees_{in,out}::loc): Implement.
+ (trees_in::core_vals): Set locus.
+ (spewing::linemaps): Fixup offset calculation.
+ (module_state::read_locations): Set ord_locs.
+ gcc/testsuite/
+ * g++.dg/module/loc-1_[abc].C: New.
+
+ libcpp/
+ * include/line-map.h (IS_ORDINARY_LOC, IS_MACRO_LOC): New.
+ (IS_ADHOC_LOC): Simplify.
+ (MAP_ORDINARY_P): Use IS_ORDINARY_LOC.
+ * line-map.c (linemap_module_restore): Fixup included_at.
+
+ gcc/
+ * diagnostic.c (diagnostic_report_current_module): Fixup include
+ stack messages.
+ gcc/testsuite/
+ * lib/prune.exp (prune_gcc_output): Adjust include stack regexps.
+
+ gcc/cp/
+ * module.c (spewer::linemaps): Return mask.
+ (module_state::{find,write}_locations): Use mask.
+ (module_state::read_locations): Implement.
+
+ Line_maps args everywhere!
+ gcc/cp/
+ * cp-tree.h (declare_module, import_module, atom_module_preamble):
+ Add line_maps arg.
+ * module.c (module_state::{read_imports,do_import}): Add line_maps.
+ (module_state::set_loc): New.
+ (module_state::atom_preamble): Deal with restoring line_maps.
+ (module_state::read): Add line_maps. Call read_locations.
+ * parser.c (cp_parser_module_declaration)
+ (cp_parser_import_declaration): Adjust.
+ (c_parse_file): Line_maps restoration is moved.
+ libcpp/
+ * include/line-map.h (linemap_save_pre_module): Delete.
+ (linemap_restore_pre_module): Rename to ...
+ (linemap_module_restore): ... here.
+ * line-map.c (linemap_save_pre_module): Delete.
+ (linemap_restore_pre_module): Rename to ...
+ (linemap_module_restore): ... here.
+
+ gcc/cp/
+ * module.c (bytes_{in,out}::align): New.
+ (bytes_{in,out}::buf): Use it.
+
+ libcpp/
+ * line-map.c (linemap_init): Set default allocator here.
+ (line_map_new_raw): Break out of ...
+ (new_linemap): ... here. Call it.
+ * include/line-map.h (line_map_new_raw): Declare
+
+2018-06-14 Nathan Sidwell <nathan@acm.org>
+
+ Break out import section.
+ gcc/cp/
+ * module.c (module_state::{read,write}_imports): New.
+ (module_state::{read,write}_config): Don't do imports here ...
+ (module_state::{read,write}): ... do them here.
+
+ Fix section alignment.
+ gcc/cp/
+ * module.c (elf_out::grow): Fix padding calc.
+ (elf_out::add): Assert aligned.
+
+ Write out line maps.
+ gcc/cp/
+ * cp-tree.g (atom_module_preamble, finish_module): Add line_maps.
+ * decl2.c (c_parse_final_cleanups): Pass line_table.
+ * parser.c (c_parse_file): Adjst.
+ * module.c (struct spewing): New.
+ (struct slurping): Add GTY tagging.
+ (module_state::spewer): New.
+ (module_state::{write,atom_preamble}): Add linemaps.
+ (module_state::{find,write,read}_locations): New.
+
+ gcc/cp/
+ * module.c (struct slurping): New, broken out of ...
+ (struct module_state): ... here. Move loading data there and
+ adjust all users.
+
+2018-06-13 Nathan Sidwell <nathan@acm.org>
+
+ Reorg line_map data structures.
+ libcpp/
+ * include/line-map.h (LINE_MAP_MAX_LOCATION): Define here.
+ (struct line_map): Move reason field to line_map_ordinary. Adjust
+ GTY tagging.
+ (struct line_map_ordinary): Reorder fields for less padding.
+ (struct line_map_macro): Likewise.
+ (MAP_ORDINARY_P): New.
+ (linemap_check_ordinary, linemap_check_macro): Adjust.
+ (MAP_MODULE_P): Adjust.
+ * line-map.c (LINE_MAP_MAX_SOURCE_LOCATION): Delete.
+ (new_linemap): Take start_location, not reason. Adjust.
+ (linemap_add, linemap_enter_macro): Adjust.
+ (linemap_line_start): Likewise.
+ (linemap_macro_expansion_map_p): Use MAP_ORDINARY_P.
+ (linemap_macro_loc_to_spelling_point): Likewise.
+ (linemap_macro_loc_to_def_point): Likewise.
+ (linemap_dump): Likewise.
+
+2018-06-12 Nathan Sidwell <nathan@acm.org>
+
+ Better socket handling. Kill mapping from fd
+ gcc/cp/
+ * module.c (class module_mapper): Add from & to fds.
+ (module_mapper::{module_mapper,kill}): Adjust.
+ (module_mapper::{send_command,get_response}): Likewise.
+ (module_from_cmp): New.
+ (module_state::atom_preamble): Reimplement.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Remove fd mapper options.
+ gcc/testsuite/
+ * g++.dg/modules/import-2.C: Adjust messages.
+ * g++.dg/modules/flag-1_b.C: Likewise.
+ * g++.dg/modules/mod-stamp-1_d.C: Likewise.
+
+ gcc/
+ * configure.ac: Rename HOST_HAS_AF_$FOO to HAVE_AF_$FOO.
+ * configure, config.in: Rebuilt.
+ gcc/cp/
+ * module.c: Adjust.
+
+2018-06-11 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c
+ (elf_out::grow): Always define, always align.
+ (elf_out::write): Streaming buffers must be using our
+ allocator. No need to align here.
+
+ MMAP writing
+ gcc/
+ * configure.ac: Check for posix_fallocate.
+ * configure, config.in: Rebuilt.
+ gcc/cp/
+ * module.c (MAPPED_WRITING): New.
+ (data::allocator::{grow,shrink}): New overloads.
+ (data::use): Check available.
+ (data::allocator::grow): Deal with allocator failure.
+ (bytes_in::read): Set overflow on fail.
+ (bytes_{in,out}::{u32,c,i,u,wi,buf}): Adjust.
+ (bytes_out::printf): Likewise.
+ (bytes_out::bytes_out): Allocator is non-optional.
+ (elf_out): Derive from data::allocator.
+ (elf_out::{grow,shrink}): New overriders.
+ (elf_out::elf_out): Find page size.
+ (elf_out::{create,remove}_mapping): New.
+ (elf_out::write): New overload.
+ (elf_out::add): Take bytes_out. Adjust users.
+ (elf_out::{begin,end}): Add mapping support.
+ (trees_out::trees_out): Add allocator parm.
+ (trees_{in::out}::fixed_refs): Delete, adjust uses.
+ (module_state::write_{readme,config,namespaces,bindings}): Adjust.
+ (module_state::write_{unnamed,cluster}): Adjust.
+
+ Prep for MMAP exporting.
+ gcc/cp/
+ * module.c (MODULE_MMAP_IO): Rename to ...
+ (MAPPED_READING): This.
+ (data): Add allocator class with default instance.
+ (data::{write,printf}): Move to bytes_out.
+ (data::read): Move to bytes_in.
+ (data::{extend,release}): Delete. Adjust uses.
+ (bytes_out): Add allocator pointer, alter ctor.
+ (bytes_out::begin): Add need_crc parm.
+ (elf::section_vec): Delete.
+ (elf): Add sectab, strtab data members.
+ (get_num_sections): Delete.
+ (elf_{in,out}::strings): Delete here.
+ (elf_in::{grow,shrink}): New.
+ (elf_in::{get_section{,_limit}): New, adjust uses.
+ (elf_in::{keep_sections,forget_section}): Delete.
+
+2018-06-09 Nathan Sidwell <nathan@acm.org>
+
+ MMAP importing!
+ gcc/cp/
+ * module.c (MODULE_MMAP_IO): New define.
+ (bytes::{begin,end}): Delete.
+ (elf_in::{freeze,defrost}): Adjust.
+ (elf_in::{begin,end}): Adjust.
+ (elf_in::{keep,forget}_section): Adjust.
+ (elf_in::read): Adjust.
+ (module_state::our_opts): New static member. Adjust uses.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Document lazy limit change.
+
+2018-06-08 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (elf): Replace FILE *stream with int fd. Update uses.
+
+ gcc/cp/
+ * module.c (bytes::begin): Add CRC parm.
+ (elf_in): Read buffers, adjust.
+
+ gcc/cp/
+ * module.c (elf_out): Track file position directly.
+ (elf_out::pad): Remove, fold into ...
+ (elf_out::write): ... here. Take a buffer.
+ (elf_out::{add,begin,end}): Adjust.
+
+ gcc/cp/
+ * module.c (elf): Add hdr member.
+ (elf_in::begin): Adjust.
+ (elf_out::{begin,end}): Adjust.
+
+ gcc/cp/
+ * module.c (data::printf): Moved from ...
+ (bytes_out::printf): ... here.
+ (elf): Replace sections pointer with section_vec local class.
+ Adjust all uses.
+ (elf_out): Remove strtab member class.
+ (elf_out::end): Adjust.
+
+2018-06-07 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (bytes::calc_crc): Take length parm. Adjust callers.
+ (elf_out::strtab): Reimplement.
+ (elf_out::add): Use buffer pos for length.
+
+ gcc/cp/
+ * module.c (struct data): Resurrect. Move buffer extension here.
+ Update users.
+ (class bytes): Derive from data.
+
+ gcc/cp/
+ * module.c (struct data): Delete. Move into ...
+ (struct bytes): ... here. Update uses.
+
+ gcc/cp/
+ * module.c (struct data): Make buffer a pointer. Redo interface.
+
+ Change integer on-disk format.
+ gcc/cp/
+ * module.c (bytes_{in,out}::{i,u,wi}): Reimplement.
+ (make_bmi_path): Don't prefix absolute paths.
+
+ BMI repo directory
+ libiberty/
+ * pex-unix.c: Fixup optimization issues.
+ gcc/cp/
+ * cxx-module-mapper.sh: Add repo to HELLO.
+ * module.c (bmi_repo, bmi_repo_length, bmi_path, bmi_path_alloc): New.
+ (set_bmi_repo, make_bmi_path, drop_bmi_prefix): New.
+ (module_mapper::{handshake,module_mapper}): Repo location from file.
+ (relativize_import): Delete.
+ (module_state::{write_readme,maybe_defrost,do_import,finish_module):
+ Adjust.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Document bmi repo.
+
+2018-06-06 Nathan Sidwell <nathan@acm.org>
+
+ Better pex-unix.
+ libiberty/
+ * pex-unix.c (VFORK_STRING): Replace with ...
+ (IS_FAKE_VFORK): ... this.
+ (pex_child_error): Delete, fold into ...
+ (pex_unix_exec_child): ... here. Inform parent, when really vforking.
+ gcc/cp/
+ * module.c (module_mapper::module_mapper): Merge error message.
+ gcc/testsuite/
+ * g++.dg/modules/bad-mapper-1.C: Adjust.
+ * g++.dg/modules/bad-mapper-{2,3}.C: New.
+
+ gcc/cp/
+ * module.c (module_mapper::module_mapper): Ignore sigpipe.
+ (module_mapper::kill): Restore sigpipe.
+ (module_mapper::{response_unexpected,get_response}): Cope with EOF.
+ gcc/testsuite/
+ * g++.dg/modules/bad-mapper-1.C: New.
+
+2018-06-05 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * doc/invoke.texi (C++ Modules): Clarify and extend.
+
+2018-06-04 Nathan Sidwell <nathan@acm.org>
+
+ Self relative direct import pathnames.
+ gcc/cp/
+ * module.c (relativize_import): New.
+ (module_state::write_readme): Call it.
+ (module_state::read_imports): Make import relative to importer,
+ query mapper if needed.
+
+ Cookies for mapping files
+ gcc/cp/
+ * module.c (module_mapper::response_eol): Add ignore arg.
+ (module_mapper::module_mapper): Cookie on file mapper.
+ gcc/
+ * invoke.texi (C++ Modules): Document file mapper cookie.
+ gcc/testsuite/
+ * g++.dg/modules/map-1_b.C: Use specific mapper.
+ * g++.dg/modules/map-1_b.map: New.
+
+2018-06-03 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * diagnostic.c (diagnostic_report_current_module): Don't claim
+ module was imported.
+ * doc/invoke.texi (C++ Modules): Update module-mapper docs.
+ gcc/cp/
+ * module.c (module_mapper::module_mapper): Change syntax for
+ option.
+ (module_mapper::response_token): Add all parm.
+ (module_mapper::bmi_response): Use it.
+ (module_state::check_read): Fix error reporting.
+ (finish_module): Warn if not exporting due to errors.
+ gcc/testsuite/
+ * lib/prune.exp (prune_gcc_output): Adjust module import regexp/
+ * g++.dg/modules/map-1_[ab].C: Adjust module-mapper arg.
+ * g++.dg/modules/atom-decl-2.C: Add expected warning
+ * g++.dg/modules/mod-decl-1.C: Likewise.
+ * g++.dg/modules/mod-decl-3.C: Likewise.
+ * g++.dg/modules/proclaim-1.C: Likewise.
+
+2018-06-01 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (module_mapper): Robustify.
+
+ gcc/fortran/
+ * cpp.c (cb_file_change): Adjust for line map inclusion changes.
+
+ Module mapping file is back
+ gcc/
+ * doc/invoke.text (C++ Modules): Document mapping file.
+ gcc/cp/
+ * cxx-module-mapper.sh: Strip -fmodule-preamble=.
+ * module.c (elf::get_error): Detect no file name.
+ (module_state): Add imported field.
+ (module_state::is_{imported,mapping}): New.
+ (module_mapper::module_mapper): Read mapping file.
+ (module_mapper::get_response): Distingish empty from end.
+ (module_state::get_module): Copy a mapping.
+ (module_state::insert_mapping): New.
+ (module_state::read_imports): Adjust.
+ (module_state::do_import): Set imported.
+ (import_module, declare_module): Adjust.
+ (module_state::atom_preamble): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/map-1{_a.C,_b.C,.map}: New.
+
+2018-05-31 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * doc/invoke.texi (C++ Modules): Show mapper cookie.
+ gcc/cp/
+ * module.c (module_mapper::fini): Assert.
+ (module_mapper::module_mapper): Remove dup2.
+ (module_mapper::reset): Delete.
+
+ gcc/
+ * doc/invoke.texi (C++ Modules): Rename -fmodule-server to
+ -fmodule-mapper.
+ gcc/c-family/
+ * c.opt (fmodule-mapper): Renamed from fmodule-server.
+ gcc/cp/
+ * cxx-module-mapper.sh: Renamed from cxx-module-server.sh.
+ * Make-lang.in: Update.
+ * module.c (struct module_mapper): Renamed from module_server.
+
+ Merge trunk r261033.
+
+ gcc/cp/
+ * module.c (bytes_in::begin): Add location_t arg.
+ (elf_in::begin): Add location args.
+ (trees_in::{tree_node,finish}): Use error_at.
+ (module_server::module_server): Likewise.
+ (module_state::read*): Adjust.
+ (module_state::{do_import,lazy_load}): Don't set input_location.
+ (finish_module): Likewise.
+
+ ASYNC loading & server cookie.
+ gcc/cp/
+ * cp-tree.h (reseat_module_loc, module_from_loc): Delete.
+ (atom_module_preamble): Declare.
+ * cxx-module-server.sh (cmd): Fix ASYNC response.
+ * lex.c (reseat_module_loc, module_from_loc): Delete.
+ * module.c (module_state::from_loc): Is a field.
+ (module_server): Require locations throughout. Redesign
+ interface. Add cookie.
+ (module_state::read_config): Use from_loc.
+ (module_state::read): Don't set module_purview here ...
+ (module_state::find_module): ... do it here.
+ (module_state::do_import): Add check_crc flag. Don't query server
+ here.
+ (import_module, declare_module): Query server here (ts).
+ (module_state::atom_preamble): New.
+ (atom_module_preamble): Call it.
+ (finish_module): Adjust.
+ * parser.c (cp_parser_peek_module_name): Fold into ...
+ (cp_parser_module_name): ... here.
+ (cp_parser_module_declaration): No injected atom end marker.
+ (cp_parser_module_preamble): Rename to ...
+ (cp_parser_get_module_preamble_tokens): ... this. Don't append
+ end marker. Return end loc.
+ (cp_parser_parse_module_preamble): New.
+ (cp_parser_declaration_seq_opt): Adjust.
+ (cp_parser_fill_main): Skip preamble.
+ (c_parse_file): Do preamble tokenization and parsing here.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Document server cookie.
+ libcpp/
+ * include/cpplib.h (cpp_relocate_peeked_tokens): Declare.
+ * include/line-map.h (linemap_save_pre_module)
+ (linemap_restore_pre_module): Declare.
+ (LINEMAP_MODULE_SET_FROM): Delete.
+ * lex.c (cpp_relocate_peeked_tokens): New.
+ * line-map.c (linemap_module_loc): Set from direcly.
+ (linemap_save_pre_module, linemap_restore_pre_module): New.
+ gcc/testsuite/
+ * g++.dg/modules/flag-1_b.C
+ * g++.dg/modules/freeze-1_d.C
+ * g++.dg/modules/import-2.C
+ * g++.dg/modules/indirect-1_c.C
+ * g++.dg/modules/mod-stamp-1_d.C
+
+2018-05-30 Nathan Sidwell <nathan@acm.org>
+
+ Module location
+ libcpp/
+ * include/cpplib.h (cpp_module_file): Delete.
+ * include/line-map.h (MAP_MODULE_P, LINEMAP_MODULE_SET_FROM): New.
+ (linemap_module_loc): Declare.
+ * files.c (cpp_module_file): Delete.
+ * line-map.c (linemap_module_loc): New.
+ gcc/cp/
+ * cp-tree.h (module_file_nest): Delete.
+ (make_module_loc, reseat_module_loc, module_from_loc): Declare.
+ * lex.c (module_file_nest): Delete.
+ (make_module_loc, reseat_module_loc, module_from_loc): New.
+ * module.c (struct module_state): Replace imp_loc and self_loc
+ with plain loc.
+ (module_state::{push,pop}_location): Delete.
+ (module_state::from_loc): New.
+ (module_state::find_module): Set module loc here.
+ (module_state::do_import): Adjust loc setting.
+ (module_state::lazy_load): Likewise.
+ (finish_module): Likewise.
+ gcc/
+ * diagnostic.c (diagnostic_report_current_module): Show module imports.
+ gcc/testsuite/
+ * lib/prune.exp: Prune 'module imported at'.
+ * g++.dg/modules/atom-check-1_b.C: Adjust.
+ * g++.dg/modules/circ-1_c.C: Adjust.
+ * g++.dg/modules/flag-1_b.C: Adjust.
+ * g++.dg/modules/import-2.C: Adjust.
+ * g++.dg/modules/mod-decl-1.C: Adjust.
+ * g++.dg/modules/mod-decl-2_b.C: Adjust.
+ * g++.dg/modules/mod-stamp-1_d.C: Adjust.
+
+ gcc/cp/
+ * module.c (struct module_state): Replace loc with imp_loc &
+ self_loc. Rename imported to direct.
+ (module_state::occupied): Delete.
+ (module_state::read{_,config}): Replace crc_ptr with bool flag.
+ (module_state::do_import): ... here. Break out ...
+ (module_state::find_module): ... this part. Absorb ...
+ (module_state::occupy): ... this. Delete.
+ (module_state::get_module): Change default insert. Check vec_name
+ for occupation.
+ (module_state::write_imports): Adjust.
+ (import_module, declare_module): Adjust.
+
+2018-05-29 Nathan Sidwell <nathan@acm.org>
+
+ Included from index becomes included_at location
+ libcpp/
+ * include/line-map.h (line_map_ordinary): Replace included_from
+ index with included_at source_location.
+ (ORDINARY_MAP_INCLUDER_FILE_INDEX, LAST_SOURCE_LINE_LOCATION)
+ (LAST_SOURCE_LINE, LAST_SOURCE_COLUMN): Delete.
+ (INCUDED_FROM): Delete.
+ (INCLUDED_AT, linemap_included_at): New.
+ (MAIN_FILE_P): Adjust.
+ * directives.c (do_linemarker): Use linemap_included_at.
+ * line-map.c (include_at_map): New.
+ (line_check_files_exited): Use it.
+ (LAST_SOURCE_LINE_LOCATION): New (moved from header).
+ (linemap_add, linemap_dump, linemap_dump_location): Adjust.
+ gcc/
+ * diagnostic.c (diagnostic_report_current_module): Use
+ linemap_included_at. Adjust line & col discovery.
+ gcc/c-family/
+ * c-common.c (try_to_locate_new_include_insertion_point): Use
+ linemap_included_at.
+ * c-lex.c (fe_file_change): Use INCLUDED_AT.
+ * c-ppoutput.c (pp_file_change): Likewise.
+
+ libcpp/
+ * include/line-map.h (enum lc_reason): Add LC_HWM, LC_CXX_MODULE.
+ * line-map.c (linemap_dump): Adjust.
+ gcc/
+ * diagnostic.c (diagnostic_report_current_module): Reroll loop.
+
+ gcc/cp/
+ * cxx-module-server.sh: Add batching and ASYNC support.
+ gcc/
+ * doc/invoke.texi (C++ Modules): More protocol explanation
+
+2018-05-25 Nathan Sidwell <nathan@acm.org>
+
+ Server protocol batching
+ gcc/
+ * doc/invoke.texi (C++ Modules): Document protocol batching.
+ gcc/cp/
+ * cp-tree.h (maybe_peek_import): Delete.
+ * lex.c (atom_preamble_prefix_peek): Drop import peeking.
+ * parser.c (cp_parser_module_preamble): Likewise.
+ * module.c (module_server::{send_command,get_response}): Deal with
+ batching.
+ (module_state::peek_import_query, maybe_peek_import): Delete.
+ (module_state::next_line): New.
+ gcc/tesutsuite/
+ * g++.dg/modules/atom-peek-1_[abc].C: Delete.
+
+ Merge trunk r260753.
+
+ Direct import lambda returns!
+ gcc/cp/
+ * module.c (depset::decl_key): Remove assert.
+ (trees_{in,out}::core_vals): Serialize type context, lambda expr and
+ decl size & value.
+ (trees_out::tree_decl): Spot voldemort returns. Ident by index.
+ (trees_in::tree_node): Ident by index.
+ (trees_in::finish_type): Don't set type context here.
+ (depset::hash::add_dependency): Namespaces are also ok.
+ * decl.c (fndecl_declared_return_type): Default to auto.
+ * decl2.c (no_linkage_error): Ignore imported decls.
+ * name-lookup.h (lookup_by_ident): Ident is index.
+ (get_lookup_ident): Declare.
+ * name-lookup.c (get_binding_or_decl): New.
+ (lookup_by_ident): Use it. Ident is index.
+ (get_lookup_ident): New.
+ gcc/testsuite/
+ * g++.dg/modules/vmort-1_[ab].C: New.
+ * g++.dg/modules/lambda-1_[ab].C: New.
+
+2018-05-24 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (extract_module_decls): Don't strip template of
+ result.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Consider batching.
+
+ gcc/
+ * doc/invoke.texi (C++ ModuleS): Update server docs.
+ gcc/cp/
+ * cxx-module-server.sh: Add INCLUDE.
+ * semantics.c (deferred_access): Move GTY.
+ * module.c (module_state::global_vec): Move GTY.
+ (module_state::modules): Likewise.
+ * parser.c (cp_parser_peek_module_name): Remove incomplete
+ partition work.
+
+ DECL_DISCRIMINATOR for local classes, merge local var disc.
+ gcc/cp/
+ * cp-tree.h (language_function): Remove x_local_names.
+ (DECL_DISCRIMINATOR_P): Allow IMPLICIT_TyPEDEF too.
+ (DECL_DISCRIMINATOR_SET_P): Delete.
+ (local_classes): Delete declaration.
+ (determine_local_discriminator): Declare.
+ * class.c (local_classes): Delete.
+ (init_class_processing): Don't init it.
+ * decl.c (local_names): Delete.
+ (local_entities): New.
+ (push_local_name): Replace with ...
+ (determine_local_discriminator): ... this.
+ (cp_finish_decl): Adjust.
+ (save_function_data, finish_function): Remove local_name handling.
+ * decl2.c (finish_anon_union): Set discriminator.
+ * mangle.c (write_unnamed_type_name): Use discriminator_for_local_entity.
+ (local_class_index): Delete.
+ (discriminator_for_local_entity): Use DECL_DISCRIMINATOR for both
+ cases.
+ (write_local_name): Adjust.
+ * name-lookup.c (do_pushtag): Use determine_local_discriminator.
+ gcc/testsuite/
+ * g++.dg/abi/anon5.C: New.
+
+2018-05-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * diagnostic-code.h (fullname): Delete.
+ * diagnostic.c (fullname): Delete.
+ * toplev.c (general_init): Don't set it.
+ gcc/cp/
+ * module.c: Include opts.h.
+ (module_state::get_option_string): New.
+ (module_state::write_{readme,config}): Write option string.
+ (module_state::read_config): Check it.
+ (module_state::write): Adjust.
+ (module_server::module_server): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/flag-1_[ab].C: New.
+
+ Now with a Sneakoscope!
+ gcc/cp/
+ * module.c (depset::hash): Add a sneakoscope.
+ (module_state::find_dependencies): Turn it on.
+ (trees_out::tree_decl): Check it.
+ gcc/testsuite/
+ * g++.dg/modules/local-1_[ab}.C: New.
+
+ gcc/cp/
+ * cxx-module-server.sh: Remove --no-default.
+ * module.c (module_server::send_command): New.
+ (module_server::{reset,handshake,import_export_query,export_done}):
+ Use it.
+ gcc/testsuite/
+ * g++.dg/modules/atom-peek-1_[bc].C: Adjust scans.
+ * g++.dg/modules/indirect-1_c.C: Likewise.
+
+2018-05-22 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cxx-module-server.sh: Add --no-compile, --no-default and
+ --mapping options.
+
+ gcc/cp/
+ * module.c (depset::defn_key): Add is_def parm.
+ (depset::hash::add_definition): Delete.
+ (depset::hash::add_dependency): Add either decl or defn.
+ (depset::hash::add_binding): Use add_dependency.
+ (cluster_cmp): Swap defns and decls.
+ (cluster_tag): Delete ct_voldemort, ct_no_decl.
+ (module_state::{read,write}_cluster): Voldemorts are implicit.
+ (module_state::write): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/unnamed-1_b.C: Adjust module scan.
+
+ Revert lazy definition patches. Once one gets into template land
+ it's all very brittle. We end up with an unmaintained difference
+ betweek 'we need the definition right now', and 'we need the
+ definition at some point'. I end up not being able to maintin the
+ SCC dependency graph, and my head melted, looking a the rat hole
+ that was appearing. Until proved otherwise, there are other
+ things to get on with.
+ gcc/cp/
+ * cp-tree.h (DECL_MODULE_LAZY_DEFN, HAS_DECL_MODULE_LAZY_DEFN_P)
+ (MAYBE_DECL_MODULE_LAZY_DEFN): Delete.
+ (struct lang_decl_min): Remove lazy_module_defn field.
+ (lazy_load_defn): Delete decl.
+ * constexpr.c (cxx_eval_call_expression): Remove lazy loading.
+ * decl2.c (decl_defined_p, mark_used): Likewise.
+ * module.c (depset::hash::add_definition): Remove DEFERRED parm.
+ (trees_in::{pre,}seed): Delete.
+ (trees_out::seeding{,_p}): Delete.
+ (trees_out::unmark_trees): Seeding not needed.
+ (trees_out::{begin,end}): Delete seeding variants.
+ (trees_out::seed): Remove.
+ (trees_out::insert): Return val, remove seeding.
+ (trees_{in,out}::lang_decl_vals): Remove seeding.
+ (has_definition): Return bool.
+ (ct_seed_decl, ct_self_used): Delete.
+
+ (module_state::{read,write}_cluster): Remove lazy handling.
+ (module_state::{find_dependencies,write}): Adjust.
+ (module_state::check_read): Adjust.
+ (module_state::lazy_load, lazy_load_defn): Delete.
+ * ptree.c (cxx_print_decl): Remove lazy defn index.
+
+ Almost lazy function definitions.
+ gcc/cp/
+ * constexpr.c (cxx_eval_call_expression): Maybe lazy load.
+ * decl2.c (decl_defined_p): Lazy definitions are ok.
+ (mark_used): Try and lazy load.
+ * module.c (module_state::lazy_load): Lazy load a definition.
+ (trees_out::seed): Mark template result.
+ (trees_in::tree_node): Adjust mark_used.
+ (module_state::write_cluster): Adjust.
+ (module_state::read_cluster): Accept ct_self_used.
+ (lazy_load_defn): New.
+
+ gcc/cp/
+ * module.c (trees_out::seed): Reimplement mechanim.
+ (trees_out::{begin,end}): Don't turn seeding on/off here.
+ (trees_out::unmark_trees): Add logging.
+ (trees_in::preseed): Fix addition calculation.
+ (module_state::write_cluster): Adjust lazy defn seeding.
+ (module_state::read_cluster): Add lazy defn seeding.
+ (module_State::find_dependencies): Adjust.
+
+2018-05-21 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * directives.c (struct if_stack): Add hash_loc field.
+ (PEEKED): Replace with ...
+ (PEEK_INVISIBLE): ... this. Inverted sense.
+ (DIRECTIVE_TABLE): Update.
+ (linemarker_dir): Add PEEK_INVISIBLE.
+ (_cpp_handle_directive): Correctly handle if nests.
+
+ gcc/testsuite/
+ * g++.dg/modules/atom-preamble-2_[def].C: New.
+
+ gcc/cp/
+ * cp-tree.h (HAS_DECL_MODULE_LAZY_DEFN_P): New.
+ (MAYBE_DECL_MODULE_LAZY_DEFN): Use it.
+ * module.c (trees_in::{pre,}seed): Adjust.
+ (trees_out::{begin,end}): New overloads.
+ (trees_out::unmark_trees): Adjust.
+ (trees_out::{preseed,insert}): Correct force marking.
+ (trees_in::tree_node): Robustify.
+ (module_state::write_cluster): Fix name, better messages,
+ (module_state::read_cluster): Use ct_no_decl.
+ (module_state::write): Use HAS_DECL_MODULE_LAZY_DEFN_P.
+ (module_state::check_read): Use decl if it makes sense.
+
+ Write lazy decls (no reading yet)
+ gcc/cp/
+ * module.c (elf_out::strtab::named_decl): Add IS_DEFN parm.
+ (elf_out::named_decl): Likewise.
+ (elf_out::strtab::write): Adjust.
+ (FIXED_LIMIT): New.
+ (trees_out::set_seed): Delete.
+ (trees_out::{pre,un,}seed): New.
+ (trees_out::insert): Adjust for seeding.
+ (trees_out::tree_ref): Likewise.
+ (cluster_tag): Add ct_lazy.
+ (module_state::write_cluster): Preseed decls of lazy defns.
+ (module_state::find_dependencies): Adjust seeding changes.
+ (module_state::write): Determine lazy defn section numbers.
+
+2018-05-20 Nathan Sidwell <nathan@acm.org>
+
+ libcpp/
+ * internal.h (_cpp_handle_directive): Add HASH_LOC arg.
+ * directives.c (_cpp_handle_directive): Add HASH_LOC arg, store it.
+ * init.c (read_original_filename): Adjust _cpp_handle_directive call.
+ * lex.c (_cpp_lex_token): Likewise.
+ * traditional.c (_cpp_scan_out_logical_line): Likewise.
+ * directives-only.c (_cpp_preprocess_dir_only): Likewise.
+
+ Import peeking
+ gcc/c-family/
+ * c-lex.c (c_lex_with_flags) <case CPP_STRING>: Check
+ C_LEX_STRING_IS_HEADER.
+ * c-pragma.h (C_LEX_STRING_IS_HEADER): New flag.
+ gcc/cp/
+ * cp-tree.h (HEADER_STRING_LITERAL_P): Delete.
+ (maybe_peek_import): Declare.
+ * cxx-module-server.sh: Adjust.
+ * lex.c (atom_preamble_prefix_peek): Add peeking state.
+ * module.c (module_server::peek_import_query): New.
+ (make_flat_name): New. Broken out of ...
+ (module_state::do_import): ... here. Call it.
+ (maybe_peek_import): New.
+ * parser.c (cp_parser_peek_module_name): New.
+ (cp_parser_module_name): Use it.
+ (cp_parser_import_declaration): Adjust.
+ (cp_parser_module_preamble): Do peeking.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Tweak server protocol
+ gcc/testsuite/
+ * g++.dg/modules/atom-peek-1_[abc].C: New.
+ * g++.dg/modules/mod-decl-1.C: Adjust diags.
+ * g++.dg/modules/p0713-2.C: Likewise.
+ * g++.dg/modules/proclaim-1.C: Likewise.
+
+ Diagnose pragmas ending preamble.
+ libcpp/
+ * lex.c (cpp_peek_token_with_location): Set peeked_location to
+ incoming location. Fix pragma unwind.
+ gcc/cp/
+ * cxx-module-server.sh: Add new commands.
+ * lex.c (atom_preamble_prefix_peek): Note trailing pragma.
+ gcc/
+ * doc/invoke.text (C++ Modules): More server commands.
+ gcc/testsuite/
+ * g++.dg/modules/atom-pragma-[123].C: New.
+
+2018-05-19 Nathan Sidwell <nathan@acm.org>
+
+ Parse after tokenizing
+ libcpp/
+ * lex.c (cpp_peek_token_with_location): Adjust for compiler warning.
+ gcc/cp/
+ * parser.c (module_preamble_end_loc): Rename to ...
+ (module_marker_loc): ... here.
+ (cp_parser_module_declaration): Reimplement.
+ (cp_parser_import_declaration): Adjust.
+ (cp_parser_module_preamble): Don't parse here. Add artificial end
+ marker.
+ (cp_parser_declaration_seq_opt): Adjust for atom.
+ (cp_parser_fill_main): Whole buffer is to be parsed.
+ (c_parse_file): Don't set end_loc here.
+ gcc/testsuite/
+ * g++.dg/modules/atom-decl-1.C: Adjust diagnostics.
+ * g++.dg/modules/atom-preamble-1.C: Likewise.
+ * g++.dg/modules/mod-decl-1.C: Likewise.
+ * g++.dg/modules/p0713-[23].C: Likewise.
+
+2018-05-18 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (trees_out::maybe_insert_typeof): New.
+ (trees_out::{force_,maybe_,}insert): Merge, adjust callers.
+ (trees_out::tree_decl): Use maybe_insert_typeof.
+ (module_state::write_cluster): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-3_c.C: Adjust scans.
+
+ gcc/cp/
+ * module.c (module_state::write_cluster): Break apart unnamed
+ numbering from marking.
+ (module_state::write): Break apart cluster sizing from section
+ numbering.
+
+ gcc/cp/
+ * module.c (trees_out::mark_node): Lose walk_into parm. Adjust
+ all callers.
+ (module_state::write_cluster): Assert binding already marked.
+
+ gcc/cp/
+ * module.c (module_state::mark_definition): Remove include_decl
+ parm.
+ (module_state::mark_{template,function,var,class,enum}_def): Likewise.
+
+ gcc/cp/
+ * module.c (trees_in::{preseed,seed}): New.
+ (trees_out::seeding): New member.
+ (trees_out::seeding_p): New predicate.
+ (trees_out::unmark_trees): Add trees_in parm to preseed.
+ (trees_out::end): Add trees_in parm.
+ (trees_out::set_seed): New.
+ (trees_out::tree_decl): Check seeding_p.
+ (module_state::find_dependencies): Preseed the decl of a defn.
+ gcc/testsuite/
+ * g++.dg/modules/defer-1.C :New.
+
+ gcc/cp/
+ * module.c (depset::hash::add_definition): Add DEFERRABLE parm.
+ (has_definition): Return tristate.
+ (depset::hash::add_{dependency,binding}): Adjust.
+ (module_state::find_dependencies): Refactor.
+
+ Add lazy_module_defn cookie.
+ * cp-tree.h (DECL_MODULE_LAXY_DEGN, MAYBE_DECL_MODULE_LAZY_DEFN): New.
+ (struct lang_decl_min): Add lazy_module_defn field.
+ * module.c (trees_{in,out}::lang_decl_vals): Serialize it.
+ * ptree.c (cxx_print_decl): Print it.
+
+ gcc/cp/
+ * cp-tree.h (ovl_op_flags, ovl_op_code): Reindent.
+ * lex.c (atom_preamble_prefix_peek): FIXME.
+ * parser.c (cp_parser_module_preamble): FIXME.
+ * module.c (bytes_out::streaming_p (): New.
+ (trees_out::streaming_p): Delete.
+ (tt_backref): Delete. Update uses to know -ve == backref
+ (module_state::write_cluster): Some refactoring.
+
+2018-05-16 Nathan Sidwell <nathan@acm.org>
+
+ Preamble rescanning!
+ gcc/
+ * configure.ac: Look for execv.
+ * config.in, configure: Rebuilt.
+ * toplev.h (original_argc, original_argv): Declare.
+ * toplev.c (original_argc, original_argv): Declare.
+ (toplev::main): Set them.
+ doc/invoke.texi (EE) Rename to ...
+ (fmodule-preamble): ... this.
+ (C++ Modules): Document RESET message. Document N,N.
+ gcc/c-family/
+ * c.opt (EE): Rename to ...
+ (fmodule-preamble) ... here.
+ (fmodule-preamble=): New hidden option.
+ * c-ppoutput.c (scan_translation_unit): Use cpp_pop_directives.
+ gcc/cp/
+ * cp-tree.h (atom_preamble_prefix_peek): Add from-parser parm.
+ (maybe_repeat_preamble): Declare.
+ * cp-lang.c (atom_preamble_fsm): Adjust.
+ * cxx-module-server.sh (RESET): New command.
+ * lang-specs.h (@c++): Adjust EE->fmodule-preamble.
+ * lex.c (atom_preamble_prefix_peek): Add from-parser parm. Check
+ flag_module_preamble. Call maybe_repeat_preamble.
+ * module.c: #include "toplev.h"
+ (module_server_name): Is const.
+ (module_server::module_server): Copy command. Support N,N for two
+ pipes.
+ (module_server::make): Adjust.
+ (module_server::reset): New.
+ (module_server::fini): Add reset arg. Reset.
+ (maybe_repeat_preamble): New.
+ (handle_module_option): Adjust.
+ * parser.c (cp_parser_module_preamble): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/cpp-preamble-[1-8].C: Adjust options.
+ * g++.dg/modules/atom-rescan-1.C: New.
+ * g++.dg/modules/atom-no-rescan-1.C: New.
+
+2018-05-15 Nathan Sidwell <nathan@acm.org>
+
+ Detect cpp directives at end of preamble
+ libcpp/
+ * include/cpplib.h (cpp_peek_token_with_location): Declare.
+ (cpp_pop_directives): Declare.
+ * internal.h (struct cpp_reader): Add peeked_directive field.
+ * directives.c (PEEKED): New.
+ (DIRECTIVE_TABLE): Add it.
+ (_cpp_handle_directive): Set peeked_directive.
+ (cpp_pop_directives): New.
+ * lex.c (cpp_peek_token): Wrapper around ...
+ (cpp_peek_token_with_location): ... this.
+ gcc/cp/
+ * cp-lang.c (atom_preamble_fsm): Update for new state transitions.
+ * lex.c (atom_preamble_prefix_peek): Check peeked directives.
+ * parser.c (cp_parser_module_preamble): Update.
+ gcc/testsuite/
+ * g++.dg/modules/cpp-preamble-1.C: Add diag
+ * g++.dg/modules/cpp-preamble-[678].C: New.
+
+ libcpp/
+ * include/cpplib.h (cpp_in_macro_expansion_p): Declare.
+ * macro.c (in_macro_expansion_p): Rename to ...
+ (cpp_in_macro_expansion_p): ... here. Externalize.
+ (cpp_get_token_1): Adjust.
+ * internal.h: Update docs.
+ gcc/
+ * langhooks.h (struct lang_hooks): Adjust preprocess_preamble.
+ gcc/c-family/
+ * c-ppoutput.c (scan_translation_unit): Pass token location to
+ preamble hook.
+ gcc/cp/
+ * cp-lang.c (atom_preamble_fsm): Pass token loc through.
+ * cp-tree.h (atom_preamble_prefix_next): Take token loc.
+ * lex.c (atom_preamble_prefix_next): Take token loc. Warn if
+ ending inside macro.
+ * parser.c (cp_parser_module_preamble): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/cpp-preamble-5.C: New.
+
+ gcc/
+ * langhooks.h (struct lang_hooks): Adjust preprocess_preamble.
+ gcc/cp/
+ * cp-tree.h (atom_preamble_prefix_{peek,next}): Declare.
+ * cp-lang.c (atom_preambls_fsm): Adjust args. Use
+ atom_preamble_prefix_{peek,next}.
+ * lex.c (atom_preamble_prefix_len): Turn into ...
+ (atom_preamble_prefix_peek): ... this.
+ (atom_preamble_prefx_next): New.
+ * parser.c (cp_parser_module_preamble): Adjust.
+ gcc/c-family/
+ * c-ppoutput.c (scan_translation_unit): Adjust
+ gcc/testsuite/
+ * g++.dg/modules/atom-preamble-2_c.C: New.
+ * g++.dg/modules/cpp-preamble-4.C: New.
+
+ gcc/cp/
+ * Make-lang.in: Dont sed server version
+ * module.c: Use fixed server version.
+ * cxx-module-server.sh: Likewise.
+
+ gcc/cp/
+ * module.c (trees_out::dep_walk_p): Replace with ...
+ (trees_out::{streaming,depending}_p): ... these. Update callers.
+
+2018-05-14 Nathan Sidwell <nathan@acm.org>
+
+ Objectify module server.
+ gcc/cp/
+ * module.c (class module_server): New.
+ (server_read, server_write, server_pex, server_size)
+ (server_buffer, server_pos, server_end)
+ (server_response, server_token, server_word, server_unexpected)
+ (server_error, server_init, server_fini): Move into module_server class.
+ (server_module_filename): Delete.
+ (module_state::do_import): Use module_server::import_query.
+ (finish_module): Use module_server::export_{query,done}.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-1_c.C: Tweak.
+
+ gcc/
+ * doc/invoke.texi (C++ Modules): Clarify server docs.
+ gcc/cp/
+ * cxx-module-server.sh: Robustify.
+ * module.c (server_module_filename): Send from location.
+ gcc/testsuite/
+ * g++.dg/modules/import-2.C: Tweak.
+
+2018-05-13 Nathan Sidwell <nathan@acm.org>
+
+ Redo the server protocol.
+ gcc/cp/
+ *cxx-module-server.sh: Update protocol.
+ * module.c (elf_out::end): Protect from NULL stream.
+ (server_size, server_buffer, server_pos, server_end): New.
+ (server_response, server_token, server_word): New.
+ (server_end_p): New.
+ (server_malformed): Delete.
+ (server_init, server_module_filename, server_done): Adjust.
+ (module_state::do_import): Adjust.
+ gcc/
+ * doc/invoke (C++ Modules): Update server protocol.
+
+2018-05-12 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (module_server): Make pointer to non-const.
+ (server_fini, handle_module_option): Add const_cast.
+ (server_init): Write into module_server. strdup if it came from
+ environment.
+
+ Rename oracle->server, thanks Richard Smith
+ gcc/
+ * doc/invoke.texi (fmodule-oracle): Rename.
+ gcc/c-family/
+ * c.opt (fmodule-oracle): Rename.
+ gcc/cp/
+ * Make-lang.in (cxx-module-oracle): Rename.
+ * cxx-module-oracle.sh: Rename.
+ * module.c (ORACLE_VERSION, module_oracle, oracle_read)
+ (oracle_write, oracle_pex): Rename.
+ (oracle_fini, oracle_init, oracle_response, oracle_unexpected)
+ (oracle_malformed, oracle_module_filename, oracle_done): Rename.
+
+ Direct import filenames are stored.
+ gcc/cp/
+ * module.c (bytes_out::str): Add overload.
+ (bytes_in::str): Robustify.
+ (module_state::{read,write}_imports): New.
+ (noisy_p): New.
+ (module_state::announce, oracle_init): Use noisy_p.
+ (oracle_module_file): Rename to ...
+ (oracle_module_filename): ... here. Adjust parms, return
+ filename.
+ (module_state::write_readme): Write import filename.
+ (module_state::{read,write}_config): Use {read,write}_imports.
+ (module_state::do_import): Add FILENAME arg, adjust.
+ (finish_module): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/import-1_e.C: Adjust scan.
+ * g++.dg/modules/indirect-1_c.C: Verify no query on indirect import.
+
+2018-05-11 Nathan Sidwell <nathan@acm.org>
+
+ Remove remaining knowledge of module file names.
+ gcc/cp/
+ * module.c (MOD_FNAME_SFX, MOD_FNAME_DOT): Delete.
+ (module_state): Remove srcname.
+ (module_state::print_map): Delete.
+ (oracle_query_module, oracle_stream, find_module_file): Merge to ...
+ (oracle_module_file): ... this.
+ (make_module_file, find_file): Delete.
+ (module_state::do_import): Adjust.
+ (finish_module): Likewise.
+
+ (Kill -fmodule-output -- use the oracle.
+ gcc/c-family/
+ * c.opt (fmodule-output): Delete.
+ gcc/
+ * doc/invoke.texi (C++ Dialect Options): Delete -fmodule-output.
+ (C++ Modules): Likewise.
+ gcc/cp
+ * module.c (module_output): Delete.
+ (module_state::do_import): Don't check it.
+ (finish_module): Likewise.
+ (handle_module_options): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/fmod-out-1_[ab].C: Delete.
+
+ Kill -fmodule-file -- use the oracle.
+ gcc/c-family/
+ * c.opt (fmodule-map-dump): Delete.
+ (fmodule-file): Delete.
+ gcc/cp/
+ * module.c (module_file_args, module_map_dump): Delete.
+ (parse_module_mapping): Delete.
+ (add_module_mapping): Delete.
+ (init_module_processing): Delete module map init.
+ (handle_module_option): Delete module map options.
+ gcc/
+ * doc/invoke.texi (C++ Dialect Options): Delete -fmodule-file.
+ (C++ Modules): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/fmod-file-1_[ab].C: Delete.
+ * g++.dg/modules/fmod-out-1_[ab].C: Adjust.
+
+ Kill -fmodule-path and CXX_MODULE_PATH -- use the oracle.
+ gcc/
+ * doc/invoke.texi (C++ Dialect Options): Remove -fmodule-path.
+ (C++ Modules): Likewise.
+ * incpath.h (INC_CXX_MPATH): Delete.
+ (clean_cxx_module_path): Delete.
+ * incpath.c (clean_cxx_module_path): Delete.
+ gcc/c-family/
+ * c-opts.c (c_common_post_options): Don't clean_cxx_module_path.
+ * c.opt (fmodule-path): Delete.
+ gcc/cp/
+ * module.c (module_path, module_path_max): Drop.
+ (find_file): Adjust.
+ (init_module_processing): Drop module path init.
+ (handle_module_option): Drop module_path.
+
+ gcc/cp/
+ * Make-lang.in (cxx-module-oracle): Sed version.
+ (cxx_module-wrapper): Delete.
+ * cxx-module-oracle: Allow dev versions.
+ * cxx_module-wrapper: Delete.
+ * module.c (ORACLE_VERSION): New.
+ (oracle_init): Use MODULE_STAMP if available.
+
+ A more conventional protocol
+ gcc/
+ * doc/invoke.texi (C++ Modules): Update oracle protocol.
+ gcc/cp/
+ * cxx-module-oracle.sh: Update protocol.
+ * module.c (oracle_response): Parse response.
+ (oracle_unexpected, oracle_malformed): New.
+ (oracle_init): Check version.
+ (oracle_query_module): Update.
+
+ Kill module wrapper -- you should use the oracle.
+ gcc/
+ * doc/invoke.texi (C++ Dialect Options): Remove -fmodule-wrapper.
+ * gcc.h (driver::maybe_putenv_CXX_MODULE_WRAPPER): Delete decl.
+ * gcc.c (maybe_putenv_CXX_MODULE_WRAPPER): Delete.
+ (driver::main): Don't call it.
+ gcc/cp/
+ * module.c (module_wrapper): Delete.
+ (find_module_file): Drop wrapper spawning.
+ (init_module_processing): Drop wrapper initialization.
+ (handle_module_option): Drop wrapper option.
+ gcc/c-family/
+ * c.opt (fmodule-wrapper=): Delete.
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp (DEFAULT_MODFLAGS): Drop -fmodule-wrapper.
+ * g++.dg/modules/main-[123]-aux.cc: Delete.
+ * g++.dg/modules/main-[123]-map: Delete.
+ * g++.dg/modules/main-[123]_a.C: Delete.
+
+ gcc/c
+ * config.in: Rebuilt too.
+
+ gcc/
+ * diagnostic-core.h (fullname): Declare.
+ * diagnostic.c (fullname): Define.
+ * toplev.c (general_init): Set it.
+ gcc/cp/
+ * cxx-module-oracle.sh: More messages.
+ * module.c (oracle_init): When defaulting, expect to be next to
+ cc1plus.
+ (oracle_stream): Always try and init the oracle.
+ gcc/testsuite/
+ * g++.dg/modules/main_a.C: Adjust for oracle use.
+
+ gcc/
+ * configure.ac: Check for AF_UNIX and AF_INET6.
+ * configure: Rebuilt.
+ * doc/invoke.texi (C++ Modules): Update oracle.
+ gcc/cp/
+ * module.c: Check HOST_HAS_AF_{UNIX,INET6}.
+
+2018-05-10 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c: Include socket headers.
+ (oracle_init): Create and connect local or ipv6 socket.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Document oracle socket options.
+
+ gcc/cp/
+ * module.c (module_prefix): Delete.
+ (make_module_filename): Don't handle it.
+ (handle_module_option): Nor here.
+ gcc/c-family/
+ * c.opt (fmodule-prefix): Delete.
+ gcc/
+ * doc/invoke.texi (C++ Dialect Options): Remove -fmodule-prefix.
+ (C++ Modules): Remove -fmodule-prefix
+
+ Oracle!
+ gcc/cp/
+ * Make-lang.in (cxx-module-oracle): New rule.
+ * cxx-module-oracle.sh: New.
+ * module.c (module_oracle): New flag.
+ (oracle_read, oracle_write, oracle_pex): New vars.
+ (oracle_init, oracle_fini, oracle_response, oracle_query_module)
+ (oracle_done, oracle_stream): New.
+ (find_module_file, finish_module): Use oracle.
+ (handle_module_option): Store oracle option.
+ gcc/
+ * doc/invoke.texi (C++ Dialect Options): Add -fmodule-oracle.
+ (C++ Modules): Document oracle.
+ gcc/c-family/
+ * c.opt (fmodule-oracle=): New.
+
+2018-05-09 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (module_state::get_module): Add insert arg.
+ (module_state::{read,write}_config): Stream direct imports first.
+ gcc/testsuite/
+ * g++.dg/modules/import-1_[ce].C: Adjust.
+ * g++.dg/modules/mod-imp-1_[cd].C: Adjust.
+
+ Add -EE
+ gcc/cp/
+ * cp-lang.c (atom_preamble_fsm): New.
+ (LANG_HOOKS_PREPROCESS_PREAMBLE): Override.
+ * cp-tree.h (atom_preamble_prefix_len): Declare.
+ * lang-specs.h (@c++): Pass -EE when preprocessing.
+ * lex.c (atom_preamble_prefix): New. Broken out of ...
+ * parser.c (cp_parser_module_preamble): ... here. Use it.
+ * module.c (handle_module_option): EE implies atom.
+ gcc/c-family/
+ * c-ppoutput.c: Include langhook.h.
+ (scan_translation_unit): Use lang_hooks.preprocess_preamble.
+ * c.opt (EE): New.
+ gcc/
+ * langhooks-def.h (LANG_HOOKS_PREPROCESS_PREAMBLE): Define.
+ (LANG_HOOKS_INITIALIZER): Add it.
+ * langhooks.h (struct lang_hooks): Add preprocess_preamble.
+ * doc/cppopts.texi (EE): Document.
+ * doc/invoke.texi (Preprocessor Options): Add -EE.
+ (C++ Modules): Document -EE.
+ gcc/testsuite/
+ * g++.dg/modules/cpp-preamble-[123].C: New.
+
+ gcc/cp/
+ * cp/parser.c (module_preamble_end_loc): New var.
+ (cp_parser_module_declaration): Check it.
+ (cp_parser_import_declaration): Likewise.
+ (cp_parser_module_preamble): Deal with FILENAME enabling.
+ (cp_parser_declaration_seq_op): Set it.
+ (cp_parser_declaration): Parse out-of-preamble module & import
+ decls.
+ (cp_parser_initial_pragma): Don't check modules here.
+ (c_parse_file): Set module_preamble_end_loc.
+ gcc/c-family/
+ * c-lex.c (c_lex_with_flags): Remove C_LEX_FILENAME handling.
+ * c-pragma.h (C_LEX_FILENAME): Delete.
+ gcc/testsuite/
+ * g++.dg/modules/atom-decl-[123].C: Adjust.
+ * g++.dg/modules/atom-preamble-3.C
+ * g++.dg/modules/atom-preamble-4.C: New.
+ * g++.dg/modules/mod-decl-1.C: Adjust.
+ * g++.dg/modules/p0713-[23].C: Adjust.
+
+2018-05-08 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * parser.c (cp_parser_module_preamble): Check for macros
+ gcc/testsuite/
+ * g++.dg/modules/atom-preamble-3.C: New.
+
+ gcc/cp/
+ * parser.c (cp_parser_module_preamble): New.
+ (cp_parser_fill_main): Remove atom parsing here.
+ (c_parse_file): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/atom-preamble-1.C: New.
+ * g++.dg/modules/atom-preamble-2_[ab].C: New.
+
+2018-05-07 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (depset): Add is_unnamed and refs_unnamed flags.
+ (depset::hash::add_dependency): Set them here.
+ (cluster_cmp): Change order again.
+ (module_state::write_cluster): Check refs_unnamed here.
+ gcc/testsuite.
+ * g++.dg/modules/scc-1.C: Readjust.
+
+ gcc/cp/
+ * module.c (depset::tarjan::connect): Use section==0 for done, not
+ top bit of cluster.
+ gcc/testsuite/
+ * g++.dg/modules/unnamed-1_b.C: Fix scan.
+
+2018-05-06 Nathan Sidwell <nathan@acm.org>
+
+ Horcruxes!
+ gcc/cp/
+ * module.c (FIXED_LIMIT): Remove.
+ (trees_out::{,maybe_}insert): Make public.
+ (trees_out::maybe_mark_unnamed): Delete.
+ (trees_out::tree_ref): Remove voldemort handling.
+ (trees_in::tree_node): Likewise.
+ (tree_tag): Remove tt_voldemort.
+ (trees_out::maybe_tag_decl_type): Move back into ..
+ (trees_out::tree_decl): ... here.
+ (cluster_tag): Add voldemort & horcruxes.
+ (module_state::{read,write}_cluster): Deal with horcruxes.
+ gcc/testsuite/
+ * g++.dg/modules/unnamed-1_[ab].C: Adjust scans.
+
+2018-05-04 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (trees_out::maybe_tag_decl_type): New, broken out of ...
+ (trees_out::tree_decl): ... here. Call it.
+ (trees_out::tree_ref): Use it.
+ gcc/testsuite/
+ * g++.dg/modules/unnamed-1_[ab].C: New.
+
+ gcc/cp/
+ * ptree.c (cxx_print_decl): Show module.
+ * module.c (tree_tags): Add tt_voldemort.
+ (FIXED_LIMIT): New.
+ (trees_out::maybe_mark_unnamed): New.
+ (module_state::unnamed): New field.
+ (module_state::{read,write}_unnamed): New.
+ (module_state::{read,write}_config): Serialize unnamed count.
+ (module_state::{read,write}_cluster): Determine unnamedness.
+ (trees_out::tree_ref): Check for unnamed.
+ (trees_in::tree_node): Add tt_voldemort.
+ (depset::hash::add_dependency): Don't add decl to its binding.
+ (cluster_cmp): Reorder, again.
+ (cluster_tag): Add ct_unnamed.
+ (module_state::{read,write}): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/namespace-2.C: Adjust scan.
+ * g++.dg/modules/unnamed-[12].C: New.
+ * g++.dg/modules/scc-1.C: Unadjust.
+
+ gcc/cp/
+ * module.c (module_state::mark_definition): Add include_decl arg.
+ (module_state::mark_{template,function,var,class,enum}_def): Likewise.
+ (cluster_cmp): Reorder decl < defn < bind.
+ (enum cluster_tag): New.
+ (module_state::{read,write}_cluster): Use it.
+ gcc/testsuite/
+ * g++.dg/modules/scc-1.C: Adjust.
+
+2018-05-03 Nathan Sidwell <nathan@acm.org>
+
+ gcc/c-family
+ * c-cppbuiltin.c (c_cpp_builtins): Update __cpp_modules value,
+ define __cpp_modules_{ts,atom} as selected.
+ gcc/testsuite/
+ * g++.dg/modules/atom-check-1_a.C: Check for __cpp_modules_atom.
+ * g++.dg/modules/atom-check-1_b.C: Check for __cpp_modules_ts.
+
+ gcc/cp/
+ * module.c (cluster_size): Delete.
+ (module_state::write_{cluster,namespaces,bindings}): Adjust.
+ (module_state::write): Precalculate section numbers.
+
+2018-05-02 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cxx-module-wrapper.sh: Require bash.
+
+ Fragment depsets more.
+ gcc/cp/
+ * module.c (depset): Replace container & decls with key. Adjust
+ hashing etc.
+ (depset::{binding,decl,defn}_key): New.
+ (depset::is_{binding,decl,defn}): New.
+ (depset::hash::{maybe_insert,find}): Take a key.
+ (depset::hash::add_definition): Reimplement.
+ (depset::hash::add_dependency): Reimplement.
+ (depset::hash::add_binding): Reimplement.
+ (cluster_cmp): Extend.
+ (module_state::write_{cluster,namespaces,bindings}): Adjust.
+ (module_state::{add_writables,find_dependencies}): Adjust.
+
+ gcc/cp/
+ * module.c (depset::tarjan): Replace binds, spaces & defs fields
+ with plain result field.
+ (depset::tarjan::connect): Don't categorize SCCs here.
+ (cluster_size): New.
+ (module_state::write_cluster): Take SIZE arg.
+ (module_state::write): Use cluster_size, split out namespaces here.
+
+2018-05-01 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (trees_out::tree_{type,decl,ctx}): Separate need_body
+ and owner args.
+ (trees_{in,out}::core_vals): Don't stream TYPE_CONTEXT.
+ (trees_in::finish_type, module_state::read_class_def): Reconstruct
+ it here.
+ (trees_out::tree_binfo): Use tree_ctx.
+
+ gcc/cp/
+ * module.c (trees_out::tree_decl): Write innermost args.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-4_[abc].C: New.
+
+ gcc/cp/
+ * module.c (module_state::occupy): Do not set filename here.
+ (search_module_path): Rename to ...
+ (find_file): ... here. Search for bmis too.
+ (find_module_file): Use find_file.
+ (add_module_mapping, finish_module): Adjust.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Document search path and prefix.
+
+ gcc/cp/
+ * Make-lang.in (c++.install-common): Install wrapper into
+ libexecsubdir.
+
+ Merge trunk r184995.
+
+2018-04-30 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (trees_out::tree_decl): Adjust for member templates.
+ (trees_out::tree_node): Don't deal with templates here.
+ (trees_in::tree_node): Adjust template instantiations here.
+ (module_state::mark_template_def): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-2_b.C: Adjust module scan.
+ * g++.dg/modules/indirect-3_[abc].C: New.
+
+2018-04-27 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r259710.
+
+2018-04-26 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (DECL_TEMPLATE_INFO): Correct comment.
+ * module.c: Update description, general format cleanups.
+ (elf_out::SECTION_ALIGN): New.
+ (elf_out::pad): Use it.
+ * pt.c (build_template_decl): Make static.
+
+2018-04-25 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (maybe_get_template): Delete.
+ (trees_out::tree_decl): Move dependency building into named-decl
+ handling. Don't walk into namespaces.
+
+ gcc/cp/
+ * module.c (trees_out::tree_node): Reorder.
+
+2018-04-24 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (trees_out::tree_decl): Deal with templated types.
+ (tree_in::tree_node): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-2_[abc].C: Add template class.
+
+ gcc/cp/
+ * module.c (enum tree_tag): Add tt_template.
+ (trees_out::tree_decl): Emit tt_template as needed.
+ (trees_in::tree_node): Read tt_template.
+ gcc/testsuite/
+ * g++.dg/modules/class-3_b.C: Adjust.
+ * g++.dg/modules/indirect-1_b.C: Adjust.
+ * g++.dg/modules/indirect-2_[abc].C: New.
+
+ gcc/cp/
+ * module.c (trees_out::core_vals): Check module of type context.
+ (trees_out::tree_decl): Assert we can find the named decl.
+ (module_state:read_config): Move defrosting to ...
+ (module_state::read): ... here.
+
+2018-04-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/testsuite/
+ * g++.dg/modules/indirect-1_[abc].C: Add exported constant.
+
+ gcc/cp/
+ * name-lookup.c (lookup_by_ident): Look in enumerals.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-1_[abc].C: Add enum.
+
+ gcc/cp/
+ * module.c (trees_{in,out}::core_vals): More FUNCTION_DECL fields.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-1_[abc].C: Add virtual class.
+
+ gcc/cp/
+ * module.c (dumper::pop): Don't print trailing line.
+
+ gcc/cp/
+ * module.c (trees_{in,out}::core_vals): Allow NULL-context VAR_DECLS.
+ gcc/testsuite/
+ * g++.dg/modules/indirect-1_[abc].C: Add class.
+
+ gcc/cp/
+ * module.c (enum tree_tag): Remove tt_namespace.
+ (trees_out::tree_{value,decl,type,ref,ctx}): New. Broken out of ...
+ (trees_out::tree_node): ... here. Use them.
+ (trees_out::core_vals): Use tree_ctx.
+ (module_state::write_cluster): Use tree_ctx.
+ * name-lookup.h (find_imported_namespace): Delete.
+ * name-lookup.c (find_imported_namespace): Delete.
+ gcc/testsuite/
+ * g++.dg/modules/class-3_d.C: Adjust scans.
+ * g++.dg/modules/indirect-1_[abc].C: New.
+
+ gcc/cp/
+ * module.c (module_state::importing): New.
+ (module_state::init): Lazy_open is not just for laziness.
+ (module_state::read_config): Call maybe_defrost.
+ (module_state::maybe_defrost): New, broken out of ...
+ (module_state::load_section): ... here. Call it.
+ (module_state::freeze_an_elf): Look in importing stack too.
+ gcc/testsuite/
+ * g++.dg/modules/nest-1_[abc].C: New.
+
+2018-04-11 Nathan Sidwell <nathan@acm.org>
+
+ gcc/c-family/
+ * c-lex.c (c_lex_with_flags): Check C_LEX_FILENAME. Deal with
+ CPP_HEADER_NAME.
+ * c-pragma.h (C_LEX_FILENAME): New.
+ gcc/cp/
+ * parser.c (cp_parser_fill_main): Ask for C_LEX_FILENAME.
+ (cp_parser_import_declaration): Parse legacy import names.
+ * cp-tree.h (HEADER_STRING_LITERAL_P): New.
+ libcpp/
+ * include/cpplib.h (cpp_enable_filename_token): Declare.
+ * macro.c (cpp_enable_filename_token): Define.
+ pfile->state.angled_headers.
+ gcc/testsuite/
+ * g++.dg/modules/atom-inc-1.C: New.
+
+ gcc/cp/
+ * module.c (module_state::lazy_depth): Remove.
+ (module_state::lazy_open): Make countdown value.
+ (module_state::init): Use getrlimit to default PARAM_LAZY_MODULES.
+ gcc/
+ * doc/invoke.texi (C++ Modules): Document lazy loading.
+ * params.def (PARAM_LAZY_MODULE_FILES): Rename to ...
+ (PARAM_LAZY_MODULES): ... here.
+ gcc/testsuite/
+ * g++.dg/modules/freeze-1_d.C: Fix.
+
+2018-04-10 Nathan Sidwell <nathan@acm.org>
+
+ Protect against too-many lazy loadings.
+ gcc/
+ * params.def (PARAM_LAZY_MODULE_FILES): Define.
+ gcc/cp/
+ * module.c: Include params.h
+ (elf::has_error): Return the error code.
+ (elf_in): Add device, inode & size fields.
+ (elf_in::{is_frozen,freeze,defrost}): New.
+ (module_state): Add lru, lazy_lru, lazy_open fields.
+ (module_state::{load_section,freeze_an_elf}): New.
+ (module_state::{read,lazy_load}): Adjust.
+ (module_state::check_read): Check for EMFILE.
+ (module_state::do_import): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/freeze-1_[a-d].C: New.
+
+ gcc/cp/
+ * parser.c (cp_parser_declaration_seq_opt): Remove ATOM handling here.
+
+ Incremental tokenization of ATOM preamble.
+ gcc/c-family/
+ * c-pragma.h (C_LEX_STRING_FILENAME): New.
+ gcc/cp/
+ * cp-tree.h (module_file_nest): Declare.
+ * lex.c (module_file_nest): Define.
+ * module.c (module_state::{push,pop}_location): Use it.
+ * parser.c (cp_lexer_fill_main): Rename to ...
+ (cp_parser_file_main): ... this. Take parser not lexer. Read &
+ parse one atom declaration at a time.
+ (cp_parser_declaration_seq_opt): Disable atom preamble here.
+ (c_parse_file): Adjust.
+ libcpp/
+ * files.c (cpp_module_file): New.
+ * include/cpplib.h (cpp_module_file): Declare.
+
+2018-04-09 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * parser.c (cp_lexer_new_main): Replace with ...
+ (cp_lexer_fill_main): ... this. Move initial pragma processing to
+ ...
+ (c_parse_file): ... here.
+ (cp_parser_new): Adjust.
+
+ gcc/cp/
+ * parser.c (cp_lexer_get_preprocessor_token): Take cpp-flags
+ directly.
+ (cp_lexer_new_main, cp_parser_initial_pragma): Adjust.
+
+ gcc/cp/
+ * cp-tree.h (modules_p, modules_atom_p): New predicates.
+ * decl.c (cxx_init_decl_processing): Use modules_p.
+ * decl2.c (c_parse_final_cleanups): Likewise.
+ * lex.c (init_reswords):
+ * module.c (module_state::write_readme): Use modules_atom_p.
+ (module_state::{read,write}_config): Likewise.
+ (handle_module_option): Don't handle OPT_fmodules_atom here,
+ * name-lookup,c (reuse_namespace, make_namespace_finish): Use
+ modules_p.
+ * optimize.c (maybe_clone_body): Likewise.
+ * semantics.c (expand_or_defer_fn_1): Likewise.
+ * parser.c (cp_parser_diagnose_invalid_type_name)
+ (cp_parser_declaration_seq_opt, cp_parser_declaration): Use
+ modules predicates.
+ (cp_parser_initial_pragma): Reject pragma with modules.
+ (c_parse_file): Adjust error message.
+ gcc/c-family/
+ * c.opt (fmodules-ts, fmodules-atom): Adust.
+ (fno-modules): New.
+ gcc/
+ * doc/invoke.texi (fno-modules): Document.
+
+ gcc/cp/
+ * module.c (init_module_processing): Disallow PCH.
+ gcc/c-family/
+ * c-pch.c (c_common_valid_pch): Never valid with modules.
+
+ gcc/cp/
+ * module.c (module_state::{read,write}_config): Check ATOM/TS
+ matches.
+ gcc/testsuite/
+ * g++.dg/modules/atom-check-1_[ab].C: New.
+
+ gcc/cp/
+ * module.c (module_state::write_readme): New. Broken out of ...
+ (module_state::write_context): ... here. Absorb remainder into ...
+ (module_state::write_config): ... here.
+ (module_state::read_context): Merge into ...
+ (module_state::read_config): ... here.
+ (module_state::{read,write}): Adjust.
+
+ gcc/cp/
+ * module.c (module_state::release): Simplify.
+ (module_state::check_read): Release if done.
+ gcc/testsuite/
+ * g++.dg/modules/import-2.C: Expect no bmi.
+ * g++.dg/modules/modules.exp (dg-module-bmi): Always delete the bmi.
+
+ gcc/cp/
+ * module.c (module_state::read): Allocate elf_in here.
+ (module_state::do_import): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/import-2.C: New.
+
+ gcc/cp/
+ * module.c (trees_out::tree_node): Avoid uninitialized false
+ positive.
+
+2018-04-06 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r259189.
+
+ Lazy loading!
+ gcc/cp/
+ * cp-tree.h (union mc_slot): New.
+ (struct module_cluster): Use it.
+ (lazy_load_binding): Take an mc_slot.
+ * module.c (module_state::release): End the elf source.
+ (module_state::read_function_def): Save and restore
+ current_function_decl.
+ (module_state::read): Enable lazy loading.
+ (module_state::lazy_load): Take an mc_slot, adjust.
+ (lazy_load_binding): Likewise.
+ * name-lookup.c (module_binding_slot): Return an mc_slot pointer.
+ (fixed_module_binding_slot): New.
+ (name_lookup::search_namespace_only): Lazily load.
+ (do_pushdecl): Use fixed_module_binding_slot.
+ (merge_global_decl): Adjust.
+ (import_module_binding): Install lazy cookie.
+ (set_module_binding): Adjust. Kill stale & wrong global module
+ bits.
+ (lookup_by_ident): Lazily load.
+ (reuse_namespace): Use fixed_module_binding_slot.
+ (make_namespace_finish): Likweise.
+ (add_imported_namespace, find_imported_namespace): Adjust.
+ gcc/c-family/
+ * c.opt (fmodule-lazy): Default on.
+ gcc/testsuite/
+ * g++.dg/modules/lazy-1_[ab].C: New.
+
+ gcc/cp/
+ * module.c (elf::E_BAD_LAZY): New error.
+ (elf::has_error): New.
+ (elf::get_error): Return string.
+ (elf::end): Return bool.
+ (elf_in::forget_section): New.
+ (module_state::check_error): New.
+ (module_state::do_module_import): Use it.
+ (module_state::lazy_load): New.
+ (module_state::{read,write}_decls): Absorb into callers.
+ (module_state::read_{context,config,namespaces,bindings,cluster}): Lose
+ from parm.
+ (module_state::lazy_depth): New.
+ (lazy_load_binding): New.
+ (finish_module): Adjust.
+ * cp-tree.h (lazy_load_binding): Declare.
+ gcc/testsuite/
+ * g++.dg/modules/circ-1_c.C: Adjust errors.
+ * g++.dg/modules/mod-stamp-1_d.C: Adjust errors.
+
+ gcc/cp/
+ * module.c (elf_in::keep_sections): New.
+ (elf_in::read): Add type arg.
+ (elf_in::find): Remove type arg.
+ (elf_in::begin): Coalesce error messages.
+ (module_state::loading): New field.
+ (module_state::{read,write}_config): Serialize section range ...
+ (module_state::{read,write}_namespace): ... not here.
+ (module_state::read_decls): Do not read the actual decls.
+ (module_state::read): ... do them here.
+
+ gcc/cp/
+ * module.c (trees_{in,out}, depset): Reorder definitions.
+
+ gcc/cp/
+ * module.c (module_state::{read,write}_binfos): Merge loops.
+
+ gcc/cp/
+ * module.c (trees_{in,out}::tree_binfo): Delete.
+ (module_state::{read,write}_binfos): New.
+ (module_state::{read,write}_class_def): Use them.
+
+2018-04-05 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * doc/invoke.texi (C++ Modules): New section.
+ gcc/c-family/
+ * c.opt (-fmodule-lazy): New option.
+ gcc/cp/
+ * module.c (module_state::read_decls): Prepare for laziness.
+
+ gcc/cp/
+ * module.c (module_state::tng_*): Rename.
+
+ gcc/cp/
+ * module.c (enum tree_tag): Delete tt_definition, tt_binding.
+ (trees_in::tag_{binding,definition}): Delete.
+ (trees_out::{,maybe_}tag_definition): Delete.
+ (trees_{in,out}::define_{function,var,class,enum}): Delete.
+ (trees_in::tree_node): Remove tt_definition handling.
+ (trees_in::read, trees_out::write): Delete.
+
+ gcc/cp/
+ * module.c (module_state::write_namespace): Delete.
+ (module_state::{write_bindings,read_bindings}): Likewise.
+
+ gcc/cp/
+ * module.c (TNG): Delete.
+ (module_state::{tng_read_bindings,write): Constant fold TNG.
+ (trees_out::tree_node, trees_in::finish_type): Likewise.
+
+ gcc/cp/
+ * module.c (refs_tng): Replace with TNG.
+
+ Switch over to new binding scheme.
+ gcc/cp/
+ * module.c (TNG): Enable.
+
+ gcc/cp/
+ * module.c (module_state::{read,write,mark}_template_def): Deal
+ with CLASSTYPE_DECL_LIST.
+ (trees_out::tree_node): Check implicit TEMPLATE_DECLs.
+
+ gcc/cp/
+ * module.c (trees_out::tree_node): Reorder by-name checks.
+ * name-lookup.c (pushdecl_top_level): Replace IS_FRIEND parm with
+ MAYBE_INIT. Set DECL_CONTEXT. Finish if requested.
+ (pushdecl_top_level_and_finish): Use pushdecl_top_level.
+ * name-lookup.h (pushdecl_top_leve): Adjust declaration.
+
+2018-04-04 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (module_state::{read,write,mark}_template_def): New.
+ (module_state::{read_write_mark}_definition): Call them.
+ (depset::hash::add_dependency): Don't depend on no-context decls.
+ (trees_out::tree_node): Don't try and name no-context decls.
+
+ gcc/cp/
+ * module.c (module_state::{read,write}_class_def}): Fixup
+ vptr-containing logic.
+ (trees_in::tree_binfo): Forward walk.
+
+ gcc/cp/
+ * module.c (enum tree_tag): Replace tt_tinfo_pseudo with
+ tt_tinfo_typedef. Add tt_vtable.
+ (module_state::mark_class_def): Mark vtables.
+ (trees_out::tree_node): Move TINFO processing to decl section.
+ Replace tinfo_psuedo handling with tinfo_typedef handling. Add
+ vtable special.
+ (trees_in::tree_node): Likewise.
+ * rtti.c (struct tinfo_s): Note type is const qualified variant.
+ gcc/testsuite/
+ * g++.dg/aaa/class-3_d.C: Adjust message.
+
+ gcc/cp/
+ * module.c (module_state::read_definition): New.
+ (module_state::read_{function,var,class,enum}_def): New.
+ (module_state::tng_read_cluster): New.
+ (module_state::tng_read_bindings): Call it.
+ (trees_in::tree_node): Check refs_tng.
+
+ gcc/cp/
+ * module.c (module_state::write_var_def): Write definition.
+
+ gcc/cp/
+ * module.c (trees_out::mark_node): Allow preseeding.
+ (trees_out::tree_node): Fix as_base.
+
+2018-04-03 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (tt_type_name, tt_named): Rename to ...
+ (tt_named_type, tt_named_decl): ... here. Adjust uses.
+ (module_state::mark_class_def): Mark fake base.
+ (module_state::write_class_def): Write fake base.
+ (trees_{in,out}::tree_node): Avoid goto again.
+ (trees_in::finish_type): Protect fake base serialize.
+ * Make-lang.in (version.o): Depend on cp dir.
+ gcc/testsuite/
+ * g++.dg/aaa/class-3_d.C: Adjust message.
+
+ gcc/cp/
+ * module.c (bytes_in::{use,i,u,wi,str}): Use set_overrun.
+ (module_state::tng_write_cluster): Sort cluster here ...
+ (module_state::tng_write_bindings): ... not here.
+ (module_state::tng_read_bindings): Set refs_tng.
+ (trees_{in,out}::define_class): Don't deal with refs_tng here.
+ (trees_out::tree_binfo): Protect from dep_walk_p. Force insert
+ new tag.
+
+ Reorder for better logging
+ gcc/cp/
+ * module.c (trees_{in,out}::core_vals): Stream name-like members
+ early.
+ (module_state::do_import): Set module purview before streaming.
+ * name-lookup.c (set_module_binding): Don't barf on null.
+
+ gcc/
+ * gdbinit.in: Add conditions on error catching breakpoints.
+
+ Fix enum types, more globals
+ gcc/cp/
+ * module.c (module_state::maybe_add_global): New.
+ (module_state::init): Use it.
+ (trees_{in,out}::core_vals): Special case TYPE of unscoped enum.
+
+2018-04-02 Nathan Sidwell <nathan@acm.org>
+
+ Read new .bindings section
+ gcc/cp/
+ * module.c (elf::get_num_sections): New.
+ (module_state::tng_{read,write}_namespaces): Serialize section range.
+ (module_state::tng_read_bindings): New.
+ (module_State::tng_{read,write}_bindings): Adjust.
+ (trees_in::define_enum, trees_in::tag_binding): Adjust.
+ * name-lookup.h (push_module_binding): Rename to ...
+ (set_module_binding): ... here.
+ (import_module_binding): Declare.
+ * name-lookup.c (import_module_binding): New.
+ (push_module_binding): Rename to ...
+ (set_module_binding): ... here. Adjust.
+
+ Kill old .bindings section
+ gcc/cp/
+ * module.c (module_state::record_namespace): Delete.
+ (module_state::write_namespace): Remove bind parm. Adjust.
+ (module_state::read_namespace): Delete.
+ (module_state::tng_read_namespaces): New.
+ (module_state::write_bindings): Don't write bindings section.
+ (module_state::read_bindings): Use tng_read_bindings).
+ * name-lookup.c (make_namespace): Public namespaces are exported.
+ (push_namespace): Adjust.
+
+ gcc/cp/
+ * module.c (trees_{in,out}::define_class): Check refs_tng.
+ (trees_out::tree_binfo): Add definition dependency.
+ (trees_{in,out}::tree_node): Don't write binfos in refs_tng mode.
+ (trees_in::finish_type): Chek refs_tng.
+
+ gcc/cp/
+ * module.c (trees_{in,out}::tree_binfo): Serialize entire path.
+ (trees_{in,out}::tree_node): Adjust.
+
+2018-03-30 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (has_definition): VAR_DECLs too.
+ {module_state::mark_{,function_,var_,class_,enum_}definition): New.
+ (trees_out::walk_into): Turn into ...
+ (trees_out::mark_node): ... this. Adjust callers.
+ (module_state::write{_function_,class_,var_}_def): Define.
+ (module_state::find_dependencies): Look in definitions.
+
+2018-03-28 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (maybe_get_template): New.
+ (depset::hash::maybe_add_definition): Return a depset.
+ (depset::hash::add_dependency): Don't deal with template here.
+ (module_state::write_{function,class}): New stubs.
+ (module_state::write_enum): New.
+ (module_state::write_definition): New.
+ (module_state::tng_write_cluster): Write binding header.
+ (module_state::add_writables): Don't return a bool. No need to
+ nadger namespace ownership.
+ (module_state::find_dependencies): Adjust.
+ (bind_cmp, space_cmp): New.
+ (ns_cmp): Delete.
+ (module_state::tng_write_bindings): Sort here.
+ (trees_out::tree_node): Check dependency of containers.
+ (module_purview_p): Defend against early checks.
+ * name-lookup.c (extract_module_decls): Don't special-case
+ namespaces.
+ (push_namespace): Set EXPORT & OWNER inside a module.
+ gcc/testsuite/
+ * g++.dg/modules/namespace-2.C: Adjust.
+ * g++.dg/modules/namespace-3.C: New.
+ * g++.dg/modules/scc-1.C: Adjust.
+ * g++.dg/modules/scc-2.C: New.
+
+2018-03-27 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c
+ (depset::hash::{add_writables,find_dependencies}): Moved to ...
+ (module_state::{add_writables,find_dependencies}): ... here. Adjust.
+ (depset::hash::write_bindings): Moved to ...
+ (module_state::tng_write_bindings): ... here. Adjust.
+ (depset::hash::{add_decls,get_work}): New.
+
+ gcc/cp/
+ * module.c (hash_definition): New.
+ (struct depset::tarjan): New.
+ (depset::tarjan_connect, depset::hash::find_sccs): Delete.
+ (depset::hash::maybe_add_definition): New.
+ (module_state::tng_write_namespaces): New.
+ (depset::hash::{maybe_namespace,write_namespaces): Delete.
+ (module_state::tng_write_bindings): Adjust.
+
+ gcc/cp/
+ * module.c (depset::traits): Hash & compare using name too.
+
+ gcc/cp
+ * module.c (refs_tng): Temporary modal hack.
+ (tree_tag): Rename tt_import to tt_named.
+ (module_state::write_cluster): Fix iteration.
+ (module_state::tng_write_bindings): Set and clear refs_tng.
+ (trees_out::tree_node): Refs by name when applicable.
+ (trees_out::tree_node): Use tt_named.
+ gcc/testsuite/
+ * g++.dg/modules/by-name-1.C: New.
+ * g++.dg/modules/class-3_b.C: Adjust.
+ * g++.dg/modules/scc-1.C: More checking.
+
+2018-03-26 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (depset::table): Rename to ...
+ (depset::hash): ... here.
+ (trees_out::deps_only): Rename to ...
+ (trees_out::dep_walk_p): ... here.
+
+ gcc/cp/
+ * module.c (depset::table::find_exports): Renamed ...
+ (depset::table::add_writables): .. here. Return bool, add
+ exported namespaces.
+ (depset::table::append): Add namespaces to worklist.
+ (mdule_state::write_namespace): Use TREE_PUBLIC.
+ * name-lookup.c (extract_module_decls): Only extract decls in our
+ purview.
+ (make_namespace): Remove FIXME.
+ (push_namespace): Set MODULE_OWNER if exporting.
+ gcc/testsuite/
+ * g++.dg/modules/namespace-2.C: New.
+
+ gcc/testsuite/
+ * lib/scanlang.exp (scan-lang-dump-not): new.
+
+ gcc/cp/
+ * module.c (depset::visited): Use depset::cluster. Adjust users.
+
+ gcc/cp/
+ * module.c (elf_out::strtab::named_decl): Cope with TYPE constext.
+ (elf_out::strtab::write_named_decl): Likewise.
+ (module_state::write_cluster): Adjust dump.
+ (fixup_unscoped_enum_owner): New.
+ * decl.c (finish_enum_value_list): Call
+ fixup_unscoped_enum_owner, as necessary.
+ * cp-tree.h (fixup_unscoped_enum_owner): Declare.
+ gcc/testsuite/
+ * g++.dg/modules/scc-1.C: New.
+
+ gcc/cp/
+ * module.c (elf_out::strtab): Add name-by-decl.
+ (module_state::write_cluster): Find naming decl, and use it.
+
+ gcc/cp/
+ * module.c (class depset): Make a class, add accessors. Implicitly
+ hold name as first decl.
+ (depset::table::{maybe_insert,find}): New.
+ (depset::table::{append,find_exports,find_dependencies}): Adjust.
+ (depset::table::{write_bindings,write_namespaces}): Adjust.
+ (module_state::write_cluster): Adjust.
+
+ Add depset analysis (incomplete)
+ gcc/cp/
+ * module.c (struct depset): New.
+ (module_state::tng_write_bindings, write_cluster): New.
+ (trees_out::{decls,mark_decls,mark_trees,unmark_trees): New.
+ (trees_out::{begin,end,walk_into,force_insert): New.
+ (module_state::write): Call tng_write_bindings.
+ (trees_out::{core_vals,lang_decl_vals,lang_type_vals,tree_node_raw,
+ tree_node): Deal with deps_only.
+
+2018-03-23 Nathan Sidwell <nathan@acm.org>
+
+ Allow dump '-'
+ gcc/
+ * dumpfile.c (dump_open): New. Allow '-' for stdout.
+ (dump_open_alternate_stream, dump_start, dump_begin): Call it.
+ (dump_finish): Identify std{out,err} by stream.
+ * doc/invoke.texi (fdump-rtl): Document stdout/stderr.
+
+2018-03-16 Nathan Sidwell <nathan@acm.org>
+
+ Remove -fmodules, forcing -fmodules-{ts,atom}
+ gcc/cp/
+ * parser.c (cp_parser_diagnose_invalid_type_name): Adjust error.
+ gcc/c-family/
+ * c.opt (fmodules): Remove.
+ gcc/
+ * doc/invoke (fmodules): Remove.
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp: Iterate over -fmodules-{ts,atom}.
+ * g++.dg/modules: Mark tests that are -fmodules-ts only.
+
+2018-03-15 Nathan Sidwell <nathan@acm.org>
+
+ Implement Atom module & import placement
+ gcc/
+ * doc/invoke.texi (-fmodules): Document -fmodules-atom.
+ gcc/c-family/
+ * c.opt (fmodules-atom): Renamed from fmodules++.
+ gcc/cp/
+ * cp-tree.h (import_module): Add parameter.
+ * module.c (import_module): Add exporting param.
+ (handle_module_option): Adjust.
+ * parser.c (cp_parser_module_declaration): Remove fmodules++
+ global module parsing.
+ (cp_parser_import_declaration): Adjust.
+ (cp_parser_declaration_seq_opt): Parse imports under -fmodules++ ...
+ (cp_parser_declaration): and not here.
+ gcc/testsuite/
+ * g++.dg/modules/mod++-decl-0_[abc].C: Adjust.
+ * g++.dg/modules/mod++-decl-2.C: Adjust.
+ * g++.dg/modules/mod++-decl-3.C: New.
+
+ Implement p0713 - identifiying module source
+ gcc/cp/
+ * parser.c (cp_parser_module_declaration): Allow global module
+ preamble. Return bool.
+ (cp_parser_declaration_seq_opt): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/circ-1_d.C: Adjust.
+ * g++.dg/modules/global-1_a.C: Adjust.
+ * g++.dg/modules/main-[123]-aux.cc: Adjust.
+ * g++.dg/modules/main-aux.cc: Adjust.
+ * g++.dg/modules/mod-decl-[13].C: Adjust.
+ * g++.dg/modules/mod-decl-5_b.C: Adjust.
+ * g++.dg/modules/mod-exp-1_b.C: Adjust.
+ * g++.dg/modules/mod-sym-2.C: Adjust.
+ * g++.dg/modules/proclaim-1.C: Adjust.
+ * g++.dg/modules/static-1_a.C: Adjust.
+ * g++.dg/modules/p0713-[123].C: New: Adjust.
+
+2018-03-01 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (add_module_mapping): Fix double increment.
+
+2018-02-28 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r258084.
+
+ gcc/
+ * Makefile.in (REVISION_c): Don't exec REVISION.
+ * REVISION: Simple text file.
+ gcc/cp/
+ * Make-lang.in (MODULE_STAMP): New var.
+ (REVISION_s): Wedge stamp into it here.
+ (CFLAGS-cp/module.o): Adjust.
+
+ Using flags on overloads.
+ gcc/cp/
+ * cp-tree.h (OVL_HAS_USING_P): New.
+ * tree.c (alloc_ovl): New, broken out of ...
+ (ovl_make): ... this. Use it. Maybe set OVL_HAS_USING_P.
+ (ovl_copy): Use alloc_ovl. Copy OVL_HAS_USING_P.
+ (ovl_insert): Set OVL_HAS_USING_P appropriately.
+ (lookup_maybe_add): Comment on OVL_HAS_USING_P.
+ * name-lookup.c (name_lookup::add_overload)
+ (get_class_binding_direct): Check OVL_HAS_USING_P.
+ gcc/testsuite/
+ * g++.dg/lookup/using60.C: New.
+
+ gcc/
+ * Makefile.in: Exec REVISION maybe.
+ * REVISION: New.
+ gcc/cp/
+ * Make-lang.in: Directly set MODULE_STAMP.
+
+ Map tag recognised in and out of comments
+ gcc/cp/
+ * module.c
+ gcc/testsuite/
+ * g++.dg/modules/hello.cc: Clone to ...
+ * g++.dg/modules/main{,-[123]}-aux.cc: ... here.
+ * g++.dg/modules/main-[123]_a.C: New.
+ * g++.dg/modules/main-[123]-map: New.
+ * g++.dg/modules/main-map: Delete.
+ * g++.dg/modules/main_a.C: Update.
+
+2018-02-27 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (version_string): Rename.
+ (module_state::write_context): Write compiler version.
+
+2018-02-16 Nathan Sidwell <nathan@acm.org>
+
+ Use TREE_VISITED
+ gcc/cp/
+ * module.c (trees_out::fixed_refs): New.
+ (trees_out::{begin,end}): New.
+ (module_state::init): Use TREE_VISITED.
+ (trees_out::{maybe_insert,tree_node}): Likewise.
+
+ gcc/cp/
+ * module.c: More commenting.
+ (trees_{in,out}::define_class): Don't do AsBase here.
+ (trees_in::finish_type, trees_out::tree_node}: Do it here.
+ (get_module_owner): Cleanup.
+
+2018-02-15 Nathan Sidwell <nathan@acm.org>
+
+ Module ownership on containers
+ gcc/cp/
+ * cp-tree.h (decl_set_module, module_context): Delete.
+ (get_module_owner, set_module_owner)
+ (set_implicit_module_owner): Declare.
+ * decl.c (grokfndecl, grokvardecl, grokdeclarator): Call
+ set_module_owner.
+ * error.c (dump_module_suffix): Use get_module_owner.
+ * mangle.c (maybe_write_module): Likewise.
+ * method.c (implicitly_declare_fn): Use set_implicit_module_owner.
+ * module.c (module_context, decl_set_module): Delete.
+ (trees_in::define_function): Adjust.
+ (trees_{in,out}::lang_decl_bools): Set module_owner.
+ (trees_{in,out}::tree_node_raw): Adjust.
+ (trees_out::tree_node): Adjust.
+ (get_module_owner, set_module_owner)
+ (set_implicit_module_owner): Define.
+ * name-lookup.c (do_pushtag): Use set_module_owner.
+ * pt.c (lookup_template_class_1, instanitate_decl): Use
+ set_implicit_module_owner.
+
+ gcc/cp/
+ * module.c (trees_out::tree_node): Reorder.
+
+ gcc/cp/
+ * module.c: Commenting and a few cleanups.
+
+ gcc/cp/
+ * module.c (elf): Make more constants private.
+ (elf_in::find): Swap args, default to PROGBITS.
+ (elf_out::add): Replace type and flags with string_p arg.
+ (bytes_in::begin, bytes_out::end): Adjust.
+ (data::set_crc): Store zero for no-crc.
+
+ Module map files have more syntax
+ gcc/cp/
+ * cxx-module-wrapper.sh: Accept src filename, don't search
+ MODULE_PATH.
+ * module.c (module_state::srcname): New.
+ (module_state::print_map): New.
+ (make_module_name): Rename to ...
+ (make_module_filename): ... here. Don't assume trailing NUL.
+ (find_module_file): Pass srcname.
+ (parse_module_mapping): New.
+ (add_module_mapping): Call it. Detect too-deeply nested.
+ gcc/c-family/
+ * c.opt (fmodule-map-dump): New.
+ gcc/
+ doc/invoke.texi: Document new module-map file syntax
+ gcc/testsuite/
+ * g++.dg/modules/hello.c: Adjust.
+ * g++.dg/modules/main_a.c: Adjust.
+ * g++.dg/modules/main-map: New.
+ * g++.dg/modules/modules.exp: Set CXX_MODULE_PATH.
+
+2018-02-13 Nathan Sidwell <nathan@acm.org>
+
+ Module path is for mapping files. Replace -fmodule-root with
+ -fmodule-prefix.
+ gcc/cp/
+ * cxx-module-wrapper.sh: Adjust.
+ * module.c (module_state::lazy_{init,fini}): Drop the lazy.
+ (module_state::maybe_early_init): Move into init.
+ (module_prefix, module_file_args, module_wrapper): New.
+ (make_module_name): New.
+ (module_state::occupy): Call it.
+ (module_to_filename): Delete.
+ (search_module_path): Adjust for finding module-maps.
+ (find_module_file): New.
+ (add_module_mapping): Reimplement.
+ (init_module_processing): Process module_file_args array.
+ (module_state::do_import, finish_module): Adjust.
+ (maybe_prepend_dir): Delete.
+ (handle_module_option): Adjust.
+ gcc/c-family/
+ * c-opts.c (c_common_post_options): Adjust clean_cxx_module_path
+ call.
+ * c.opt (fmodule-root=): Delete.
+ (fmodule-prefix=): New.
+ gcc/
+ * doc/invoke.texi (fmodule-root): Replace with ...
+ (fmodule-prefix): ... this.
+ * incpath.c (clean_cxx_module_path): Drop root appending. Drop
+ multilib handling.
+ * incpath.h (clean_cxx_module_path): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/fmod-file-1_b.C: Adjust.
+ * g++.dg/modules/main_a.C: Adjust.
+ * g++.dg/modules/modules.exp: Adjust.
+
+2018-02-12 Nathan Sidwell <nathan@acm.org>
+
+ AS_BASE is by reference.
+ gcc/cp/
+ * module.c (trees_out::define_class): Break AS_BASE loop during
+ streaming.
+ (trees_{in,out}::tree_node): Use tt_as_base.
+
+ Mapping files are recursive.
+ gcc/cp/
+ * module.c (maybe_prepend_dir): New.
+ (add_module_mapping): Recurse. Deal with relative paths.
+ (handle_module_option): Move file reading into add_module_mapping.
+ gcc/
+ * doc/invoke.texi (fmodule-file): Document.
+
+ BINFOs imported by reference.
+ gcc/cp/
+ * module.c (trees_{in_out}::tree_binfo): New.
+ (trees_out::maybe_insert): New.
+ (trees_out::insert): Use it.
+ (trees_{in,out}::define_class): Stream remaining binfo contents.
+ (trees_{in,out}::start): Don't expect BINFOs.
+ (trees_{in,out}::core_vals): Likewise.
+ (trees_{in,out}::tree_node): Use tt_binfo.
+ (trees_out::tree_node): Stream a class's child binfos.
+ (trees_in::finish_type): Likewise.
+
+2018-02-11 Nathan Sidwell <nathan@acm.org>
+
+ Add module map file reading.
+ gcc/cp/
+ * module.c (add_module_mapping): New, swallow ...
+ (add_module_file): ... insertion bits. Move other bits to ...
+ (handle_module_option): ... here. Read module map file.
+ gcc/c-family/
+ * c.opt (fmodule-file): Document new semantics.
+ gcc/
+ * doc/invoke.texi (fmodule-file): Document new semantics.
+ gcc/testsuite/
+ * g++.dg/modules/fmod-file-1_[ab].C: New.
+ * g++.dg/modules/fmod-out-1_[ab].C: New.
+ * g++.dg/modules/modules.exp (decode_mod_spec): Augment.
+
+ Keep module-file map in module hash.
+ gcc/cp/
+ * module.c (module_state): Add empty_p, get_module members.
+ Rename set_name, delete set_location.
+ (module_file_map, module_file): Delete.
+ (module_state::do_import): Use get_module, set filename here.
+ (declare_module): No need to set filename here.
+ (add_module_file): Use module_state::get_module.
+
+ Move module option processing into module.c.
+ gcc/cp/
+ * cp-objcp-common.c (add_module_file): Move to module.c
+ (cp_handle_option): Call handle_module_option.
+ * cp-tree.h (module_output, module_files_map, module_files): Move
+ to module.c
+ * module.c (module_state::maybe_early_init): New.
+ (module_output, module_files): Make static.
+ (module_files_map): From cp-tree.h.
+ (init_module_processing): Call maybe_early_init.
+ (add_module): Moved from cp-objcp-common.c.
+ (handle_module_option): New.
+
+ Move module option processing out of c-common.c.
+ gcc/c-family/
+ * c-common.h (module_output, module_files_map, module_files): Move
+ to cp-tree.h.
+ * c-common.c (module_output, module_files): Move to module.c
+ * c-opts.c (add_module_file): Move to cp-objcp-common.c.
+ (c_common_handle_option): Move modules options to
+ cp-objcp-common.c.
+ gcc/cp/
+ * cp-objcp-common.c (add_module_file): Moved from c-opts.c.
+ (cp_handle_option): New, from c_common_handle_option.
+ * cp-objcp-common.h (LANG_HOOKS_HANDLE_OPTION): Point at
+ cp_handle_option.
+ * cp-tree.h (module_output, module_files_map, module_files): Moved
+ from c-common.h.
+ * cp-module.c (module_output, module_files): Moved from c-common.c.
+
+2018-02-09 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c: Update more comments.
+
+ gcc/cp/
+ * module.c: Update a lot of comments.
+
+2018-02-07 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (trees_in::tree_node): Absorb ...
+ (trees_in::tree_node_special): ... this.
+
+ gcc/cp/
+ * module.c (trees_in::tree_node_special): Deserialize tt_node here ...
+ (trees_in::tree_node): ... not here.
+
+2018-02-06 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (trees_out::tree_node_special): Move into tree_node.
+
+ gcc/cp/
+ * module.c (trees_{in,out}::core_vals): Serialize decl name &
+ context here.
+ (trees_in::tree_node_raw): Don't set name & context here.
+ (trees_{in,out}::tree_node): Don't serialize decl name and context
+ here.
+
+ Remove old import machinery.
+ gcc/cp/
+ * module.c (trees_in::tree_node_raw): Set module owner.
+ (trees_{in,out}::tree_node): Remove importing here.
+
+ Imports use special tags
+ gcc/cp/
+ * module.c (module_context): Cope with C++ anon types.
+ (trees_{in,out}::tree_node_special): Deal with imports here ...
+ (trees_{in,out}::tree_node): ... not here.
+ gcc/testsuite/
+ * g++.dg/modules/class-3_[bd].C: Adjust.
+
+ Kill namespace module slot hackery
+ gcc/cp/
+ * name-lookup.c (module_binding_slot): Make CREATE a bool. Remove
+ namespace hackery.
+ (find_namespace_partition): Delete.
+ (merge_global_decl): Do not expect a namespace. Remove such
+ handling.
+ (push_module_binding): Likewise.
+
+ Namespaces use special tags
+ gcc/cp/
+ * module.c (trees_{in,out}::tree_node_special): Deal with
+ namespaces.
+ * name-lookup.h (find_imported_namespace): Declare.
+ * name-lookup.c (find_imported_namespace): New.
+
+ Less implicit tree numbering, negative indices for back refs
+ gcc/cp/
+ * module.c (ptr_uint_traits, ptr_uint_hash_map): Rename ...
+ (ptr_int_traits, ptr_int_hash_map): ... here. Map to ints.
+ (uint_ptr_traits, uint_ptr_hash_map): Delete.
+ (enum record_tag): Delete.
+ (enum tree_tag): New.
+ (trees_{in,out}::insert): Return int.
+ (trees_{in,out}::tree_node_special): Adjust.
+ (trees_{in,out}::tree_node): Adjust.
+ (trees_out::write, trees_in::read): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/class-3_[bd].C: Adjust.
+
+2018-02-05 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * decl2 (c_parse_final_cleanups): Only finish_module if we started
+ it.
+ * module.c (module_hash_state): Move earlier.
+ (module_state): Add hash and modules static members.
+ (module_state::set_import): Replace do_import.
+ (module_state::lazy_init): Create the hash table and default
+ module.
+ (trees_in::tree_node_raw): Don't remap a public namespace.
+ (module_purview_p, module_interface_p): Adjust.
+ (module_state::do_import): Move more stuff to lazy_init.
+ (import_module): Deal with setting current module flags.
+ (finish_module): Adjust.
+
+ Fix bootstrap
+ gcc/cp/
+ * module.c (elf): Clean up consts.
+ (module_state::record_namespace): Comment args.
+ (module_state::read_namespace): Comment unused vars.
+ (trees_in::finish_tree): Fix logic error.
+ (trees_in::tree_node_special): Fix undefined var.
+
+2018-02-04 Nathan Sidwell <nathan@acm.org>
+
+ Module purview is implicit.
+ gcc/cp/
+ * cp-tree.h (lang_decl): Remove module_purview_p field.
+ * mangle.c (maybe_write_module): Fix signed/unsigned mismatch.
+ * module.c (trees_in::finish): Adjust.
+ (trees{in,out}::lang_decl_bools): Drom module_purview_p field.
+ (decl_set_module): Done set DECL_MODULE_PURVIEW_P.
+ * name-lookup.c (extract_module_decls): check MODULE_PURVIEW_P.
+ (make_namespace_finish): Remove inline_p arg. Adjust callers.
+ * pt.c (build_template_decl): Don't copy MODULE_PURVIEW_P.
+ * rtti.c (tinfo_base_init): Don't clear MODULE_PURVIEW_P.
+
+ gcc/cp/
+ * name-lookup.c (make_namespace_finish): Always create the scope.
+ (add_imported_namespace): Check namespace inlineness here.
+
+ gcc/cp/
+ * module.c (decl_set_module): Set DECL_MODULE_OWNER.
+ * rtti.c (tinfo_base_init): Clear DECL_MODULE_OWNER.
+
+ gcc/cp/
+ * decl.c (grokfndecl): Protect decl_set_module call.
+ * name-lookup,c (do_pushtag): Likewise.
+ * module.c (decl_set_module): Assert namespace context.
+
+2018-02-03 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h: Adjust comments.
+ * module.c (module_purview_p, module_interface_p): Adjust.
+
+ Deserializing uses an array (Nathan is a dumbass)
+ gcc/cp/
+ * module.c (trees_in): Delete count and tree_map. Add back_refs.
+ (trees_in::next): Delete.
+ (trees_in::insert): Append to array.
+ (trees_in::tree_node_special): Adjust.
+ (trees_in::tree_node): Likewise.
+
+2018-02-02 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (nodel_ptr_hash): New.
+ (non_null_hash): Delete.
+ (ptr_uint_traits, uint_ptr_traits): Adjust.
+ (module_state_hash): Use nodel_ptr_hash.
+ (module_hash): Do not GTY.
+ (module_state::do_import, finish_module): Adjust.
+
+ Use TREE_VEC for structured module names.
+ gcc/cp/
+ * cp-tree.h (module_name_parts): Replace with ...
+ (module_vec_name): ... this.
+ * mangle.c (maybe_write_modules): Adjust.
+ * module.c (module_state): Replace name_parts with vec_name.
+ (module_state::set_name): Add maybe_vec parm, construct TREE_VEC.
+ (module_vec_name): Replace ...
+ (module_name_parts): ... this.
+ (module_state::do_import): Construct flat name.
+ * parser.c (cp_parser_module_name): Construct TREE_VEC.
+ gcc/testsuite/
+ * g++.dg/modules/mod-decl-1.C: Add error.
+
+ MODULE_PURVIEW bug fixing.
+ gcc/cp/
+ * decl2.c (c_parse_final_cleanups): Reset current_module.
+ * module.c (module_state::do_import): New, swallow ...
+ (do_module_import): ... this. Update callers.
+ * name-lookup.c (name_lookup::search_namespace_only): Fix search
+ of SLOT_CURRENT.
+ (do_pushdecl): Fix assert.
+ (merge_global_decl, push_module_binding, lookup_by_ident): Fix
+ module remap thinko.
+
+ Module purview has MODULE_PURVIEW number.
+ gcc/cp/
+ * module.c (module_state::read): Use MODULE_PURVIEW.
+ (trees_{in,out}::tree_node): Adjust.
+ (do_module_import, import_module): Likewise.
+ * name-lookup.c (module_binding_slot): Adjust.
+ (do_pushdecl): Always push to MODULE_SLOT_CURRENT.
+ (merge_global_decl): Remap MODULE_PURVIEW.
+ (lookup_by_ident, add_imported_namespace): Likewise.
+
+ Rename MODULE_INDEX->MODULE_OWNER
+ gcc/cp/
+ * cp-tree.h (MODULE_NONE, MODULE_PURVIEW, MODULE_IMPORT_BASE)
+ (MODULE_LIMIT): New, renamed from MODULE_INDEX_$FOO.
+ (DECL_MODULE_OWNER): New, renamed from DECL_MODULE_INDEX.
+ (MAYBE_DECL_MODULE_OWNER): Likewise.
+ (struct lang_decl_base): Rename module_index to module_owner.
+ * error.c, mangle.c, module.c, name-lookup.c, pt.c: Adjust.
+
+ Keep namespaces on global slot.
+ gcc/cp/
+ * cp-tree.h (MODULE_SLOT_CURRENT, MODULE_SLOT_GLOBAL): Renamed
+ from MODULE_SLOT_TU, MODULE_SLOT_GLOBALS.
+ * name-lookup.h (set_module_namespace): Undeclare.
+ (add_imported_namespace): Declare.
+ * name-lookup.c (module_binding_slot): Remove assert, propagate
+ external namespace to GLOBAL slot on creation.
+ (update_binding): Don't add namespaces to level.
+ (reuse_namespace): New.
+ (make_namespace): New, absorb ...
+ (create_namespace): ... this. Delete.
+ (make_namespace_finish): New.
+ (push_namespace): Adjust.
+ (add_imported_namespace): New. Absorb ...
+ (set_module_namespace): ... this. Delete.
+ * module.c (module_state::read_namespace): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/namespace-1_[abc].C: New.
+
+ Fix circularity detection, and other errors
+ gcc/cp/
+ * module.c (elf::E_BAD_DATA, elf::E_BAD_IMPORT): New.
+ (elf::set_error): Default to E_BAD_DATA.
+ (elf::end, elf_out::end): Return error string.
+ (module_state::set_location): New.
+ (module_state::{push,pop}_location): Adjust.
+ (do_module_import): Fixup circularity and other errors.
+ (declare_module, finish_module): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/circ-1_[abcd].C: New.
+ * g++.dg/modules/mod-decl-1.C: Adjust errors.
+ * g++.dg/modules/mod-decl-2_b.C: Adjust errors.
+ * g++.dg/modules/mod-decl-5_b.C: Adjust errors.
+ * g++.dg/modules/mod-stamp-1-d.C: Adjust errors.
+
+2018-02-01 Nathan Sidwell <nathan@acm.org>
+
+ Alloc a slot for global module
+ gcc/cp/
+ * cp-tree.h (MODULE_INDEX_NONE, MODULE_INDEX_PURVIEW): New.
+ (MODULE_SLOT_TU, MODULE_SLOT_GLOBALS): New.
+ (MODULE_INDEX_IMPORT_BASE): Increment.
+ * module.c (do_module_import): Push reserved slot.
+ * name-lookup.c (module_binding_slot): Reserve slots below
+ MODULE_INDEX_IMPORT_BASE.
+
+ Bindings point to decls
+ gcc/cp/
+ * module.c (data::check_crc): Only check.
+ (data::get_crc): New.
+ (elf_in::find): Return section index.
+ (bytes_in::begin): Add by-section-number variant.
+ (module_state): Add lazy counter (unused).
+ (module_state::write_bindings): Emit decl section number.
+ (module_state::read_bindings): Adjust, swallow ...
+ (module_state::read_decls): ... this. Delete.
+
+ Read and parse the binding section in module_state.
+ gcc/cp/
+ * module.c (modules_state::record_namespace): New.
+ (module_state::write_namespace): Adjust, renamed from ...
+ (module_state::walk_namespace): ... here.
+ (module_state::read_namespace): New.
+ (module_state::{read,write}_bindings): Adjust.
+ (module_state::finish_module): Adjust.
+ * name-lookup.h (set_module_namespace): Declare.
+ * name-lookup.c (merge_global_decl): Adjust.
+ (create_namespace): New.
+ (set_module_namespace): New, use it.
+ (push_namespace): Use create_namespace.
+
+ Write binding section in module_state.
+ gcc/cp/
+ * name-lookup.h (extract_module_decls): Renamed from
+ extract_module_bindings. Adjust signature.
+ * name-lookup.c (extract_module_decls): Likewise.
+ * module.c (module_state::walk_namespace): New, absorb ...
+ (trees_out::walk_namespace): ... this. Delete.
+ (trees_out::write): Reimplement, absorb ...
+ (trees_out::{tag_binding,bindings}): ... these. Delete.
+ (module_state::write_bindings): Adjust.
+
+ Merge trunk r257292.
+
+2018-01-31 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (cpms_{in,out}): Rename to ...
+ (trees_in, trees_out): ... here.
+
+ gcc/cp/
+ * module.c (module_state::global_{trees,vec,crc}): New, moved from ...
+ (globals{,_arys,_crc}): ... these globale scope vars.
+ (cpms_in): Add global_vec member.
+
+ Derive cpm_{in,out} from bytes_{in,out}
+ gcc/cp/
+ * module.c (cpms_{in,out}): Derive from bytes_{in,out}. Adjust
+ all uses of r & w.
+
+ Kill cpm_stream.
+ gcc/cp/
+ * module.c (class cpm_stream): Delete.
+ (class cpms_{in,out}): Adjust.
+
+ Move elf out of cpms_in, cpms_out.
+ gcc/cp/
+ * module.c (module_state::{read,write}_bindings): New.
+ (module_stste::read_decls): New.
+ (cpms_{in,out}::get_elf): Delete.
+ (cpms_out::{write,bindings}): Adjust.
+ (cpms_in::read): Adjust.
+
+ Add module_stat read & write
+ gcc/cp/
+ * module.c (module_state::{read,write}): New.
+ (cpms_in::read): Adjust.
+ (do_import_module, finish_module): Adjust.
+
+ gcc/cp/
+ * module.c: Move cpm_stream, cpms_in, cpms_out earlier.
+
+ Move some reading to module_state.
+ gcc/cp/
+ * module.c (module_state::read_{context,config}): New, swallow ...
+ (cpms_in::imports,header): ... these. Delete.
+ (cpms_in::read): Adjust.
+ (do_import_module): Adjust.
+
+ Move some writing to module_state.
+ gcc/cp/
+ * module.c (module_state::write_{context,config}): New, swallow ...
+ (cpms_out::imports,header): ... these. Delete.
+ (cpms_out::write): Adjust.
+ (finish_module): Adjust.
+
+ Move global tree init.
+ gcc/cp/
+ * module.c (module_state::lazy_init): New, swallow ...
+ (cpm_serial::lazy_globals): ... this. Adjust callers.
+
+ Reorder class declarations
+ gcc/cp/
+ * module.c (bytes, bytes_in, bytes_out): Move before module_state.
+
+ Simplify import interface
+ gcc/cp/
+ * module.c (MODULE_INDEX_IMPORTING, MODULE_INDEX_ERROR): Delete.
+ (MODULE_INDEX_UNKNOWN): New.
+ (module_state): Initialize mod to MODULE_INDEX_UNKNOWN.
+ (cpms_in::read): Return void.
+ (do_module_import): Return pointer to module object.
+ (cpms_in::imports): Adjust.
+ (import_module, declare_module, finish_module): Adjust.
+
+ Module_state owns elf and elf owns stream
+ gcc/cp/
+ * module.c (elf): Add begin, end members.
+ (elf_in, elf_out): Adjust.
+ (module_state::announce): New.
+ (cpms_{in,out}::get_elf): Adjust.
+ (cpms_{in,out}::{begin,end}): Delete.
+ (do_module_import, finish_module): Adjust.
+
+ Commonize module location
+ gcc/cp/
+ * module.c (module_state::{push,pop}_location): Set and restore
+ input_location.
+ (make_module_file): Lose module_root prepending.
+ (do_module_import): Always set module location.
+ (declare_module): Create location and filename.
+ (finish_module): Adjust.
+
+ Staticize instrumentation
+ gcc/cp/
+ * module.c (bytes_out): Staticize spans, lengths, is_set.
+ (bytes_out::instrument): Make static.
+ (cpms_out): Staticize unique, refs, nulls, records.
+ (cpms_out::instrument): Make static. Adjust.
+
+ Separate dumper object
+ gcc/cp/
+ * cp-tree.h (dump, print_other_binding_stack): Undeclare.
+ * name-lookup.c (print_other_binding_stack): Make static.
+ * module.c (class dumper): New.
+ (cpm_serial): Remove dumping machinery here. Adjust all uses.
+ gcc/testsuite/
+ * g++.dg/modules/mod-imp-1_[abcd].C: Adjust dump scans.
+
+ Start refactoring cpm_serial
+ gcc/cp/
+ * module.c (cpms_{in,out}::elf): Pointer to elf object,
+ (cpms_{in,out}::get_elf): New. Use it.
+ (do_module_import, finish_module): Adjust.
+
+2018-01-30 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (data::release): Return NULL, update users.
+ (cpms_in::{mod_ix,crc}): Delete, adjust users.
+
+ Reorder source
+ gcc/cp/
+ * module.c (struct data): First.
+ (class elf, elf_in & elf_out): Next.
+
+ gcc/cp/
+ * module.c (module_state): Remove name_hash, crc_known, set_crc,
+ set_location.
+ (cpms_in::{read,header}): Add crc_ptr arg.
+ (do_module_import): Expected CRC is a pointer.
+ (cpms_in::imports): Adjust.
+
+ Push remaps as they happen.
+ gcc/cp/
+ * module.c (cpms_{in,out}::imports): Write in ascending order.
+
+ Move remap vector into module state.
+ gcc/cp/
+ * module.c (module_state): Add remap;
+ (cpms_in): Remove remap_num, remap_vec.
+ (module_state::release): New.
+ (cpms_in::{imports,tree_node,read}): Adjust.
+ (finish_module): Release module state.
+
+ gcc/cp/
+ * module.c (bytes_out::end): Create PROGBITS or STRTAB.
+ (cpms_out::write): README is a STRTAB.
+
+ Remove SYMTAB knowledge, the README is better.
+ gcc/cp/
+ * module.c (elf_out::symtab): Delete.
+ (elf_out::end): Adjust.
+ (cpms_out::imports): Don't create symtab.
+
+ Section structure completish.
+ gcc/cp/
+ * module.c (elf::isection): Add flags.
+ (elf_out::add): Add section flags.
+ (bytes_out::end): Likewise,
+ (elf_out::end): Adjust.
+ (cpms_out::bindings): Generate bindings section too.
+ (cpms_out::write): Add imports to README. Make string section.
+ (cpms_in::read): Adjust.
+
+ Config in header
+ gcc/cp/
+ * module.c (cpms_{in,out}::tag_conf): Delete.
+ (cpms_{in,out}::header): Serialize host & target conf.
+ (cpms_in::read, cpms_out::write): Adjust.
+
+ Globals in header
+ gcc/cp/
+ * module.c (module_state::set_name): Kill string names.
+ (cpms_{in,out}::tag_globals): Delete.
+ (cpms_{in,out}::header): Do globals. Add outer crc.
+ (cpms_in::read): Absorb cpms_in::read_item.
+ (search_module_path, do_module_import): Kill string names.
+
+2018-01-29 Nathan Sidwell <nathan@acm.org>
+
+ Import table is separate section
+ gcc/cp/
+ * module.c (bytes): Reorganize CRC calcs.
+ (struct elf::symbol): New.
+ (struct elf_out::symtab): New.
+ (elf_out::end): Deal with symbol table.
+ (bytes_{in,out}::{begin,end}): Adjust crc calcs.
+ (cpms_{in,out}::imports): New.
+ (cpms_{in,out}::tag_import): Delete.
+ (cpms_in::read, cpms_out::write): Adjust.
+
+ Header is separate section
+ gcc/cp/
+ * module.c (module_state_hash::equal): Remove string names.
+ (elf_in::find): Find by name.
+ (elf_in::name): New.
+ (class elf_out::strtab): Rename type.
+ (elf_out::strings): New member.
+ (elf_in::begin): Veriy string table. Create default.
+ (elf_out::end): Write string table here.
+ (bytes_in::begin, bytes_out::end): Always PROGBITS.
+ (cpm_stream::rt_eof): Delete.
+ (cpms_{in,out}::header): Reimplement.
+ (cpms_in::read, cpms_out::write): Adjust.
+
+ Remove string-literal module names :(
+ gcc/cp/
+ * cp-tree.h (validate_module_name): Remove.
+ * module.c (validate_module_name): Delete.
+ (bytes_{in,out}::module_name): Delete, adjust callers.
+ * parser.c (cp_parser_module_name): Adjust.
+ (cp_parser_module_declaration, cp_parser_import_declaration)
+ (cp_parser_module_proclamation): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/mod++-decl-3_[ab].C: Delete.
+
+ {read,write}_module become member fns
+ gcc/cp/
+ * module.c (cpms_{in,out}::elf}: Direct member. Adjust ctors.
+ (cpms_{in,out}::{begin,end}): New.
+ (cpms_in::read, cpms_out::write): New.
+ (read_module, write_module): Delete.
+ (do_module_import, finish_module): Adjust.
+
+ README section
+ gcc/cp/
+ * module.c (version2date, version2time, version2string): Moved
+ from cpm_serial.
+ (struct_data): Broken out of elf.
+ (struct elf::isection): Remove link field. Adjust all uses.
+ (class elf_out::strings): New.
+ (elf_out::add): New.
+ (bytes_out::printf): New.
+ (cpm_stream::dump, cpms_in::header): Adjust version handling.
+ (write_module): Write README section.
+
+ Fix layering violation
+ gcc/cp/
+ * module.c (elf): Rename bad -> set_error.
+ (elf_out, elf_in): Update.
+ (cpm_serial, cpm_writer, cpm_reader): Rename to ...
+ (bytes, bytes_out, bytes_in): ... here.
+ (bytes_{in,out}): Remove source, sink members.
+ (bytes_in): Rename overran -> get_overrun. Add end, set_overrun.
+ Delete bad, get_error. Adjust users.
+ (cpms_in, cpms_out): Add elf field. Adjust.
+
+2018-01-26 Nathan Sidwell <nathan@acm.org>
+
+ Simplify buffer filling & drainging
+ gcc/cp/
+ * module.c (cpm_serial): Add begin, end, use, unuse.
+ (cpm_writer): Add use, unuse, begin, end. Delete reserve, flush,
+ seek, tell, checkpoint.
+ (cpm_reader): Add overrun, use, begin, overran. Delete fill,
+ checkpoint.
+ (cpm_{reader,writer}): Update all seralizers.
+ (cpms_{in,out}): Remove checkpointing.
+
+ CRC at section level
+ gcc/cp/
+ * module.c (elf::data): Add crc routines.
+ (cpm_serial): Remove crc routines.
+ (cpm_in, cpm_out): Don't calculate crcs.
+ (read_module, write_module): Adjust (incomplete).
+
+ BMI is ELF
+ gcc/cp/
+ * module.c (get_version): Moved from cpm_stream::version.
+ (struct non_null_hash, ptr_uint_traits, ptr_uint_hash_map)
+ uint_ptr_traits, uint_ptr_hash_map): New.
+ (elf, elf_in, elf_out): New classes.
+ (cpm_serial, cpm_in, cpm_out): Modify (incomplete).
+ (cpms_in, cpms_out): Adjust.
+ (read_module, write_module, finish_module): Adjust.
+
+2018-01-24 Nathan Sidwell <nathan@acm.org>
+
+ Global tree via crc
+ gcc/cp/
+ * module.c (cpm_stream): Add globals & globals_crc.
+ (cpm_stream::next): Add default arg.
+ (cpm_stream::cpm_stream): Lazily init globals vector.
+ (cpms_{in,out}::mark_present, globals): Delete.
+ (cpms_{in,out}::tag_globals): Reimplement.
+ (cpms_in::tree_node_special): Read global tree directly.
+ * name-lookup.c (extract_module_bindings): Skip RTTI types.
+
+ gcc/cp/
+ * module.c (module_state): Replace direct_import with imported &
+ exported flags.
+ (module_state::do_import): Adjust.
+ (enum import_kind): Delete.
+ (do_module_import): Adjust.
+ (cpms_{in.out}::tag_import): Adjust.
+ (module_interface_p, import_module, declare_module)
+ (finish_module): Adjust.
+
+2018-01-23 Nathan Sidwell <nathan@acm.org>
+
+ Static bindings not visible in imports
+ gcc/cp/
+ * name-lookup.h (decapsulate_binding): Delete.
+ (module_binding_vec, extract_module_bindings): Declare.
+ * module.c (cpms_{in,out}::tag_binding): Reimplement.
+ (cpms_out::bindings): Likewise.
+ * name-lookup.c (decapsulate_binding): Delete.
+ (extract_module_bindings): New.
+ gcc/testsuite/
+ * g++.dg/modules/mod++-decl-0_c.C: Remove XFAIL.
+ * g++.dg/modules/static-1_[abc].C: New.
+
+2018-01-22 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * tree.c (ovl_insert): No need to sort by USING_P.
+ (ovl_iterator::reveal_node): Likewise.
+
+ Update bug reporting instructions
+ gcc/
+ * configure.ac (ACX_BUGURL): Set new url
+ * diagnostic.c (diagnostic_action_after_output): Special ICE
+ instructions.
+ * configure: Rebuilt.
+
+2018-01-19 Nathan Sidwell <nathan@acm.org>
+
+ Kill mangle_namespace.
+ gcc/cp/
+ * cp-tree.h (CPTI_MANGLE, mangle_namespace): Delete.
+ * decl.c (cxx_init_decl_processing): Don't create it.
+ * module.c (cpms_out::bindings): Don't skip it.
+ * name-lookup.c (suggest_alternatives_for): Likewise.
+
+ Import ident by type not index.
+ gcc/cp/
+ * name-lookup.h (get_ident_in_namespace, get_ident_in_class,
+ find_by_ident_in_namespace, find_by_ident_in_class): Delete.
+ (lookup_by_ident): Declare.
+ * name-lookup.c (get_ident_in_namespace, get_ident_in_class): Delete.
+ (find_by_ident_in_namespace, find_by_ident_in_class): Replace with ...
+ (lookup_by_ident): ... this.
+ * module.c (cpms_{in,out}::ident_imported_decl): Delete.
+ (cpms_out::tree_node): Write imported decl info directly.
+ (cpms_in::tree_node): Use lookup_by_ident.
+
+ gcc/cp/
+ * module.c (cpms_{in.out}::tree_node_special): New, broken out of ...
+ (cpms_{in,out}::tree_node): ... here. Call them.
+
+ Merge trunk r256894.
+
+ gcc/cp/
+ * Make-lang.in: Set MODULE_STAMP if non-branch experimental.
+
+ Beginnings of global module correctness
+ gcc/cp/
+ * cp-tree.h (struct mc_index): New.
+ (module_cluster): Use it.
+ (MODULE_VECTOR_SLOTS_PER_CLUSTER): New.
+ (GLOBAL_MODULE_INDEX, THIS_MODULE_INDEX, IMPORTED_MODULE_BASE): Delete.
+ (MODULE_INDEX_IMPORT_BASE): New.
+ (DECL_MODULE_PURVIEW_P, MAYBE_DECL_MODULE_PURVIEW_P): New.
+ (MAYBE_DECL_MODULE_INDEX): Adjust.
+ (MODULE_INDEX_BITS): New.
+ (struct lang_decl_base): Add module_purview_p field.
+ * decl2.c (c_parse_final_cleanups): Adjust.
+ * error.c (dump_module_suffix): Adjust.
+ * mangle.c (maybe_write_module): Adjust.
+ * module.c (MODULE_INDEX_IMPORTING, MODULE_INDEX_ERROR): New.
+ (module_state::freeze): Delete.
+ (this_module): Delete. Replace with (*modules)[0].
+ (cpms_in::alloc_remap_vec): Adjust.
+ (cpms_in::tag_import): Use MODULE_INDEX_ERROR.
+ (cpms_{in,out}::tag_binding): Lose MAIN_P parm. Adjust.
+ (cpms_in::define_function): Remove GLOBAL_MODULE_INDEX handling.
+ (cpms_in::read_item): Use MODULE_INDEX_IMPORTING.
+ (cpms_in::finish): Remove NODE_MODULE parm. use
+ MAYBE_DECL_MODULE_PURVIEW_P.
+ (cpms_{in,out}::lang_decl_bools): Read & write module_purview_p.
+ (cpms_in::tree_node_raw): Lose NODE_MODULE parm. Set module
+ directly.
+ (cpms_{in,out}::tree_node): Adjust module identification.
+ (cpms_out::bindings): Bindings are on a single slot.
+ (module_loc): Delete.
+ (decl_set_module): Set purview as needed.
+ (module_purview_p, module_interface_p): Adjust.
+ (read_module): Simplify.
+ (do_module_import): Adjust for lack of global module slot. Use
+ MODULE_INDEX_ERROR, MODULE_INDEX_IMPORTING. Detect already
+ declared module here.
+ (import_module): Adjust.
+ (declare_module): Don't detect already declared here.
+ (write_module): Adjust.
+ (finish_module): Adjust.
+ * name-lookup.c (module_binding_slot): Reimplement.
+ (name_lookup::process_module_binding)
+ (name_lookup::search_namespace_only, name_lookup::add_module_fns)
+ (name_lookup::adl_namespace_only, do_pushdecl): Adjust.
+ (merge_global_decl): Kludge into reworking.
+ (push_module_binding): Likewise.
+ * name-lookup.h (merge_global_decl): Add module parm.
+ * pt.c (build_template_decl): Propagate purview.
+ * ptree.c (cxx_print_xnode): Adjust.
+ * rtti.c (tinfo_base_init): Kludge into working.
+ (get_tinfo_desc): Drop unnecessary push/pop abi namespace.
+ (emit_tinfo_decl): Simplify.
+ gcc/testsuite/
+ * g++.dg/modules/global-1_[ab].C: New
+ * g++.dg/modules/mod++-decl-0_b.C: Remove xfail.
+
+2018-01-18 Nathan Sidwell <nathan@acm.org>
+
+ Merge access & discriminator.
+ gcc/cp/
+ * cp-tree.h (struct lang_decl_base): Rename u2sel to spare.
+ (struct lang_decl_min): Replace lang_decl_u2 union with plain
+ tree.
+ (LANG_DECL_U2_CHECK): Delete.
+ (DECL_DISCRIMINATOR_SET_P, DECL_DISCRIMINATOR): Adjust.
+ (DECL_CAPTURED_VARIABLE, DECL_ACCESS, THUNK_VIRTUAL_OFFSET): Adjust.
+ * decl.c (push_local_name): Represent discriminator as INTEGER_CST.
+ (duplicate_decls): Copy DECL_ACCESS. fix formatting.
+ * mangle.c (discriminator_for_local_entity): Extract integer value.
+ * module.c (cpms_{in,out},lang_decl_bools): Drop u.base.u2sel.
+ (cpms_{in,out}::lang_decl_vals): Drop u.min.u2 handling.
+ * semantics.c (finish_omp_threadprivate): Drop u.base.u2sel copying.
+
+2018-01-02 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r256078.
+
+ Typedefs!
+ gcc/cp/
+ * decl.c (grokdeclarator): Set typedef's module/export.
+ gcc/testsuite/
+ * g++.dg/modules/tdef-2_[abc].C: New.
+
+ gcc/testsuite/
+ * g++.dg/modules/tdef-1_[ab].C: New.
+
+2017-12-20 Nathan Sidwell <nathan@acm.org>
+
+ Variables!
+ gcc/cp/
+ * decl.c (grokvardecl): Set exporting.
+ * module.c (dump_nested_name): Dump integer values.
+ (cpms_{in,out}::define_var): New.
+ (cpms_{in,out}::tag_definition): Deal with vars.
+ (cpms_out::maybe_tag_definition): Likewise.
+ (cpms_out::core_bools): Externalize static vars.
+ (cpms_out::lang_decl_bools): Likewise for not-really-extern.
+ gcc/testsuite/
+ * g++.dg/modules/var-1_[ab].C: New.
+
+ Enumerations!
+ gcc/cp/
+ * module.c (module_state::set_name): Don't deal with crc.
+ (module_state::set_crc): New.
+ (cpm_serial::get_crc): Don't obscure zero.
+ (cpm_writer::tell): New.
+ (cpms_out::crc_tell): New.
+ (cpms_{in,out}::define_enum): New.
+ (cpms_out::header): Save crc location.
+ (cpms_in::header): Use set_crc.
+ (cpms_out::tag_eof): Adjust.
+ (cpms_out::maybe_tag_definition): Deal with enums.
+ (cpms_{in,out}::tag_definition): Deal with enums.
+ (cpms_{in,out}::core_vals): Do not write enum bits.
+ (do_module_import): Use set_crc.
+ * name-lookup.c (push_module_binding): Fix assert.
+ gcc/testsuite/
+ * g++.dg/modules/enum-1_[ab].C: New.
+
+2017-12-19 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r255836.
+
+2017-11-27 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r255166.
+
+2017-11-22 Nathan Sidwell <nathan@acm.org>
+
+ Non-type template parms, & nested template classes.
+ gcc/cp/
+ * module.c (cpms_{in,out}::core_vals): Deal with CONST_DECLs.
+ gcc/testsuite/
+ * g++.dg/modules/tplmem-3_[ab].C: New.
+
+2017-11-21 Nathan Sidwell <nathan@acm.org>
+
+ Member types
+ gcc/testsuite/
+ * g++.dg/modules/nested-2_[ab].C: New
+
+ Nested classes.
+ gcc/cp/
+ * module.c (cpm_reader::wi): Promote before shifting.
+ (cpms_out::define_class): Maybe define all members.
+ (cpms_out::maybe_tag_definition): Only implicit typedefs are
+ defined.
+ (cpms_{in.out}::core_vals): Don't stream value cache.
+ gcc/testsuite/
+ * g++.dg/modules/nested-1_[abc].C: New
+
+2017-11-20 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r254959.
+
+ Template member functions.
+ gcc/cp/
+ * cp-tree.h (TI_PENDING_TEMPLATE_FLAG): Add TI_CHECK.
+ * module.c (cpms_out::maybe_tag_definition): Check DECL_INITIAL,
+ write clones.
+ (cpms_in::tag_definition): Don't zap clones.
+ (cpms_in::finish): Clear TI_PENDING_TEMPLATE_FLAG.
+ (cpms_{in,out}::core_vals): Check tcc_unary, tcc_binary.
+ * optimize.c (maybe_clone_body): Don't alias when modules.
+ gcc/testsuite/
+ * g++.dg/modules/tplmem-1_[ab].C: New.
+
+2017-11-17 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (cpms_out::tree_node): Fix conv-op identifiers.
+ gcc/testsuite/
+ * g++.dg/modules/convop-1_[ab].C: New.
+
+2017-11-16 Nathan Sidwell <nathan@acm.org>
+
+ Constexprs!
+ gcc/cp/
+ * cp-tree.h (check_constexpr_fundef, find_constexpr_fundef): Declare.
+ * constexpr.c (find_constexpr_fundef): New.
+ (register_constexpr_fundef): Split checking off to ...
+ (check_constexpr_fundef): ... here. Call
+ register_constexpr_fundef.
+ * decl.c (): Adjust.
+ * module.c (cpms_{in,out}::define_function): Serialize constexpr
+ body.
+ (cpms_{in,out}::core_vals): Serialize function-scope var initializers.
+ gcc/testsuite/
+ * g++.dg/modules/cexpr-[12]_[ab].C: New.
+
+ Merge trunk r254823.
+
+ Merge trunk r254819.
+
+2017-11-03 Nathan Sidwell <nathan@acm.org>
+
+ Virtual bases!
+ gcc/cp/
+ * Make-lang.in: module.o depends on revision
+ * class.c (layout_class_type): Unnamed types do not get base
+ types.
+ * cxx-module-wrapper.sh: Invoke make. Strip bad args.
+ * module.c (module_context): Allow NULL context.
+ (cpms_{in,out}::define_class): Deal with classtype_as_base.
+ (cpms_{in,out}::tag_definition): Allow raw class.
+ (cpms_{in,out}:ident_imported_decl: Rework class scope.
+ (cpms_out::tree_node): Deal with NULL module context.
+ * name-lookup.c (maybe_lazily_declare): Break out of ...
+ (get_class_binding): ... here. Call it.
+ (get_ident_in_class, find_by_ident_in_class): New.
+ * name-lookup.h (get_ident_in_class, find_by_ident_in_class): Declare.
+ gcc/testsuite/
+ * g++.dg/modules/class-7_[abc].C: New.
+ * g++.dg/modules/main.cc: Move to ...
+ * g++.dg/modules/main_a.C: ... here. Adjust.
+ * g++.dg/modules/modules.exp: Remove main.cc exceptionalism.
+
+2017-10-26 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (module_state): Add filename & loc.
+ (module_state::{set,push,pop}_location): New.
+ (cpm_stream): Add state member. Adjust.
+ (cpms_{in,out}): Adjust.
+ (cpms_in::{header,tag_conf}): Adjust.
+ (read_module, write_module): Lose fname arg.
+ (search_moule_path): Don't prefix .
+ (do_module_import, finish_module): Set location.
+ gcc/
+ * diagnostic.c (maybe_line_and_column): New.
+ (diagnostic_get_location_text, diagnostic_report_current_module):
+ Use it.
+ gcc/testsuite/
+ Markup no-column tests.
+
+2017-10-24 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp
+ * cxx-module-wrapper.sh: Cleanups.
+ * module.c (cpm_stream::global_tree_arys): Add integer_types.
+ (cpms_{in,out}::tree_node): Robustify.
+ (read_module): Note end of importing.
+ (search_module_path): Note if wrapper failed to install.
+ * name-lookup.c (merge_global_decl): Zap anticipated decl here ...
+ (push_module_binding): ... not here.
+ gcc/
+ * incpath.c (clean_cxx_module_path): Correct env var name.
+ gcc/c-family/
+ * c.opt (fmodules++): Add Driver.
+ gcc/testsuite/
+ * g++.dg/modules/{main.c,hello.cc}: New.
+ * g++.dg/modules/modules.exp: Special case main.cc
+
+2017-10-23 Nathan Sidwell <nathan@acm.org>
+
+ Wrapper program
+ gcc/
+ * doc/invoke.texi (fmodule-root, fmodule-path, fmodule-wrapper):
+ Document.
+ * gcc.c (driver::maybe_putenv_CXX_MODULE_WRAPPER): New.
+ (driver::main): Call it.
+ * gcc.h (driver::maybe_putenv_CXX_MODULE_WRAPPER): Declare.
+ * incpath.h (clean_cxx_module_path): Add multilib parm.
+ * incpath.c (add_path): Initialize length.
+ (clean_cxx_module_path): Append multilib fragment. Add '.'.
+ gcc/c-family/
+ * c-opts.c (c_common_post_options): Pass multilib suffx to
+ clean_cxx_module_path.
+ * c.opt (fmodules): Notify driver.
+ (fmodule-hook): Rename to ...
+ (fmodule-wrapper): ... here.
+ gcc/cp/
+ * Make-lang.in (cxx-module-wrapper): New program.
+ * cxx-module-wrapper.sh: New.
+ * module.c: Include libiberty.h, tree-diagnostic.h.
+ (read_module): Add announcement.
+ (module_to_filename): Identifier mapping does not depend on
+ module_path.
+ (search_module_path): Shell out to wrapper function.
+ (do_module_import): Adjust.
+ (init_module_processing): Default flag_module_wrapper.
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp: Adjust.
+
+2017-10-20 Nathan Sidwell <nathan@acm.org>
+
+ Template class!
+ gcc/cp/
+ * decl.c (xref_tag_1): Don't decl_set_module here.
+ * module.c (cpms_in::define_function): Check templatedness.
+ (cpms_{in,out}::define_class): Add maybe_template arg. Add
+ templatey bits.
+ (cpms_out::maybe_tag_definition): Deal with template classes.
+ {cpms_{in,out}::tag_definition): Add maybe_template arg, adjust.
+ {cpms_{in,out}::core_vals): Write record template_info.
+ * name-lookup.c (set_class_binding): Protect against empty
+ member_vec.
+ (do_pushtag): Call decl_set_module here.
+ * pt.c (build_template_decl): Copy module bits here ...
+ (push_template_decl_real): ... not here.
+ gcc/testsuite/
+ * g++.dg/modules/mod-tpl-2_[ab].C: New.
+
+ Early CRC not time stamps.
+ gcc/cp/
+ * module.c (module_state::set_name): CRC too.
+ (cpm_serial::get_crc): New.
+ (cpm_writer::seek): New.
+ (cpm_{reader,writer}::bytes4): Rename to ...
+ (cpm_{reader,writer}::raw): ... this. Adjust all users.
+ (cpm_reader::get_crc): Delete.
+ (module_state::stamp): Replace with ...
+ (module_state::crc): ... this.
+ (cpms_in::cpms_in): Drop stamp arg.
+ (cpms_{in,out}::header): Deal with CRC not timestamp.
+ (time2str, timestamp_mismatch): Delete.
+ (cpms_{in,out}::tag_eof): Deal with crc.
+ (cpms_{in,out}::tag_import): Drop timestamp.
+ (read_module, do_module_import): Likewise. Use CRC.
+ gcc/testsuite/
+ * g++.dg/modules/mod-stamp-1_d.C: Adjust.
+
+ Merge trunk r253954.
+
+2017-10-13 Nathan Sidwell <nathan@acm.org>
+
+ Template function!
+ gcc/
+ * tree.h (MARK_TS_TYPE_NON_COMMON): New.
+ gcc/cp/
+ * cp-objcp-common.c (cp_common_init_ts): Fix
+ TEMPLATE_TEMPLATE_PARM, TEMPLATE_TYPE_PARM,
+ BOUND_TEMPLATE_TEMPLATE_PARM marking.
+ * cp-tree.h (canonical_type_parameter): Declare.
+ * module.c (cpms_{in,out}::define_function): Add maybe_template
+ parm, adjust.
+ (cpms_out::maybe_tag_definition): Allow function templates.
+ (cpms_{in,out}:tag_definition): Allow templates.
+ (cpms_{in,out}::core_vals): Stream more nodes.
+ (cpms_{in,out}::lang_decl_vals): Stream more nodes.
+ (cpms_in::finish_type): Deal with TEMPLATE_TYPE_PARM,
+ TEMPLATE_TEMPLATE_PARM.
+ * pt.c (canonical_type_parameter): Make extern, simplify.
+ (push_template_decl_real): Propagate exportednes.
+ gcc/testsuite/
+ * g++.dg/modules/mod-tpl-1_[ab].C: New.
+
+2017-10-12 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (TS_CP_BINDING, TS_CP_WRAPPER, LAST_TS_CP_ENUM): Delete.
+ (union lang_tree_node): Adjust GTY desc.
+ (cp_tree_node_structure): Take a tree_code.
+ * decl.c (cp_tree_node_structure): Take a tree_code.
+ * module.c (cpms_{out,in}::core_vals): Order clauses from
+ tree-core.h, use cp_tree_node_structure for C++.
+
+ Module name can be a string const (-fmodules++)
+ gcc/cp/
+ * cp-tree.h (cp_expr): Add constant operator* and operator->.
+ (validate_module_name): New.
+ (declare_module, import_module): Take cp_expr.
+ * error.c (dump_module_suffix): Adjust.
+ * module.c (module_state): Add name_hash. Adjust.
+ (module_state_hash): Allow string consts.
+ (module_state::set_name): Likewise.
+ (cpm_{writer,reader}::module_name): New.
+ (dump_nested_name): Name can be a string const.
+ (cpms_{out,in}::header): Adjust.
+ (cpms_{out,in}::tag_import): Adjust.
+ (validate_module_name): New.
+ (module_to_filename): Allow string consts.
+ (make_module_file): Adjust.
+ (do_module_import): Adjust.
+ (import_module, declare_module): Adjust.
+ * parser.c (cp_parser_module_name): Return cp_expr, allow
+ string-cst.
+ (cp_parser_module_declaration, cp_parser_import_declaration,
+ cp_parser_module_proclamation): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp (dg-module-bmi): Renamed.
+ * g++.dg/modules/mod++-decl-3_[ab].C: New.
+
+ Add -fmodule-path, -fmodule-root.
+ gcc/
+ * incpath.h (INC_CXX_MPATH): New.
+ (clean_cxx_module_path): Declare.
+ * incpath.c (clean_cxx_module_path): New.
+ gcc/cp/
+ * cp-tree.h (init_module_processing): Declare.
+ * decl.c (cxx_init_decl_processing): Call init_module_processing.
+ * module.c (module_path, module_path_max): New vars.
+ (MOD_FNAME_PFX): Delete.
+ (module_to_filename): Reimplement.
+ (search_module_path, make_module_file): New.
+ (do_module_import): Adjust.
+ (init_module_processing): New.
+ (finish_module): Adjust.
+ gcc/c-family/
+ * c-opts.c (c_common_handle_option): Process OPT_fmodule_path_.
+ (c_common_post_options): Clean module path.
+ * c.opt (fmodule-root=, fmodule-path=, fmodule-hook=): New.
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp: Adjust module name logic.
+
+2017-10-11 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r253654.
+
+2017-10-10 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r253585.
+
+2017-09-25 Nathan Sidwell <nathan@acm.org>
+
+ gcc/c-family/
+ * c_common_handle_option: Handle fmodules++.
+ * c.opt (fmodules): Make Uinteger.
+ (fmodules++, fmodules-ts): New.
+ gcc/cp/
+ * parser.c (cp_parser_consume_semicolon_at_end_of_statement):
+ Return success bool.
+ (cp_parser_translation_unit): Adjust cp_parser_declaration_seq_opt
+ call.
+ (cp_parser_declaration_seq_opt): Add top_level parm, look for
+ module-decl here.
+ (cp_parser_module_declaration): Handle -fmodules++ syntax.
+ (cp_parser_module_export): No need to handle module-declaration
+ here ...
+ (cp_parser_declaration): ... or here.
+ gcc/
+ * doc/invoke.texi (-fmodules++): Document.
+ gcc/testsute/
+ * g++.dg/modules/mod++-decl-0_[abc].C: New.
+ * g++.dg/modules/mod++-decl-[12].C: New.
+ * g++.dg/modules/mod-decl-1.C: Adjust expected error.
+
+2017-09-15 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk 252831.
+
+2017-07-20 Boris Kolpackov <boris@codesynthesis.com>
+
+ Add -fmodule-output & -fmodule-file options.
+ gcc/c-family/
+ * c.opt (-fmodule-output): New option.
+ (-fmodule-file): New option.
+ * c-common.h (module_output): Declare.
+ (module_files): Declare.
+ * c-common.c (module_output): New variable.
+ (module_files): New variable.
+ * c-opts.c (add_module_file): New function.
+ * c-opts.c: Handle -fmodule-output and -fmodule-file.
+ gcc/cp/
+ * module.c (finish_module): If specified, use module_output as output
+ file name.
+ * module.c (do_module_import): Check module_files for a module name
+ to file mapping before falling back to default.
+ gcc/
+ * doc/invoke.texi (C++ Dialect Options): Document -fmodule-output
+ and -fmodule-file.
+
+2017-07-17 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r250272.
+
+2017-07-13 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r250159.
+
+2017-07-03 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (CLASSTYPE_CONSTRUCTORS, CLASSTYPE_DESTRUCTOR): Use
+ lookup_fnfields_slot_nolazy.
+ * search.c (lookup_fnfields_idx_nolazy): Don't use
+ CLASSTYPE_CONSTRUCTORS, CLASSTYPE_DESTRUCTOR.
+
+ gcc/cp/
+ * class.c (type_has_user_declared_move_constructor,
+ type_has_user_declared_move_assign): Delete, replace with:
+ (classtype_has_user_move_assign_or_ctor_p): ... this.
+ * cp-tree.h (type_has_user_declared_move_constructor,
+ type_has_user_declared_move_assign): Delete, replace with:
+ (classtype_has_user_move_assign_or_ctor_p): ... this.
+ * method.c (maybe_explain_implicit_delete): Update.
+ (lazily_declare_fn): Update.
+ * tree.c (type_has_nontrivial_copy_init): Update.
+ * search.c (lookup_fnfields_slot_nolazy): Don't try and complete
+ the type.
+ * pt.c (check_explicit_specialization): Use regular lookup.
+
+ gcc/cp/
+ * class.c (maybe_warn_about_overly_private_class): Ignore
+ copy/move ctors.
+ * semantics.c (classtype_has_nothrow_assign_or_copy_p): Use
+ lookup_fnfields_slot for ctors.
+
+ gcc/cp/
+ * module.c (cpms_{out,in}::start): Don't deal with identifiers
+ here.
+ (cpms_{out,in}::tree_node): Deal with identifiers specially.
+
+ Merge trunk r249852.
+
+2017-06-30 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r249835.
+
+2017-06-29 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r249794.
+
+ gcc/cp/
+ * cp-tree.h (class_method_index_for_fn): Delete.
+ * decl2.c (check_classfn): Use lookup_fnfields_slot, reimplement
+ diagnostics.
+ * name-lookup.h (lookup_all_conversions): Declare.
+ * name-lookup.c (lookup_all_conversions): New.
+ * pt.c (retrieve_specialization): Use lookup_fnfields_slot,
+ lookup_all_conversions.
+ * search.c (class_method_index_for_fn): Delete.
+ gcc/testsuite/
+ * g++.dg/concepts/memfun-err.C: Adjust.
+ * g++.dg/cpp0x/decltype9.C: Adjust.
+ * g++.dg/lookup/decl1.C: Adjust.
+ * g++.dg/other/pr28432.C: Adjust.
+ * g++.dg/parse/crash12.C: Adjust.
+ * g++.dg/parse/enum3.C: Adjust.
+ * g++.dg/parse/operator6.C: Adjust.
+ * g++.dg/template/crash69.C: Adjust.
+ * g++.dg/template/error27.C: Adjust.
+ * g++.dg/template/error28.C: Adjust.
+ * g++.dg/template/memfriend6.C: Adjust.
+ * g++.old-deja/g++.mike/err1.C: Adjust.
+ * g++.old-deja/g++.mike/p811.C: Adjust.
+ * g++.old-deja/g++.other/crash25.C: Adjust.
+ * g++.old-deja/g++.other/dtor4.C: Adjust.
+ * g++.old-deja/g++.pt/t37.C: Adjust.
+
+ Merge trunk r249779.
+
+ gcc/cp/
+ * class.c (finish_struct): Use OVL_P.
+ * cp-tree.h (THIS_NAME, IN_CHARGE_NAME, VTBL_PTR_TYPE,
+ VTABLE_DELTA_NAME, VTABLE_PFN_NAME): Delete.
+ * decl.c (initialize_predefined_identifiers): Encode them here
+ directly. Rename cdtors consistently.
+ (cxx_init_decl_processing): Name vtbl_ptr_type directly.
+ * search.c (class_method_index_for_fn): No need to frob cdtor names.
+
+2017-06-28 Nathan Sidwell <nathan@acm.org>
+
+ cdtor name cleanup. expunge lookup_fnfields_1 use.
+ gcc/
+ * builtins.c (fold_builtin_FUNCTION) Use
+ lang_hooks.decl_printable_name.
+ gcc/cp/
+ * call.c (build_new_method_call_1) Update cdtor handling.
+ * class.c (get_basefndecls): Use lookup_fnfields_slot.
+ * cp-tree.h (lookup_fnfields_1): Don't declare.
+ * decl.c (register_dtor_fn): Use lookup_fnfields_slot.
+ (grokfndecl): Set cdtor name.
+ * method.c (implicitly_declare_fn): Adjust cdtor flag setting.
+ * pt.c (check_explicit_specialization): Adjust cdtor checking, use
+ lookup_fnfields_slot_nolazy.
+ * search.c (lookup_fnfields_1): Make static.
+ * semantics.c (classtype_has_nothrow_assign_or_copy_p): Use
+ lookup_fnfields_slot.
+ gcc/testsite/
+ * g++.dg/cpp1y/builtin_FUNCTION.C: New.
+ * g++.dg/plugin/decl-plugin-test.C: Adjust.
+
+ Merge trunk r249746.
+
+ gcc/cp/
+ * cp-tree.h (SET_CLASS_TYPE_P): Use RECORD_OR_UNION_CHECK.
+ (NON_UNION_CLASS_TYPE_P): Just check for RECORD_TYPE.
+ * call.c (check_dtor_name): Adjust constructor_name check.
+ (name_as_c_string): Move const cast.
+ (build_new_method_call_1): Use constructor_name from basetype.
+ * class.c (get_vfield_name): Measure constructor_name length.
+ (build_self_reference): Don't use constructor_name here.
+ * cxx-pretty-print.c (is_destructor): Delete.
+ (pp_cxx_unqualified_id): Remove bogus dtor code.
+ * decl.c (grokdeclarator): Minor cleanup.
+ * method.c (implicitly_declare_fn): Use ctor_identifier and
+ dtor_identifier.
+ * name-lookup.c (constructor_name): Reimplement.
+ (constructor_name_p): Likewise.
+ (push_class_level_binding_1): Don't use constructor_name here.
+ * parser.c (cp_parser_direct_declarator): Reformat to avoid
+ nesting ifs.
+ * pt.c (tsubst_decl <FUNCTION_DECL>): Move var decls to
+ initialization point. Don't unnecessarily check for ctor name.
+ gcc/c-family/
+ * c-common.c (resort_field_decl_cmp): Don't declare.
+
+2017-06-27 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r249702.
+ gcc/c-family/
+ * c-common.h (field_decl_cmp, resort_sorted_fields): Delete.
+ * c-common.c (field_decl_cmp, resort_data,
+ resort_field_decl_cmp): Move to c-decl.c.
+ gcc/c/
+ * c-decl.c (field_decl_cmp, resort_data,
+ resort_field_decl_cmp): Moved from c-common.c
+
+2017-06-26 Nathan Sidwell <nathan@acm.org>
+
+ Replace lang_type::sorted_fields with lang_type::bindings.
+ gcc/cp/
+ * cp-tree.h (lang_type): Delete sorted_fields. Add bindings
+ field.
+ (CLASSTYPE_SORTED_FIELDS): Replace with ...
+ (CLASSTYPE_BINDINGS): ... this.
+ * name-lookup.c (lookup_class_member): Reimplement.
+ (count_fields): Delete.
+ (sorted_fields_type_new): Delete.
+ (add_class_member): New.
+ (add_fields_to_record_type): Replace with ...
+ (add_class_members): ... this.
+ (add_enum_fields_to_record_type): Delete.
+ (create_classtype_sorted_fields): Replace with ...
+ (set_class_bindings): ... this.
+ (insert_late_enum_def_into_classtype_sorted_fields): Replace with ...
+ (insert_late_enum_def_bindings): ... this.
+ * name-lookup.h (create_classtype_sorted_fields,
+ insert_late_enum_def_into_classtype_sorted_fields): Replace with ...
+ (set_class_bindings, insert_late_enum_def_bindings): ... this.
+ * ptree.h (cxx_print_type): Don't print SORTED_FIELDS.
+ * search.c (lookup_field_1): Check CLASSTYPE_BINDINGS.
+ * decl.c (finish_enum_value_list): Use insert_late_enum_def_bindings.
+ * class.c (finish_struct_1): Use set_class_bindings.
+ * module.c (cpms_in::define_class): Likewise.
+
+ Start moving class name lookup around
+ gcc/cp/
+ * class.c (count_fields, add_fields_to_record_type,
+ add_enum_fields_to_record_type, sorted_fields_type_new,
+ create_classtype_sorted_fields,
+ insert_late_enum_def_into_classtype_sorted_fields): Move to ...
+ * name-lookup.c: ... here.
+ (lookup_class_member): New. Broken out of ...
+ * search.c (lookup_field_1): ... here. Call it.
+ * name-lookup.h (lookup_class_member,
+ create_classtype_sorted_fields,
+ insert_late_enum_def_into_classtype_sorted_fields): Declare.
+
+ Merge trunk r249657.
+
+ gcc/cp/
+ * cp-tree.h (lang_decl_fn): Remove assignment_operator_p field.
+ * module.c (cpms_{out,in}::lang_decl_bools: Likewise.
+ libcc1/
+ * libcp1plugin.cc (plugin_build_decl): Don't set
+ DECL_ASSIGNMENT_OPERATOR_P.
+
+ gcc/
+ * Makefile.in (MODULE_STAMP): Set here
+ (REVISION, REVISION_c): Override.
+ gcc/cp/
+ * Make-lang.in (MODULE_STAMP): Not here.
+
+2017-06-23 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (DECL_COMPLETE_CONSTRUCTOR_P): Directly compare
+ identifier.
+ (DECL_BASE_CONSTRUCTOR_P, DECL_COMPLETE_DESTRUCTOR_P,
+ DECL_BASE_DESTRUCTOR_P, DECL_DELETING_DESTRUCTOR_P): Likewise.
+ (DECL_ASSIGNMENT_OPERATOR_P): Use IDENTIFIER_ASSIGN_OP_P.
+ * decl.c (grok_op_properties): Adjust identifier checking.
+ * init.c (expand_default_init): Adjust identifier descision.
+ * method.c (implicitly_declare_fn): Don't use
+ DECL_ASSIGNMENT_OPERATOR_P.
+ * search.c (lookup_fnfields_1): Use IDENTIFIER_CTOR_P,
+ IDENTIFIER_DTOR_P.
+ * call.c (in_charge_arg_for_name): Reimplement.
+ (build_special_member_call): Use IDENTIFIER_CDTOR_P,
+ IDENTIFIER_DTOR_P.
+
+2017-06-22 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r249572.
+
+ Reorder IDENTIFIER flags
+ gcc/cp/
+ * cp-tree.h (enum cp_identifier_kind): New.
+ (IDENTIFIER_KIND_BIT_0, IDENTIFIER_KIND_BIT_1,
+ IDENTIFIER_KIND_BIT_2): New.
+ (IDENTIFIER_MARKED): Move to TREE_LANG_FLAG_4.
+ (IDENTIFIER_VIRTUAL_P, IDENTIFIER_REPO_CHOSEN): Add IDENTIFIER_CHECK.
+ (C_IS_RESERVED_WORD): Replace with ...
+ (IDENTIFIER_KEYWORD_P): ... this.
+ (IDENTIFIER_CTOR_OR_DTOR_P): Replace with ...
+ (IDENTIFIER_CDTOR_P): ... this.
+ (IDENTIFIER_CTOR_P, IDENTIFIER_DTOR_P): New.
+ (IDENTIFIER_OPNAME_P): Replace with ...
+ (IDENTIFIER_ANY_OP_P): ... this.
+ (IDENTIFIER_ASSIGN_OP_P): New.
+ (IDENTIFIER_TYPENAME_P): Replace with ...
+ (IDENTIFIER_CONV_OP_P): ... this.
+ (NEW_DELETE_OPNAME_P): Replace with ...
+ (IDENTIFIER_NEWDEL_OP_P): ... this.
+ (DECL_CONV_FN_P, DECL_OVERLOADED_OPERATOR_P): Adjust.
+ (get_identifier_kind_name, set_identifier_kind): Declare.
+ * lex.c (get_identifier_kind_name, set_identifier_kind): New.
+ (init_operators): Adjust to avoid keywords, use
+ set_identifier_kind. Copy TYPE_EXPR slot.
+ (init_reswords): Call set_identifier_kind.
+ (unqualified_name_lookup_error): Adjust.
+ * operators.def (TYPE_EXPR): Remove.
+ * decl.c (struct predefined_identifier): Move into ...
+ (initialize_predefined_identifiers): ... here. Call
+ set_identifier_kind.
+ (grokfndecl, check_var_type, grokdeclarator): Adjust.
+ (grok_op_properties): Use IDENTIFIER_ANY_ASSIGN_OP to halve search
+ space. Adjust.
+ * call.c (name_as_c_string): Adjust.
+ (build_new_method_call_1): Likewise.
+ * cp-cilkplus.c (is_conversion_operator_function_decl_p): Likewise.
+ * cxx-pretty-print.c (pp_cxx_unqualified_id): Adjust.
+ * dump.c (cp_dump_tree): Adjust.
+ * error.c (dump_decl_name): Adjust.
+ * mangle.c (write_unqualified_id, write_member_name,
+ write_expression): Adjust.
+ (mangle_conv_op_name_for_type): Use set_identifier_kind.
+ * name-lookup.c (do_class_using_decl): Adjust.
+ (lookup_name_fuzzy, lookup_name_real_1): Likewise.
+ * parser.c (cp_lexer_get_preprocessor_token,
+ cp_parser_direct_declarator): Likewise.
+ * pt.c (push_template_decl_real, tsubst_decl, tsubst_baselink,
+ tsubst_copy, tsubst_copy_and_build): Adjust.
+ * ptree.c (cxx_print_identifier): Print identifier kind.
+ * search.c (lookup_field_r, lookup_member,
+ lookup_fnfields_idx_nolazy): Adjust.
+ * semantics.c (finish_id_expression): Adjust..
+ * typeck.c (cp_build_addr_expr_1): Adjust.
+
+2017-06-21 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r249464.
+
+ gcc/c-family/
+ * c-ada-spec.c (decl_sloc): Ignore builtin fields.
+ gcc/cp/
+ * class.c (layout_class_type): Anon aggregates can never be bases.
+ (finish_struct_1, dump_class_hierarchy_1): CLASSTYPE_AS_BASE can
+ be null.
+ * cp-tree.h (enum cp_tree_index): Add CPTI_AS_BASE_IDENTIFIER.
+ (as_base_identifier): New.
+ (module_context): Declare.
+ * decl.c (initialize_predefined_identifiers): Initialize as_base.
+ * error.c (dump_module_suffix): Use module_context.
+ * mangle.c (maybe_write_module): Likewise.
+ * module.c (module_context): New.
+ (dump_nested_name): Distingush NULL context.
+ (cpms_{in,out}::globals): Take array directly.
+ (cpms_{in,out}::tree_node_raw): New, broken out of ...
+ (cpms_{in,out}::tree_node): ... here. Call it. Use
+ module_context.
+ (cpms_in::finish): Add module number. Adjust.
+ (cpms_{in,out}::tag_trees): Write translation unit decl.
+
+2017-06-16 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r249268.
+
+2017-06-15 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r249217.
+ libcc1/
+ * libcp1plugin.c (supplement_binding): Don't call
+ maybe_remove_implicit_alias.
+
+ First bug report!
+ gcc/cp/
+ * cp-tree.h (CPTI_MANGLE): New.
+ (mangle_namespace): New.
+ (maybe_remove_implicit_alias): Delete.
+ * decl.c (cxx_init_decl_processing): Create mangle namespace.
+ * decl2.c (generate_mangling_alias): Use mangle_namespace.
+ * mangle.c (maybe_remove_implicit_alias): Delete.
+ (mangle_decl): Use mangle_namespace. Remove alias here.
+ * module.c (cpms_out::bindings): Ignore mangle_namespace.
+ * name-lookup.h (set_namespace_binding): Declare.
+ * name-lookup.c (supplement_binding_1): Don't deal with implicit
+ aliases here.
+ (set_namespace_binding): New. Broken out of ...
+ (set_global_binding): ... this. Call it.
+ (suggest_alternatives_for): Ignore mangle namespace.
+ gcc/testuite/
+ * g++.dg/module/bug-1_[ab].C: New.
+
+2017-06-14 Nathan Sidwell <nathan@acm.org>
+
+ Classes complete - Vcall indices and friends added.
+ gcc/cp/
+ * module.c (cpms_{out,in}::tree_pair_vec): New.
+ (cpms_{out,in}::define_class): Stream vcall indices and friend list.
+ gcc/testsuite/
+ * g++.dg/module/class-6_[abc].C: New.
+
+2017-06-12 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r249076.
+
+2017-06-09 Nathan Sidwell <nathan@acm.org>
+
+ Vtable streaming. Change keyed_classes representation.
+ gcc/cp/
+ * class.c (finish_struct_1): Adjust keyed_classes pushing.
+ * cp-tree.h (CPTI_KEYED_CLASSES): Delete.
+ (keyed_classes): Now a vector.
+ * decl.c (keyed_classes): Define.
+ (cxx_init_decl_processing): Initialize it.
+ (record_key_method_defined): Adjust pushing.
+ * decl2.c (decl_needed_p): Formatting fixes.
+ (c_parse_final_cleanups): Reset current module.
+ Call finish_module earlier. Adjust keyed_classes iteration.
+ * pt.c (instantiate_class_template_1): Adjust keyed_classes pushing.
+ * module.c (cpms_{out,in}::define_class): Adjust key method
+ streaming.
+ (cpms_{out,in}::lang_type_bools): Don't srtream interface flags.
+ gcc/testsuite/
+ * g++.dg/modules/class-5_[abc].C: New.
+
+ Typeinfo streaming
+ gcc/cp/
+ * cp-tree.h (DECL_TINFO_P): Also for TYPE_DECLs.
+ (get_pseudo_tinfo_index, get_pseudo_tinfo_type): Declare.
+ * rtti.c (enum tinfo_kind): Add TK_DERIVED_TYPES,
+ TK_VMI_CLASS_TYPES, TK_MAX, delete TK_FIXED.
+ (tinfo_names): New.
+ (typeid_ok_p): Lool at TYPE_MAIN_VARIANT.
+ (get_pseudo_to_index): Only determine index, don't create type.
+ (get_tinfo_desc): New. Create the pseudo type. Set DCL_TINFO_P.
+ (create_pseudo_type_info): Delete.
+ (get_pseudo_ti_init): Use get_tinfo_desc.
+ (get_pseudo_tinfo_index, get_pseudo_tinfo_type): New.
+ (create_tinfo_types): Only allocate the vector.
+ * module.c (cpms_{out,in}::insert): New.
+ (cpm_stream::global_tree_arys): Add sizetype_tab.
+ (cpms_out::tag_binding): Don't stream DECL_TINFO_P bindings.
+ (cpms_{out,in}::define_class): Don't stream
+ CLASSTYPE_TYPEINFO_VAR. Stream CLASSTYPE_VTABLES.
+ (cpms_{out,in}::core_vals): Stream CONSTRUCTORs.
+ (cpms_{out,in}::tree_node): Detect DECL_TINFO_P things.
+
+2017-06-08 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (cpms_in::read_item, cpms_in::tree_node): More
+ diagnostics.
+ (cpms_{out,in}::start, cpms_{out,in}::core_vals): Fix call
+ handling.
+ gcc/testsuite/
+ * g++.dg/modules/class-4_[ab].C: New.
+
+ gcc/cp/
+ * module.c: Implement dump printf.
+
+2017-06-07 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r248972.
+
+ gcc/cp/
+ * module.c (cpms_{out,in}::core_vals): Stream block vars &
+ abstract origin.
+
+2017-06-06 Nathan Sidwell <nathan@acm.org>
+
+ Inline ctors/dtors
+ gcc/cp/
+ * module.c (cpms_in::define_function): Deal with non-namespace
+ fn definitions.
+ (cpms_{out,in}::define_class): Define member fns.
+ (cpms_in::tag_definition): Clone fn.
+ * semantics.c (expand_or_defer_fn_1): Keep cloned fns body when
+ modules.
+ gcc/testsuite/
+ * g++.dg/modules/class-3_[abcd].C: Augment.
+
+ Member functions
+ gcc/cp/
+ * class.c (resort_type_method_vec): Avoid signed/unsigned compare.
+ * module.c (cpms_out::maybe_tag_definition): New.
+ (cpms_{out,in}::tag_definition): Always tag, return tagged thing.
+ (cpms_{out,in}::chained_decls, tree_vec): New.
+ (cpms_{out,in}::define_class): Stream methods, as_base.
+ (cpms_{out,in}::core_vals): Stream ARGUMENTs here.
+ (cpms_in::tree_node): Cope with immediate definitions.
+ gcc/testsuite/
+ * g++.dg/modules/class-3_[abcd].C: Augment.
+
+ More PoD struct
+ gcc/cp/
+ * module.c (cpms_{out,in}::ident_imported_decl): New.
+ (cpms_{out,in}::lang_type_vals): New.
+ (cpms_{out,in}::core_vals): Blocks and statements.
+ (cpms_{out,in}::tree_node): More general import referencing.
+ * name-lookup.c (name_lookup::add_module_fns): New.
+ (name_lookup::adl_namespace_only): Use it.
+ gcc/testsuite/
+ * g++.dg/modules/class-3_[abc].C: New.
+
+2017-06-05 Nathan Sidwell <nathan@acm.org>
+
+ More PoD struct
+ gcc/cp/
+ * cp-tree.h (default_hash_traits): Make non-deletable.
+ (cpms_out::non_null): New hash trait.
+ (cpms_in::traits): Use simple_hashmap_traits.
+ (cpms_in::define_class, cpms_in::finish_type): Propagate
+ completeness.
+ (cpms_in::finish_type): Deal with pointer/ref to.
+ (cpms_{out,in}::core_vals): Stream ints, pointer/ref to.
+ (cpms_{out,in}::tree_node): Interstitial typedef.
+ gcc/testsuite/
+ * g++.dg/modules/class-1_[abc].C: Extend.
+ * g++.dg/modules/class-2_[ab].C: New.
+
+2017-06-02 Nathan Sidwell <nathan@acm.org>
+
+ Pod struct
+ gcc/cp/
+ * cp-tree.h (create_classtype_sorted_fields): Declare.
+ * class.c (finish_struct_1): Adjust sorted field call.
+ (insert_into_classtype_sorted_fields): Rename to ...
+ (create_classtype_sorted_fields): ... here. Export
+ * module.c (cpms_{out,in}::tree_vec): New.
+ (cpms_{out,in}::define_function): New.
+ (cpms_{out,in}::define_class): New.
+ (cpms_{out,in}::tag_definition): Adjust.
+ (cpms_{out,in}::core_vals): Stream binfo, field_decl.
+ gcc/testsuite/
+ * g++.dg/modules/class-1_[abcd].C: Add field accesses.
+
+ Merge r248828.
+
+ gcc/cp/
+ * modules.c (cpms_out::core_vals, cpms_in::core_vals): Don't
+ stream structure fields etc.
+
+2017-06-01 Nathan Sidwell <nathan@acm.org>
+
+ Incomplete or empty classes.
+ gcc/cp/
+ * cp-tree.h (ovl_iterator::export_tail): New.
+ (TYPE_GET_PTRMEMFUNC_TYPE, TYPE_SET_PTRMEMFUNC_TYPE): Delete.
+ (TYPE_PTRMEMFUNC_TYPE): New.
+ (maybe_add_lang_type_raw): Add ptrmem_p arg.
+ (fit_ptrmem_type_decl): Declare.
+ (ovl_insert): Add export_tail.
+ * decl.c (build_ptrmemfunc_type): Use fit_ptrmem_type_decl,
+ adjust.
+ (xref_tag_1): Call decl_set_module.
+ * lex.c (maybe_add_lang_type_raw): Add ptrmem_p arg. Adjust.
+ (fit_ptrmem_type_decl): New.
+ (cxx_make_type): Adjust.
+ * module.c (name_string): New. Use it everywhere.
+ (cpm_reader::fill): Check ferror.
+ (cpms_out::tag_binding): Skip builtins. Write types.
+ (cpms_out::lang_type_bools, cpms_in::lang_type_bools): New.
+ * name-lookup.c (STAT_EXPORTS): New.
+ (name_lookup::process_module_binding): Use it.
+ (update_binding): Set it.
+ (newbinding_bookkeeping): New. Broken out of ...
+ (do_pushdecl): ... here. Call it.
+ (push_module_binding): And call it here. Set STAT_EXPORTS.
+ * rtti.c (create_pseudo_type_info): Mark as builtins.
+ (get_pseudo_ti_index): Likewise.
+ (emit_support_tinfos): Use regular lookup to find type. Set
+ builtins location.
+ * tree.c (ovl_insert): Add export_tail arg.
+ gcc/testsuite/
+ * g++.dg/modules/class-1_[abcd].C: New.
+
+2017-05-31 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c: Instrumentation.
+
+ Merge trunk r248748.
+
+2017-05-30 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r248694.
+
+ gcc/cp/
+ * module.c (cpms_out::tag_binding, cpms_in::tag_binding): Mark
+ type too.
+ (cpms_out::bindings): Adjust.
+ * name-lookup.c (push_module_binding): Add type arg.
+
+ gcc/cp/
+ * cp-tree.h (lang_decl_base): Lose decomposition_p flag.
+ (lang_decl) Update GTY tags.
+ (enum lang_decl_selector): New. Replace magic consts with this.
+ (DECL_DECOMPOSITION_P): Update.
+ (SET_DECL_DECOMPOSITION_P): Delete.
+ (maybe_add_lang_decl_raw): Second arg is bool.
+ (retrofit_lang_decl): Lose selector arg.
+ (fit_decomposition_lang_decl): Declare.
+ * decl.c (cp_finish_decomp): Use fit_decomposition_lang_decl.
+ (grokdeclarator): Likewise.
+ * lex.c (maybe_add_lang_decl_raw): Change 2nd arg to bool. Don't
+ to copying here.
+ (set_decl_linkage, fit_decomposition_lang_decl): New.
+ (retrofit_lang_decl): Lose selector arg.
+ (cxx_dup_lang_specific_decl): Use selector directly.
+ * module.c (cpms_out::lang_decl_bools, cpms_in::lang_decl_bools,
+ cpms_out::lang_decl_vals, cpms_in::lang_decl_vals): Use
+ lang_decl_selector.
+ (cpms_in::tree_node): Adjust maybe_add_lang_decl call.
+
+ gcc/
+ * REVISION: Add file.
+ gcc/c-family/
+ * c-cppbuiltin.c (c_cpp_builtins): Update __cpp_modules=201704.
+
+2017-05-29 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r248578.
+
+ Merge trunk r248574.
+
+ Merge trunk r248571.
+
+2017-05-26 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r248517.
+
+ gcc/cp/
+ * cp-tree.h: Comment cleanup.
+ * name-lookup.c: Likewise.
+ * tree.c: Likewise.
+
+ Merge trunk 248485.
+ gcc/cp/
+ * lex.c (maybe_retrofit_lang_decl): Add sel parm.
+
+2017-05-25 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (ovl_iterator): Make unduplicatable.
+ (ovl_iterator::pop): New.
+ (lkp_iterator::operator++): Adjust.
+
+ Merge trunk r248454.
+
+ Merge trunk r248436.
+
+2017-05-24 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (lookup_name): Reimplement state preservation and
+ restoration.
+ * tree.c (lookup_mark): Add asserts.
+ gcc/testsuite/
+ * g++.dg/lookup/koenig14.C: New.
+
+ Merge trunk r248406.
+
+ gcc/cp/
+ * call.c (build_operator_new_call, build_new_op_1): Open code ADL
+ lookup.
+ * name-lookup.h (lookup_function_nonclass): Delete.
+ (lookup_arg_dependent): Adjust return type.
+ * name-lookup.c (name_lookup): Absorb adl_lookup.
+ (name_lookup::search_adl): New.
+ (lookup_function_nonclass): Delete.
+ (lookup_arg_dependent): Adjust.
+
+2017-05-23 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r248389.
+
+ gcc/cp/
+ * name-lookup.c (name_lookup::name_lookup): Lose F parm.
+ (name_lookup::ambiguous, add_value, add_type): New.
+ (name_lookup::merge_binding): Delete.
+ (name_lookup::find_and_mark): Move from adl_lookup.
+ (name_lookup::process_binding): Adjust.
+ (adl_lookup::search_adl): New.
+ (do_lookup_arg_dependent): Call it.
+ (qualified_namespace_lookup): Return found flag.
+ (unqualified_namespace_lookup): Delete.
+ (lookup_name_real_1, push_namepace): Adjust.
+
+ Merge trunk r248377.
+
+ Merge trunk r248365.
+
+2017-05-22 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r248338.
+ gcc/cp/
+ * name-lookup.c (add_using_namespace): Remove FROM arg.
+ (notify_debug_using_namespace): New.
+ (finish_namespace_using_directive, push_namespace): Notify debug.
+ gcc/testsuite/
+ * g++.dg/lookup/strong-using-6.C: Delete.
+
+ gcc/cp/
+ * config-lang.in: Update.
+ * name-lookup.c (add_using_directive): Rename to ...
+ (add_using_namespace): ... here. Add FROM arg.
+ (do_toplevel_using_directive): Fold into add_using_namespace.
+ (finish_namespace_using_directive, finish_local_using_directive,
+ push_namespace): Adjust.
+
+ Merge trunk r248329.
+
+ gcc/testsuite/
+ PR c++/80830
+ * g++.dg/lookup/friend20.C: New testcase.
+
+2017-05-19 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r248295.
+
+ gcc/cp/
+ * cp-tree.h: Misc cleanups.
+ * name-lookup.c (pushdecl_top_level): Fix description.
+ gcc/
+ * dumpfile.h: Whitespace cleanups.
+ * system.h (ATTRIBUTE_NTC_PURE): Delete.
+ gcc/testsuite/
+ * g++.dg/tree-ssa/ssa-dse-2.C: Restore.
+
+ Merge trunk r248285.
+
+ Merge trunk r248271.
+
+2017-05-18 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r248250.
+
+ LANG_HOOK_REGISTER_DUMPS
+ gcc/
+ * context.h (context::set_passes): New.
+ * context.c (context::context): Do not create pass manager.
+ * toplev.c (general_init): Create pass manager here. Call
+ register dump lang hook.
+ * doc/invoke.texi: Document -fdump-lang option family.
+ * dumpfile.c (dump_files): Remove module and class dumps here.
+ (FIRST_AUTO_NUMBERED_DUMP): Adjust.
+ * dumpfile.h (tree_dump_index): Remove TDI_lang, TDI_class.
+ * langhooks-def.h (lhd_register_dumps): Declare.
+ (LANG_HOOKS_REGISTER_DUMPS): Define.
+ (LANG_HOOKS_INITIALIZER): Add it.
+ * langhooks.c (lhd_register_dumps): Define.
+ * langhooks.h (struct lang_hooks): Add register_dumps.
+ gcc/c-family/
+ * c-opts.c (class_dump_file, class_dump_flags): Delete.
+ (c_common_parse_file): Remove class dump handling.
+ (get_dump_info): Likewise.
+ gcc/cp/
+ * class.c (class_dump_id): Define.
+ (dump_class_hierarchy, dump_vtable, dump_vtt): Use it.
+ * cp-objcp-common.c (cp_register_dumps): New.
+ * cp-objcp-common.h (cp_register_dumps): Declare.
+ (LANG_HOOKS_REGISTER_DUMPS): Override.
+ * cp-tree.h (class_dump_id, module_dump_id): Declare.
+ * module.c (module_dump_id): Define.
+ (read_module, write_module): Use it.
+ gcc/testsuite/
+ * g++.dg/inherit/covariant7.C: Adjust.
+ * g++.dg/modules/ Adjust scans.
+
+ gcc/cp/
+ * cp-tree.h (lookup_add, lookup_maybe_add): Swap args.
+ * name-lookup.c (name_lookup::merge_binding,
+ adl_lookup::add_functions): Adjust.
+ * pt.c (check_explicit_specialization, do_class_deduction): Adjust.
+ * tree.c (lookup_add, lookup_maybe_add): Adjust.
+
+ Merge trunk r248192.
+
+2017-05-17 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r248159.
+
+ Merge trunk r248151.
+ * cp-tree.h (ovl_insert): Swap first two args. Update all uses.
+
+ Merge trunk r248144.
+
+2017-05-16 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r248126.
+
+ Merge trunk r248121.
+
+ Merge trunk r248116.
+
+ Merge trunk r248109.
+
+2017-05-15 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r248059.
+
+ gcc/cp/
+ * module.c (cpms_in::tag_definition): Robustify.
+
+2017-05-12 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (cpms_{in,out}): Rename {read,write}_tree to tree_node.
+
+ gcc/cp/
+ * module.c (cpms_{in,out}): Rename read/write fns.
+
+ More inline bodies
+ gcc/cp/
+ * module.c (cpms_{in,out}::write_core_vals): Read/write
+ statement lists & LABEL_DECLs.
+ gcc/testsuite/
+ * g++.dg/modules/fn-inline-1_c.C: More test.
+
+ Inline function bodies
+ gcc/cp/
+ * module.c (cpms_{in,out}::write_core_vals): Read/write
+ exprs
+ (cpms_in::tag_definition): Insert inline function.
+ gcc/testsuite/
+ * g++.dg/modules/fn-inline-1_[ab].C: New.
+
+ Merge trunk r247968.
+
+ gcc/cp/
+ * module.c (cpm_reader::read_tree): Change interface, adjust callers.
+
+ gcc/cp/
+ * module.c (cpm_writer): Instrument bool distribution.
+ (cpms_out::tag_definition, cpms_in::tag_definition): New.
+ (cpms_out, cpms_in): Transfer more stuff.
+
+2017-05-11 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r247911.
+
+2017-05-10 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r247864.
+
+ Merge trunk r247834.
+
+2017-05-09 Nathan Sidwell <nathan@acm.org>
+
+ Rename -fdump-front-end to -fdump-lang.
+ gcc/
+ * dumpfile.h (TDF_KIND_MASK, TDF_KIND): New. Adjust.
+ * dumpfile.c (dump_files): Rename file suffix.
+ (get_dump_file_name, dump_enable_all): Adjust.
+ * doc/invoke.texi: Rename option.
+ gcc/testsuite/
+ * g++.dg/modules: Adjust tests.
+
+ gcc/cp/
+ * module.c (cpms_in::finish): Merge global decls.
+ (cpms_in::finish_function, cpms_in::finish_namespace): Delete.
+ * name-lookup.h (push_module_namespace): Replace with ...
+ (merge_global_decl): ... this.
+ * name-lookup.c (push_module_namespace): Morph into ...
+ (merge_global_decl): ... this.
+ (push_module_binding): Don't re-add found things.
+
+ gcc/
+ * tree.h (TREE_CHECK6, tree_check6): Delete.
+
+ Merge trunk r247787.
+ gcc/cp/
+ * tree.c (type_has_nontrivial_copy_init): Use ovl_iterator.
+
+ Error message module designation.
+ gcc/cp/
+ * error.c (dump_module_suffix): New.
+ (dump_simple_decl, dump_function_name): Use it.
+ gcc/testsuite/
+ * g++.dg/modules/err-1_[abcd].C: New.
+
+2017-05-08 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r247749.
+
+ Implement 'export module foo;'
+ gcc/cp/
+ * cp-tree.h (declare_module): Add interface flag.
+ (import_export_module): Rename to ...
+ (import_module): ... here. Lose export flag.
+ * module.c (import_module): Determine exportness from export
+ depth.
+ (declare_module): Add interface flag, don't check attribs.
+ * parser.c (check_module_outermost): Don't check export depth.
+ (cp_parser_module_declaration): Don't deal with imports.
+ (cp_parser_import_declaration): New.
+ (cp_parser_module_export, cp_parser_declaration): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/import-1_[a-g].C: New.
+
+ Implement DR2061
+ gcc/cp/
+ * name-lookup.c (push_inline_namespace): New.
+ (push_namespace): Use it. Check inline consistency here ...
+ * parser.c (cp_parser_namespace_definition): ... not here.
+ gcc/testsuite/
+ * g++.dg/cpp0x/dr2061.C: New.
+ * g++.dg/parse/namespace-alias-1.C: Augment.
+
+ gcc/cp/
+ * cp-tree.h, call.c, class.c, name-lookup.c, parser.c, pt.c,
+ semantics.c, tree.c: Rename ovl2_iterator to lkp_iterator.
+
+ gcc/cp/
+ * name-lookup.h (push_namespace): Return int.
+ * name-lookup.c (push_namespace): Return count of depth pushed.
+ * parser.c (cp_parser_namespace_definition): Accumulate depth pushed.
+
+2017-05-05 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r247654.
+
+ Merge trunk r247646.
+
+ Merge trunk r247636.
+
+ Indirect import lookup by tagging
+ gcc/cp/
+ * cp-tree.h (MAYBE_DECL_MODULE_INDEX): New.
+ (DECL_GLOBAL_MODULE_P, DECL_THIS_MODULE_P): Delete.
+ * mangle.c (maybe_write_module): Adjust.
+ * module.c (cpms_out::write_tree, cpms_in::read_tree): Mark
+ imported decls by tag.
+ * name-lookup.h (key_module_instance, find_module_instance): Declare.
+ * name-lookup.c (module_binding_slot): Allow search only.
+ (key_module_instance): New.
+ (find_module_instance): Use key.
+ gcc/testsuite/
+ * g++.dg/modules/mod-indirect-1_[a-e].C: New.
+
+2017-05-04 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r247612.
+ gcc/testsuite/
+ * g++.dg/lookup/using17.C: Adjust error message.
+
+ Overload bindings
+ gcc/cp/
+ * module.c (cpms_in::tag_binding, cpms_out::tag_binding): Binding
+ can be overload.
+ (cpms_out::write_bindings): Write whole slot.
+ (cpms_in::finish): Look for import match.
+ (cpms_in::read_lang_decl_bools, cpms_out::write_lang_decl_bools,
+ cpms_in::read_lang_decl_vals, cpms_out::write_lang_decl_vals):
+ Implement.
+ * name-lookup.c (push_module_binding): Binding can be overload.
+ (find_module_instance): New.
+ * name-lookup.h (find_module_instance): Declare.
+ gcc/testsuite/
+ * g++.dg/modules/mod-impl-1_[abcd]: Add overloads.
+
+2017-05-03 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r247593.
+
+ gcc/cp/
+ * cp-tree.h (LOOKUP_SEEN_P): Map to TREE_VISITED.
+ (LOOKUP_FOUND_P, OVL_LOOKUP_P): Move to lang_flag_4
+
+ Modules via index, working again!
+ gcc/cp/
+ * module.c (cpms_in::tag_binding): Set module index.
+ gcc/testsuite/
+ * g++.dg/modules/mod-impl-1_a.C: Remove xfail.
+
+ Namespace partitions.
+ gcc/cp/
+ * cp-tree.h (MODULE_NAMESPACE_P, GLOBAL_MODULE_NAMESPACE_P,
+ CURRENT_MODULE_NAMESPACE_P): Delete.
+ (pop_module_namespace, push_module_namespace): Delete.
+ * module.c (cpms_out::write_bindings, cpms_in::finish_namespace):
+ Remove module namespace hacks.
+ (push_module_namespace, pop_module_namespace): Delete.
+ (module_to_ext): Swallow into ...
+ (module_to_filename): ... here.
+ (declare_module): Don't create module namespace symbol.
+ * name-lookup.c (module_binding_slot): Fixup global module
+ insertion.
+ (is_nested_namespce, is_ancestor): Remove module namespace hacks.
+ * parser.c (check_module_outermost, cp_parser_module_export,
+ cp_parser_module_proclamation,
+ cp_parser_namespace_definition): Likewise
+ gcc/testsuite/
+ * g++.dg/modules/mod-sym-[123].C: Remove xfails.
+ * g++.dg/modules/mod-impl-1_a.C: Revert to run test.
+
+ Namespace partitions.
+ gcc/cp/
+ * cp-tree.h (OVL_EXPORT_P): New. Move OVL_LOOKUP_P.
+ (DECL_MODULE_EXPORT_P): Allow any DECL.
+ (module_import_bitmap): Declare.
+ * decl.c (cxx_init_decl_processing): Export global_namespace.
+ * module.c (module_import_bitmap): New.
+ (do_module_import): Install as global module, if needed.
+ (declare_module): Freeze global imports.
+ * name-lookup.c: Include bitmap.h.
+ (name_lookup::process_binding): Take split bindings.
+ (name_lookup::process_module_binding): New.
+ (name_lookup::search_namespace_only): Adjust.
+ * tree.c (ovl_insert): Sort by export_p too.
+
+ Merge trunk r247550.
+
+ Namespace partitions.
+ gcc/cp/
+ * cp-tree.h (MODULES_PER_BINDING_CLUSTER): Delete.
+ (MODULE_VECTOR_NUM_CLUSTERS, MODULE_VECTOR_CLUSTER_BASE,
+ MODULE_VECTOR_CLUSTER_LAST, MODULE_VECTOR_CLUSTER): New.
+ (make_module_vec): Declare.
+ * module.c (cpms_out::write_bindings): Look into MODULE_VECTOR.
+ * name-lookup.c (modue_binding_slot): New.
+ (name_lookup::merge_binding, name_lookup::process_binding): New.
+ (name_lookup::search_qualified): Add usings parm.
+ (name_lookup::search_namespace_only): Look into MODULE_VECTOR.
+ (do_pushdecl): Create module slot.
+ (find_namespace_partition): New, from ...
+ (push_module_namespace): ... here. Call it.
+ (push_module_binding): Create module slot.
+ (push_namespace): Adjust.
+ * ptree.c (cxx_print_xnode): Print MODULE_VECTOR.
+ * tree.c (make_module_vec): New.
+
+2017-05-02 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (saved_scope): Add this_module.
+ (current_module): New.
+ * module.c (cpms_in): Add remapping vector. Remove scope.
+ (cpms_in::tag_import): Update remapping vector.
+ (cpms_out::tag_binding, cpms_in::tag_binding): Write/read module no.
+ * name-lookup.c (do_push_to_top_level): Set current_module.
+
+ gcc/doc/
+ * invoke.texi (-fdump-front-end): Document.
+
+ Read/write direct namespace bindings part 2.
+ gcc/cp/
+ * module.c (cpms_out::tag_binding): Write the tag.
+ (cpms_in::read_item): Detect rt_binding, set modules slot.
+ (cpms_out::write_context_binding): Delete.
+ (cpms_out::write_bindings): Simplify.
+ (cpms_in::finish_function): Don't push function here.
+ (cpms_in::finish_namespace): Adjust.
+ (do_module_import): Adjust.
+ * name-lookup.h (push_module_namespace): Declare.
+ * name-lookup.c (push_module_namespace): New.
+
+ Read/write direct namespace bindings part 1.
+ gcc/cp/
+ * cp-tree.def (module_vector): New tree type.
+ * cp-tree.h (module_cluster, tree_module_vec): New tree.
+ (enum cp_tree_node_structure_enum): Add TS_CP_MODULE_VECTOR.
+ (lang_tree_node): Add tree_module_vec.
+ * decl.c (cp_tree_node_structure): Detect MODULE_VECTOR.
+ * module.c (cpms_out::tag_binding, cpms_in::tag_binding): New.
+ (cpms_out::write_context_binding): New.
+ (cpms_out::walk_namespace): Replace with ...
+ (cpms_out::write_bindings): ... this.
+ * name-lookup.h (push_module_binding): Declare.
+ * name-lookup.c (push_module_binding): New.
+
+2017-05-01 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * tree.c (type_hash_default): Adjust ARRAY_TYPE hash.
+
+ Import timestamp & crc
+ gcc/cp
+ * module.c (module_state): Add crc & stamp.
+ (enum import_kind): New.
+ (cpms_out::header, cpms_in::header): Check timestamps.
+ (time2str, timestamp_mismatch): New.
+ (cpms_out::tag_import, cpms_in::tag_import): Xfer indirect imports
+ too.
+ (read_module, do_module_import): Check timestamp & crc.
+ gcc/testsuite/
+ * g++.dg/modules/mod-stamp-1_[abcd].C: New.
+
+ Proper mangle for module. Still have namespace hack though.
+ gcc/cp/
+ * cp-tree.h (DECL_GLOBAL_MODULE_P, DECL_THIS_MODULE_P): Protect
+ DECL_LANG_SPECIFIC.
+ (decl_set_module, module_name, module_name_parts): New.
+ * decl.c (duplicate_decls): Check moduleness.
+ (grokfndecl): Set moduleness.
+ * mangle.c (maybe_write_module): New.
+ (write_name): Call it.
+ * module.c (module_state::set_name): New.
+ (decl_set_module, module_name, module_name_parts): New.
+ gcc/testsuite/
+ * g+.dg/modules.exp (dg-module-do, module_do_it): Adjust.
+ * g++.dg/modules/mod-impl-1_a.C: Adjust & XFAIL.
+ * g++.dg/modules/mod-impl-1_c.C: Likewise.
+ * g++.dg/modules/mod-sym-1.C: Likewise.
+ * g++.dg/modules/mod-sym-2.C: Likewise.
+ * g++.dg/modules/mod-sym-3.C: Likewise.
+
+2017-04-28 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (struct_lang_base): Add module_index. Shrink selector.
+ (DECL_MODULE_INDEX, DECL_GLOBAL_MODULE_P, DECL_THIS_MODULE_P): New.
+ (EXPORTED_P): Rename to ..
+ (DECL_EXPORTED_P): ... here.
+ * modules.c: Adjust EXPORTED_P uses.
+
+ Module indices and separated import/export info
+ gcc/cp/
+ * cp-tree.h (GLOBAL_MODULE_INDEX, THIS_MODULE_INDEX,
+ IMPORTED_MODULE_BASE): New.
+ (import_module, export_module): Replace with ...
+ (import_export_module): ... this.
+ * module.c: #include bitmap.h.
+ (enum import_kind): Delete.
+ (struct module_state): New.
+ (modules, module_map, this_module): New.
+ (imported_modules): Delete.
+ (cpms_in::state): New member. Update constructor.
+ (cpms_in::tag_import, cpms_out::tag_import): Take is_export arg.
+ (cpms_in::read_item): Assign module index.
+ (module_user, is_interface): Delete.
+ (dopen, dclose): Delete. Move to call sites.
+ (read_module): Return module index.
+ (do_module_import): Reimplement.
+ (import_module, export_module): Replace with ...
+ (import_export_module): ... this.
+ (declare_module, write_module, finish_module): Adjust.
+ * parser.c (cp_parser_module_declaration): Adjust,
+ gcc/testsuite/
+ * g++.dg/modules/mod-decl-5_b.C: Adjust.
+
+2017-04-27 Nathan Sidwell <nathan@acm.org>
+
+ Kill rt_import popping madness
+ gcc/cp/
+ * module.c (cpm_serial::rt_export): New tag.
+ (cpms_in::tag_import): Do the importing right now.
+ (cpms_in::read_item): ... not here.
+ (read_module): Pass in dump file name, open it if needed.
+
+ Kill walk_namespaces
+ gcc/cp/
+ * cp-tree.h (walk_namespaces): Delete.
+ * decl.c (walk_namespaces_r, walk_namespaces): Delete.
+
+ Rework module namespace walking
+ gcc/cp/
+ * name-lookup.h: (decapsulate_binding): Declare.
+ * name-lookup.c: (decapsulate_binding): New.
+ * module.c (cpms_out::walk_namespace): Iterate over namespace
+ bindings, not decls.
+ (imported_modules): Key by lang_identifier. Adjust
+ allocation/deletion.
+
+ Refix unhidden extern C
+ Revert 2017-04-26 extern_c_slot patch.
+ gcc/cp/
+ * name-lookup (do_pushdecl): Call check_extern_c_conflict when
+ unhiding.
+ gcc/testsuite/
+ * g++.dg/lookup/extern-c-redecl.C: Adjust.
+ * g++.dg/lookup/extern-c-hidden.C: New test.
+
+ Merge trunk r247281.
+ gcc/
+ * tree.c (type_hash_default): Hash TYPE_TYPELESS_STORAGE.
+ gcc/objc/
+ * objc-gnu-runtime-abi-01.C (objc_add_static_instance): Use
+ pushdecl langhook.
+
+2017-04-26 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (extern_c_slot): New.
+ (check_extern_c_conflict): Use it.
+ (unhidden_extern_c): New.
+ (do_pushdecl): Call it.
+
+ gcc/cp/
+ * name-lookup.c (extern_c_slot): New.
+ (check_extern_c_conflict): Use it.
+ (unhidden_extern_c): New.
+ (do_puhdecl): Call it.
+
+ Die IDENTIFIER_GLOBAL_BINDINGS! Die!
+ gcc/
+ * ipa-devirt.c (default_hash_traits <type_pair>): Add GTY((skip))s.
+ gcc/cp/
+ * cp-tree.h (lang_identifier): Remove namespace_bindings.
+ (default_hash_traits<lang_identifier *>): Specialization.
+ (IDENTIFIER_NAMESPACE_BINDINGS): Delete.
+ (lang_decl_ns): Add bindings map.
+ (DECL_NAMESPACE_BINDINGS): New.
+ * lex.c (maybe_add_lang_decl_raw): Allocate namespace binding map.
+ * name-lookup.c (create_namespace_binding): Delete.
+ (find_namespace_binding): Split into ...
+ (find_or_create_namespace_slot, find_namespace_slot): ... these.
+ Update all callers.
+ (extern_c_fns): Change to identifier map.
+ * ptree.c (cxx_print_identifier): Remove IDENTIFIER_NAMESPACE_BINDINGS.
+
+2017-04-25 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (find_namespace_binding): Return slot
+ pointer. Adjust all callers.
+ (update_binding): Add slot pointer arg. Adjust.
+ (check_extern_c_conflict): Cons up list of fns.
+ (c_linkage_bindings): Use extern_c_fns map.
+
+ gcc/cp/
+ * name-lookup.c (extern_c_fns): New hash.
+ (check_extern_c_conflict): Reimplement using hash map.
+ (do_pushdecl): Move check_extern_c_conflict later.
+
+ Namespace stat hack via special overload
+ gcc/cp/
+ * name-lookup.c (STAT_HACK_P, STAT_TYPE, STAT_DECL,
+ MAYBE_STAT_DECL, MAYBE_STAT_TYPE): New.
+ (stat_hack): New.
+ (find_namespace_value, name_lookup::search_namespace_only,
+ update_binding, do_pushdecl, set_identifier_type_value_with_scope,
+ set_global_value, lookup_type_scope_1, do_pushtag): Adjust.
+
+2017-04-24 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (add_local_decl): Delete.
+ (name_lookup::add): Fold into ...
+ (name_lookup::search_namespace_only): ... here.
+ (update_binding): Allow pushing the same artificial type.
+ (do_pushdecl): Explicitly set namespace type.
+ (push_local_binding): Use add_decl_to_level.
+ (set_identifier_type_Value_with_scope): Use update_binding for
+ namespaces.
+
+ gcc/cp/
+ * name-lookup.c (do_nonmember_using_decl): Pass in pointers to
+ value and type nodes.
+ (do_local_using_directive): Use current_binding_level directly.
+ (do_toplevel_using_directive): Adjust.
+ (lookup_type_current_level): Delete.
+
+ gcc/cp/
+ * name-lookup.c (diagnose_name_conflict): Check decl context.
+ (do_nonmember_using_decl): Simplify.
+ gcc/testsuite/
+ * g++.dg/lookup/using13.C: Adjust error.
+ * g++.dg/lookup/using59.C: Likewise,
+
+ gcc/cp/
+ * cp-tree.h (SET_IDENTIFIER_GLOBAL_VALUE): Update.
+ * name-lookup.h (set_namespace_value): Rename to ....
+ (set_global_value): ... here.
+ * name-lookup.c (update_namespace_binding): Delete.
+ (set_namespace_value): Rename to ....
+ (set_global_value): ... here. Update binding directly.
+
+2017-04-20 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (ovl_lookup_keep, ovl_lookup_mark, ovl_lookup_add,
+ ovl_lookup_maybe_add): Rename to ...
+ (lookup_keep, lookup_mark, lookup_add, lookup_maybe_add): ... these.
+
+ Keep overloads correctly ordered
+ gcc/cp/
+ * cp-tree.h (ovl_iterator::unhide): Reimplement.
+ (ovl_iterator::replace, ovl_iterator::ovl_unhide): Delete.
+ (ovl_iterator::remove_node, ovl_iterator::unhide_node): Declare.
+ (ovl_insert, ovl_lookup_maybe_add): Declare.
+ * name-lookup.c (adl_lookup::add_functions): Adjust.
+ (do_lookup_arg_dependent): Adjust.
+ (do_nonmember_using_decl): Adjust.
+ * pt.c (make_constrained_auto, do_class_deduction): Adjust.
+ * tree.c (ov_move_unhidden, ovl_add): Delete.
+ (ovl_copy, ovl_insert): New.
+ (ovl_iterator::unhide_node, ovl_iterator::remove_node): New.
+ (ovl_lookup_mark, ovl_lookup_add): Adjust.
+ (ovl_lookup_maybe_add): New.
+ (ovl_lookup_keep, ovl_skip_hidden): Adjust.
+ (ovl_iterator::ovl_unhide, ovl_iterator::replace): Delete.
+ * class.c (add_method): Adjust.
+
+2017-04-14 Nathan Sidwell <nathan@acm.org>
+
+ Kill per-namespace static_decls.
+ gcc/cp/
+ * cp-tree.h (static_decls): Declare.
+ (wrapup_globals_for_namespace,
+ diagnose_inline_vars_for_namespace): Replace with ...
+ (wrapup_namespace_globals): ... this.
+ * decl.c (static_decls): Define.
+ (wrapup_globals_for_namespace,
+ diagnose_inline_vars_for_namespace): Replace with ...
+ (wrapup_namespace_globals): ... this.
+ (cxx_init_decl_processing): Initialize static_decls.
+ * decl2.c (c_parse_final_cleanups): Adjust.
+ * name-lookup.h (cp_binding_level): Remove static_decls member.
+ * name-lookup.c (add_decl_to_level): Adjust.
+ (begin_scope): Adjust.
+
+ Merge namespace and local scope binding update
+ gcc/cp/
+ * name-lookup.c (add_namespace_decl): Delete.
+ (namespace_push_binding, local_push_binding): Merge into ...
+ (update_binding): ... this.
+ (do_pushdecl): Adjust.
+
+2017-04-13 Nathan Sidwell <nathan@acm.org>
+
+ Cleanups
+ gcc/cp/
+ * lex.c (unqualified_name_lookup_error): Use pushdecl.
+ * name-lookup.h (push_local_binding): Delete.
+ * name-lookup.c (add_decl_to_level): New, combining
+ add_namespace_decl, add_local_decl.
+ (namespace_push_binding, local_push_binding): Adjust.
+ (do_pushdecl): Adjust.
+ (push_local_binding): Make static.
+
+ Unify binding push part 7
+ gcc/cp/
+ * name-lookup.c (namespace_push_binding): Merge duplicate code
+ from local_push_binding. Chain the decl.
+ (do_pushdecl): Adjust.
+
+ Cleanup pushdecl interface
+ gcc/cp/
+ * cp-lang.c (cxx_pushdecl): New.
+ (LANG_HOOKS_PUSHDECL): Override.
+ * name-lookup.h (pushdecl): Remove overload. Add default arg.
+ * name-lookup.c (pushdecl): Likewise.
+ gcc/c/
+ * c-tree.h (pushdecl): Declare.
+ gcc/c-family/
+ * c-common.c (c_register_builtin_type): Use pushdecl lang hook.
+ * c-common.h (pushdecl): Don't declare.
+
+ Some cleanups
+ gcc/cp/
+ * name-lookup.c (update_local_overload): Drop oldval parm.
+ (replace_local_overload_binding): Delete. Fold into only caller.
+ (fixup_unhidden_decl): Likewise.
+ (augment_local_overload_binding): Likewise.
+
+ Unifying binding push part 6
+ gcc/cp/
+ * name-lookup.c (find_local_binding): New. Broken out of ...
+ (find_local_value): ... this. Use it.
+ (update_local_overload): New. Broken out of ...
+ (replace_local_overload_binding): ... this. Use it.
+ (do_pushdecl): Keep local binding around.
+ (local_push_binding): Consume supplement_binding, add_local_decl.
+
+ Unifying binding push part 5
+ gcc/cp/
+ * name-lookup.c (skip_anticipated_builtins): Kill.
+ (namespace_push_binding): Consume supplement_binding.
+ (do_pushdecl): Skip hidden builtin here. Adjust.
+ gcc/testsuite/
+ * g++.dg/lookup/using59.C: New.
+
+2017-04-12 Nathan Sidwell <nathan@acm.org>
+
+ Unifying binding push part 4
+ gcc/cp/
+ * name-lookup.c (namespace_push_binding, local_push_binding):
+ Don't dup decls here. Deal with using.
+ (do_pushdecl): Adjust.
+ gcc/testsuite/
+ * g++.dg/lookup/using58.C: New.
+
+ Unifying binding push part 3
+ gcc/cp/
+ * name-lookup.c (create_local_binding) New.
+ (do_local_push_overload): Turn into ...
+ (local_push_binding): ... this.
+ (do_pushdecl): Adjust.
+
+ Unifying binding push part 2
+ gcc/cp/
+ * name-lookup.c (create_namespace_binding) New.
+ (find_namespace_binding): Use it.
+ (do_namespace_push_overload): Convert to ...
+ (namespace_push_binding): ... this.
+ (do_pusdecl): Adjust
+
+ Unifying binding push part 1
+ gcc/cp/
+ * name-lookup.c (do_pusdecl): Skip using decls. Retain namespace.
+
+2017-04-11 Nathan Sidwell <nathan@acm.org>
+
+ Separating namespace bindings part 15
+ gcc/cp/
+ * cp-tree.h (PUSH_GLOBAL, PUSH_LOCAL, PUSH_USING): Delete.
+ * lex.c (unqualified_name_lookup_error): Adjust push_local_binding
+ call.
+ * name-lookup.h (push_local_binding): Flags is now bool.
+ * name-lookup.c (matching_using_decl_p): Rename to ...
+ (matching_fn_p): ... here. Update callers.
+ (set_local_extern_decl_linkage): New. Broken out of ...
+ (do_pushdecl): ... here. Call it.
+ (push_local_binding, augment_local_overload_binding,
+ do_local_push_overload, do_local_using_decl): Flags is now bool.
+ gcc/testsuite/
+ * g++.dg/lookup/extern-redecl1.C: New.
+ * g++.dg/parse/ctor9.c: tweak.
+
+ Separating namespace bindings part 14
+ gcc/cp/
+ * friend.c (do_friend): Use pushdecl directly.
+ * name-lookup.h (lookup_name_innermost_nonclass_level): Delete.
+ * name-lookup.c (find_local_value): New. Broken out of ...
+ (lookup_name_innermost_nonclass_level_1): ... here. Call
+ it. Rename to ...
+ (lookup_name_innermost_nonclass_level): ... this. Delete external
+ entry point.
+ (do_pushdecl): Start handling binding levels directly. Check
+ local class friend injection rule. More cleanup.
+ gcc/testsuite/
+ * g++.dg/lookup/friend12.C: Augment & adjust.
+ * g++.old-deja/g++.jason/scoping12.C: Adjust.
+
+ Separating namespace bindings part 13
+ gcc/cp/
+ * name-lookup.c (do_pushdecl): Some cleanups.
+
+ Separating namespace bindings part 12
+ gcc/cp/
+ * name-lookup.c (do_pushdecl): Move overload pushing next to
+ non-overload pushing.
+
+2017-04-10 Nathan Sidwell <nathan@acm.org>
+
+ Separating namespace bindings part 11
+ gcc/cp/
+ * name-lookup.c (check_local_shadow): Move lookup code to here ...
+ (do_pushdecl): ... from here.
+
+ Separating namespace bindings part 10
+ gcc/cp/
+ * name-lookup.c (do_pushdecl): Reorder & delete more obsolete code.
+
+ Separating namespace bindings part 9
+ gcc/cp/
+ * name-lookup.c (do_pushdecl): Delete a tonne of obsolete code.
+
+2017-04-07 Nathan Sidwell <nathan@acm.org>
+
+ Fix bogus scope handling
+ gcc/cp/
+ * call.c (make_temporary_var_for_ref_to_temp): Push temp into
+ current scope.
+ * decl.c (xref_tag_1): Pass ts_lambda to pushtag.
+ * name-lookup (do_pushtag): Deal with ts_lambda scope.
+ gcc/testsuite
+ * g++.dg/cpp0x/forw_enum9.C: Fix testcase.
+
+2017-04-06 Nathan Sidwell <nathan@acm.org>
+
+ Separating namespace bindings part 8
+ gcc/cp/
+ * name-lookup.c (do_pushdecl): Kill obsolete C-era code!
+
+ Separating namespace bindings part 7
+ gcc/cp/
+ * name-lookup.c (check_local_shadow, set_decl_context_in_fn): Break
+ out and simplify from ...
+ (do_pushdecl): ... here. Call them.
+
+ Separating namespace bindings part 6
+ gcc/c-family/
+ * c-common.h (pushdecl_top_level): Delete.
+ gcc/cp/
+ * name-lookup.h (pushdecl_top_level): Delete non-friendly version.
+ * name-lookup.c (check_extern_c_conflict): New.
+ (lookup_extern_c_fun_in_all_ns): Delete.
+ (do_pushdecl): Call it. Rename variables sanely.
+ (pushdecl_top_level): Delete non-friendly version.
+
+2017-04-05 Nathan Sidwell <nathan@acm.org>
+
+ Separating namespace bindings part 5
+ gcc/cp/
+ * name-lookup.h (getdecls): Rename to ...
+ (get_local_decls): ... here.
+ * name-lookup.c (pop_bindings_and_leave_scope): Adjust.
+ (do_pushdecl): Add some asserts.
+ (getdecls): Rename to ...
+ (get_local_decls): ... here. Assert local scope.
+ * decl.c (poplevel): Adjust.
+ (start_preparsed_function): Don't set current_function_decl, until
+ decl is pushed.
+ (store_parm_decls): Adjust.
+ * parser.c (synthesize_implicit_template_parm): Adjust.
+
+ Separating namespace bindings part 4
+ gcc/cp/
+ * cp-lang.c (LANG_HOOKS_GETDECLS): Override.
+ (get_global_decls): New.
+ * decl.c (poplevel): Assert not in namespace. Simplify.
+ * name-lookup.c (pop_binding): Rename to ...
+ (pop_local_binding): ... here.
+ (pop_bindings_and_leave_scope): Adjust.
+ (getdecls): Assert not in namespace.
+ * name-lookup.h (pop_binding): Rename to ...
+ (pop_local_binding): ... here.
+
+ Separating namespace bindings part 3
+ gcc/cp/
+ * name-lookup.c (do_local_push_overload): New, split out of ...
+ (push_overloaded_decl_1): ... this. Delete.
+ (push_overloaded_decl): Delete.
+ (do_pushdecl): Adjust.
+
+ Separating namespace bindings part 2
+ gcc/cp/
+ * name-lookup.c (compparms_for_decl_and_using_decl): Replace with ...
+ (matching_using_decl_p): ... this.
+ (do_namespace_push_overload): New, split out of ...
+ (push_overloaded_decl_1): ... this.
+ (do_pushdecl): Adjust.
+ (do_nonmember_using_decl): Adjust.
+
+2017-04-04 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.h (get_global_value_if_present,
+ is_typename_at_global_scope): Delete.
+ * class.c (build_vtbl_initializer): Adjust.
+ * decl.c (grokdeclarator)
+ * except.c (do_get_exception_ptr, do_begin_catch, do_end_catch,
+ do_allocate_exception, do_free_exception, build_throw): Adjust.
+ * init.c (throw_bad_array_new_length): Adjust.
+ * rtti.c (throw_bad_cast, throw_bad_typeid): Adjust.
+
+ gcc/cp/
+ * cp-tree.h (CPTI_INIT_LIST_IDENTIFIER, init_list_identifier): New.
+ * decl.c (initialize_predefined_identifiers): Initialize
+ initializer_list identifier.
+ * call.c (is_std_init_list): Adjust.
+ * name-lookup.c (do_pushtag): Likewise.
+ * pt.c (listify): Likewise.
+
+ Separating namespace bindings part 1
+ gcc/cp/
+ * name-lookup.h (namespace_binding, set_namespace_binding):
+ Replace with ...
+ (get_namespace_value, set_namespace_value): ... these.
+ (get_global_value_if_present, is_typename_at_global_scope): Adjust.
+ * cp-tree.h (IDENTIFIER_GLOBAL_VALUE,
+ SET_IDENTIFIER_GLOBAL_VALUE): Adjust.
+ (IDENTIFIER_NAMESPACE_VALUE, SET_IDENTIFIER_NAMESPACE_VALUE): Delete.
+ * pt.c (listify): Use get_namespace_value.
+ * decl.c (poplevel): Use get_namespace_value.
+ * name-lookup.c (cp_binding_level_find_binding_for_name): Replace
+ with ...
+ (find_namespace_binding): ... this.
+ (update_namespace_binding, find_namespace_value,
+ add_namespace_decl, add_local_decl): New.
+ (name_lookup::search_namespace_only,
+ adl_lookup::assoc_namespace_only): Adjust.
+ (binding_for_name, add_decl_to_level): Delete.
+ (fixup_unhidden_decl, do_pushdecl, push_local_binding,
+ check_for_out_of_scope_variable,
+ set_identifier_type_value_with_scope, push_overloaded_decl_1): Adjust.
+ (namespace_binding_1, namespace_binding): Replace with ...
+ (get_namespace_value): ... this.
+ (set_namespace_binding_1, set_namespace_binding): Replace with ...
+ (set_namespace_value): ... this.
+ (do_toplevel_using_decl, lookup_type_scope_1,
+ lookup_name_innermost_nonclass_level_1, do_push_nested_namespace,
+ push_namespace): Adjust.
+
+2017-04-03 Nathan Sidwell <nathan@acm.org>
+
+ Merge trunk r246647.
+ gcc/cp/
+ * pt.c (): Adjust guiding decl code.
+ libcc1/
+ * libcp1plugin.cc (safe_pushdecl_maybe_friend): Adjust.
+ (plugin_make_namespace_inline): Adjust.
+ (plugin_add_using_namespace): Likewise.
+
+ Remove usings graph.
+ gcc/cp/
+ * cp-tree.h (lang_decl_ns): Replace tree list ns_using, ns_users
+ with tree vector usings & inlinees.
+ (DCL_NAMES_SPACE_USING, DECL_NAMESPACE_INLINEES): Update.
+ (TREE_INDIRECT_USING): Delete.
+ * decl.c (cxx_init_decl_processing): Tweak.
+ * name-lookup.h (cp_binding_level): using_directives is a vec.
+ * name-lookup.c (name_lookup::do_queue_usings, queue_usings,
+ search_namespace, search_usings, queue_namespace,
+ search_unqualified, assoc_namespace_only): inlinees and usings are
+ vectors. Remove old TREE_LIST code.
+ (namespace_ancestor_1, namespace_ancestor, add_using_namespace_1,
+ add_using_namespace): Delete.
+ (qualified_namespace_lookup): Tweak.
+ (add_using_directive): New.
+ (do_toplevel_using_directive, do_local_using_directive): Adjust.
+ (push_namespace): Adjust.
+ * tree.c (decl_anon_ns_mem_p): Reimplement.
+ (cp_free_lang_data): Update.
+
+2017-03-31 Nathan Sidwell <nathan@acm.org>
+
+ Reimplement unqualified namespace lookup
+ gcc/cp/
+ * name-lookup.c (name_lookup::state, name_lookup::preserve_state,
+ name_lookup::restore_state): New.
+ (name_lookup::queue_namespace,
+ name_lookup::do_queue_usings, name_lookup::queue_usings,
+ name_lookup::search_unqualified): New.
+ (unqualified_namespace_lookup_1): Kill.
+ (unqualified_namespace_lookup): Adjust.
+ (lookup_using_namespace): Kill.
+ gcc/testsuite/
+ * g++.dg/lookup/lambda1.C: New.
+
+ gcc/cp/
+ * name-lookup.c (name_lookup::scopes): Make static. Adjust uses.
+ (name_lookup::search_namespace_only): Broken out of ...
+ (name_lookup::search_namespace): ... here. Call it.
+ * tree.c (ovl_cache): New.
+ (ovl_make, ovl_lookup_keep): Use it.
+
+2017-03-30 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * dump.c (cp_dump_tree): Allow nested overloads.
+
+ Add SCOPE_DEPTH
+ gcc/cp/
+ * cp-tree.h (SCOPE_DEPTH): New.
+ * decl.c (cxx_init_decl_processing): Set current_namespace.
+ * name-lookup.h (is_nested_namespace): Declare.
+ (is_associated_namespace): Delete.
+ * name-lookup.c (is_nested_namespace): New.
+ (is_ancestor): Use is_nested_namespace for namespaces.
+ (set_decl_namespace): Use is_nested_namespace.
+ (namespace_ancestor_1): Likewise.
+ (is_associated_namespace): Delete.
+ (push_namespace): Set SCOPE_DEPTH.
+ * pt.c (check_specialization_namespace): Use is_nested_namespace.
+ (check_unqualified_spec_or_inst): Likewise.
+
+ Reimplement qualified namespace lookup
+ gcc/cp/
+ * name-lookup.c (cp_binding_level_find_binding_for_name): Remove
+ premature optimiation.
+ (find_binding): Delete.
+ (name_lookup): Add flags, move scopes from adl_lookup.
+ (name_lookup::search_namespace, search_usings, search_qualified): New.
+ (tree_vec_contains): Kill.
+ (qualified_namespace_lookup): Kill old O(N^2) code.
+
+ gcc/cp/
+ * pt.c (determine_specialization): Use 2-d iterator
+
+2017-03-29 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * cp-tree.h (LOOKUP_MARKED_P, RECORD_MARKED_P): Rename to ...
+ (LOOKUP_SEEN_P, LOOKUP_FOUND_P): ... here. Update everywhere.
+
+ gcc/cp/
+ * name-lookup.c (arg_assoc::assoc_expr): Refactor.
+ (do_lookup_arg_dependent): Renamed from lookup_arg_dependent_1.
+ (lookup_arg_dependent): Adjust.
+ (qualified_namespace_lookup): Renamed from
+ qualified_lookup_using_namespace.
+
+ Kill DECL_NAMESPACE_ASSOCATIONS
+ gcc/cp/
+ * cp-tree.h (DECL_NAMESPACE_INLINE_P): Renamed.
+ (DECL_NAMESPACE_ASSCIATIONS): Delete.
+ (DECL_NAMESPACE_INLINEES): New.
+ * name-lookup.c (adl_lookup::assoc_namespace_only): New.
+ (adl_lookup::assoc_namespace): Find parent, walk from there.
+ (is_associated_namespace): Walk inline namespace tree.
+ (push_namepace): Add to INLINEES not ASSOCIATIONS.
+
+ gcc/cp/
+ * lambda.c (maybe_add_lambda_conv_op): Use namespace_bindings_p.
+ * method.c (implicitly_declare_fn): Likewise.
+ * search.c (node_debug_info_needed): Likewise.
+
+ gcc/cp/
+ * name-lookup.h (finish_namespace_using_directive): Rename from
+ ...
+ (finish_toplevel_using_directive): ... here.
+ * name-lookup.c: Likewise.
+ * parser.c (cp_parser_using_directive): Adjust.
+
+2017-03-28 Nathan Sidwell <nathan@acm.org>
+
+ Cleanup pushdecl_top_level
+ gcc/cp/
+ * cp-tree.h (pushdecl_top_level_maybe_friend,
+ pushdecl_top_level_and_finish): Delete.
+ * decl.c (cp_make_fname_decl): Adjust.
+ * decl2.c (get_guard, handle_tls_init): Likewise.
+ * pt.c (tsubst_friend_class): Likewise.
+ * rtti.c (get_tinfo_decl, tinfo_base_init): Likewise.
+ * name-lookup.h (pushdecl_top_level, pushdecl_top_level_init): Declare.
+ * name-lookup.c (pushdecl_top_level_1): Rename to ...
+ (push_decl_top_level): ... here.
+ (pushdecl_top_level_init): New.
+ (pushdecl_top_level_maybe_friend): Delete.
+ (pushdecl_top_level_and_finish): Delete.
+
+ Cleanup pushdecl
+ gcc/cp/
+ * cp-tree.h (pushdecl, pushdecl_maybe_friend): Delete.
+ (pushtag): Delete.
+ * decl.c (cp_make_fname_decl): Call pushdecl_outermost_localscope.
+ * lambda.c (insert_capture_proxy): Likewise.
+ * friend.c (do_friend): Call overloaded pushdecl.
+ * name-lookup.h (pushdecl_with_scope): Delete.
+ (pushdecl, pushtag, pushdecl_outermost_localscope): Declare.
+ * name-lookup.c (pushdecl_maybe_friend_1): Rename to ...
+ (do_pushdecl): ... here.
+ (pushdecl_maybe_friend): Replace with overloaded pushdecl.
+ (pushdecl): Adjust.
+ (pushdecl_with_scope_1): Rename to do_pushdecl_with_scope. Adjust.
+ (pushdecl_with_scope): Delete.
+ (pushdecl_outermost_localscope): New.
+ (pushdecl_namespace_level): Adjust.
+ (do_pushtag): Renamed from pushtag_1.
+ (pushtag): Adjust.
+
+ Cleanup namespace push/pop part 2
+ gcc/cp/
+ * module.c (cpms_in::finish_namespace): Adjust.
+ (push_module_namespace): Adjust.
+ * name-lookup.c (push_namespace, pop_namespace): Reimplement.
+ (make_namespace_inline): Delete.
+ * name-lookup.h (push_namespace): Change prototype.
+ * parser.c (cp_parser_namespace_definition): Adjust.
+
+ Cleanup namespace push/pop part 1
+ gcc/cp/
+ * cp-tree.h (CPTI_GLOBAL, CPTI_GLOBAL_IDENTIFIER, CPTI_GLOBAL_TYPE,
+ CPTI_ANON_IDENTIFIER): New.
+ (global_namespace, global_identifier, global_type_node,
+ anon_identifier): New.
+ * decl.c (global_type_node, global_scope_name): Delete.
+ (initialize_predefined_identifiers): Add new idents.
+ (cxx_init_decl_processing): Adjust.
+ * name-lookup.h (global_namespace, global_scope_name,
+ global_type_node): Delete.
+ * name-lookup (global_namespace, anonymous_namespace_name,
+ get_anonomous_namespace_name): Delete.
+ (do_push_nested_namespace, do_pop_nested_namespace): New.
+ (push_nested_namespace, pop_nested_namespace): Reimplement.
+
+ Cleanup using-directives
+ gcc/cp/
+ * cp-tree.h (LOOKUP_MARKED_P): Rename from NAME_MARKED_P, update all.
+ * name-lookup.h (finish_toplevel_using_directive,
+ finish_local_using_directive): Declare.
+ (do_using_directive, parse_using_directive): Delete.
+ * name-lookup.c (do_using_directive): Delete.
+ (do_toplevel_using_directive): Reimplement.
+ (do_local_using_directive, do_local_using_directive_1): New.
+ (parse_using_directive): Delete.
+ (push_using_directive, push_using_directive_1): Delete.
+ (finish_toplevel_using_directive, finish_local_using_directive): New.
+ * pt.c (tsubst_expr): Adjust.
+ * parser.c (cp_parser_using_directive): Adjust.
+
+ Kill strong using
+ gcc/
+ * doc/extend.texi (Namespace Association): Document removal.
+ gcc/cp/
+ * name-lookup (parse_using_directive): Remove strong handling.
+ gcc/testsuite/
+ * g++.dg/lookup/strong-using-6.C: New.
+
+2017-03-27 Nathan Sidwell <nathan@acm.org>
+
+ Simplify ADL part 2
+ gcc/cp
+ * cp-tree.h (RECORD_MARKED_P): New.
+ * tree.c (ovl_lookup_keep): Allow NULL.
+ * name-lookup.c (struct adl_lookup): New.
+ (struct arg_lookup): Delete.
+
+2017-03-24 Nathan Sidwell <nathan@acm.org>
+
+ gcc/
+ * tree.h (TREE_CHECK6): New.
+ (tree_check6): New.
+ gcc/cp/
+ * cp-tree.h (NAME_MARKED_P): Add UNION_TYPE.
+ * name-lookup.c (arg_lookup): Replace namespace & class vectors
+ with visited.
+ (arg_assoc_namespace, arg_assoc_class): Use NAME_MARKED_P.
+ (lookup_arg_dependent_1): Unmark namespaces and classes.
+
+ gcc/cp/
+ * cp-tree.h (ovl2_iterator::operator++): Tweak.
+
+ Simplify ADL part 1
+ gcc/cp/
+ * cp-tree.h (OVL_LOOKUP_P, NAME_MARKED_P): New.
+ (OVL_TRANSIENT_P): Morph into ...
+ (OVL_USED_P): ... this.
+ (ovl_add_transient): Kill.
+ (ovl_maybe_keep): Replace with ...
+ (ovl_lookup_keep): ... this.
+ (ovl_lookup_mark, ovl_lookup_add): Declare.
+ * tree.c (ovl_add): Rename arg. Set OVL_LOOKUP_P.
+ (ovl_add_transient): Kill.
+ (ovl_lookup_mark, ovl_lookup_add): New.
+ (ovl_maybe_keep): Rename to ...
+ (ovl_lookup_keep): ... this. Adjust.
+ * name-lookup.c (name_lookup::add): Use ovl_add directly.
+ (struct arg_lookup): Kill args and fn_set.
+ (add_function): Replace with ...
+ (add_functions): ... this.
+ (arg_assoc_namespace, arg_assoc_class_only): Use it.
+ (lookup_arg_dependent_1): Use new API.
+ * pt.c (tsubst_copy): Assert OVERLOAD is marked used.
+ * semantics.c (finish_call_expr): Adjust.
+
+2017-03-23 Nathan Sidwell <nathan@acm.org>
+
+ Fixup transient_p bug
+ gcc/cp/
+ * tree.c (ovl_add): Set TRANSIENT_P here.
+ (ovl_add_transient): Not here.
+
+ gcc/cp/
+ * cp-tree.h (type_unknown_p): Make inline. Lose TREE_LIST case.
+ * tree.c (type_unknown_p): Delete.
+ * name-lookup.c (arg_assoc): Lose TREE_LIST case.
+
+ gcc/cp/
+ * cp-tree.h (OVL_P, OVL_PLURAL_P): New.
+ * name-lookup.c (name_lookup::add, diagnose_name_conflict,
+ pushdecl_maybe_friend_1, push_overloaded_decl_1,
+ do_nonmember_using_decl, push_class_level_binding_1,
+ set_decl_namespace, lookup_arg_dependent_1): Use OVL_P.
+
+ Two dimensional OVERLOADs
+ gcc/cp/
+ * cp-tree.h (OVL_FIRST): Call ovl_first.
+ (ovl_iterator): Add allow_inner, adjust.
+ (ovl2_iterator): New.
+ (ovl_first): New.
+ * name-lookup.c (name_lookup::add): Create 2d overload.
+ (do_nonmember_using_decl): 2D overload.
+ (lookup_arg_dependent_1, cp_emit_debug_info_for_using): Likewise.
+ * call.c (add_candidates): Likewise.
+ * class.c (resolve_address_of_overloaded_function): Likewise.
+ * parser.c (cp_parser_template_name): Likewise.
+ * pt.c (type_dependent_expression_p): Likewise.
+ (print_candidates_1): Likewise.
+ * ptree.c (cxx_print_xnode): Allow inner overload.
+ * semantics.c (finish_call_expr): Keep overload, 2D overload.
+ * tree.c (ovl_scope): Allow inner overload.
+ gcc/testsuite/
+ * g++.dg/lookup/using57.C: New.
+
+2017-03-22 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (lookup_qualified_name): Unwrap singleton
+ overload.
+ (lookup_name_real_1): Remove ovl_hidden assert.
+ (lookup_arg_dependent_1): Don't skip hidden here.
+ * parser.c (cp_parser_lookup_name): Don't unwrap singleton
+ overload here.
+
+2017-03-21 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (lookup_name_real_1): Don's skip hidden here.
+ Simplify singleton overload extraction.
+ * tree.c (ovl_add): Assert no unexpected 2 dimensional overloads.
+ gcc/
+ * system.h (ATTRIBUTE_NTC_PURE): Define.
+ * tree.h (tree_fits_shwi_p, tree_fits_uhwi_p): Use it.
+
+ Refactor lookup part 1
+ gcc/cp/
+ * name-lookup.c (struct name_lookup): New.
+ (struct scope_binding): Delete.
+ (EMPTY_SCOPE_BINDING): Delete.
+ (build_ambigious): New.
+ (name_lookup::add): New.
+ (do_nonmember_using_decl): Take pointer to cxx_binding. Adjust.
+ (do_local_using_decl, do_toplevel_using_decl): Adjust.
+ (merge_functions, same_entity_p, ambiguous_decl): Delete.
+ (suggest_alternatives_for): Adjust lookup functions.
+ (unqualified_namespace_lookup_1): Use name_lookup.
+ (lookup_qualified_name): Likewise.
+ (lookup_using_namespace, qualified_lookup_using_namespace): Take a
+ name_lookup.
+ gcc/testsuite/
+ * g++.dg/lookup/using17.C: Adjust error message.
+
+ Keep hidden overloads at start of OVERLOAD list
+ gcc/cp/
+ * cp-tree.h (OVL_HIDDEN_P): New.
+ (ovl_iterator::hidden_p, unhide): New.
+ (DECL_HIDDEN_P): New.
+ (hidden_name_p, remove_hidden_names): Delete.
+ (ovl_skip_hidden): Declare.
+ * decl.c (builtin_function_1): Set DECL_ANTICIPATED before
+ pushing.
+ (xref_tag_1): Replace hidden_name_p with DECL_HIDDEN_P.
+ * name-lookup.c (anticipated_builtin_p,
+ skip_anticipated_buitins): New.
+ (supplement_binding_1): Use anticipated_builtin_p.
+ (replace_local_overload_binding): New. Broken out of
+ augment_local_overload_binding.
+ (fixup_unhidden_decl): New.
+ (pushdecl_maybe_friend_1): Deal with unhiding decl. Set
+ DECL_ANTICIPATED before really pushing.
+ (augment_local_overload_binding): Call replace_local_overload_binding.
+ (push_overloaded_decl_1): Deal with unhiding decl.
+ (do_nonmember_using_decl): Use anticipated_builtin_p.
+ (ambiguous_decls): Use ovl_skip_hidden.
+ (lookup_name_real_1): Use DECL_HIDDEN_P, ovl_skip_hidden.
+ (arg_assoc_namespace): Use DECL_HIDDEN_P.
+ (lookup_arg_dependent_1): Use ovl_skip_hidden.
+ * pt.c (instantiate_class_template): Use DECL_HIDDEN_P.
+ * tree.c (ovl_move_unhidden): New.
+ (ovl_add): Deal with hiddenness.
+ (ovl_add_transient): Adjust.
+ (hidden_name_p, remove_hidden_names): Delete.
+ (ovl_skip_hidden): New.
+ (ovl_iterator::ovl_unhide): New.
+ gcc/testsuite/
+ * g++.dg/lookup/friend19.C: New.
+ * g++.dg/lookup/using56.C: New.
+
+2017-03-16 Nathan Sidwell <nathan@acm.org>
+
+ New OVERLOAD representation part 6
+ gcc/cp/
+ * cp-tree.h: Move ovl handling fns to original location.
+ * tree.c (ovl_add): Use ovl_make.
+ (ovl_add_transient): Use ovl_add.
+
+ New OVERLOAD representation part 5
+ gcc/cp/
+ * cp-tree.h (OVL_NEXT): Delete. Update uses.
+ (OVL_CHAIN): Check for overload.
+
+ New OVERLOAD representation part 4
+ gcc/cp/
+ * cp-tree.h (OVL_CURRRENT): Delete.
+ (ovl_make): Declare.
+ * tree.c (ovl_make): New.
+ * constraint.cc (finish_shorthand_constraint): Use ovl_make.
+ * typeck.c (build_x_unary_op): Likewise.
+
+ New OVERLOAD representation part 3
+ gcc/cp/
+ * cp-tree.h: Remove OVLNEW pieces.
+ * tree.c: Likewise.
+
+ New OVERLOAD representation part 2
+ gcc/cp/
+ * cp-tree.h (OVL_VIA_USING_P, OVL_TRANSIENT_P, OVL_SINGLE_P): New
+ names.
+ * error.c, name-lookup.c, parser.c, search.c, tree.c: Adjust uses.
+
+2017-03-15 Nathan Sidwell <nathan@acm.org>
+
+ New OVERLOAD representation part 1
+ gcc/cp/
+ * cp-tree.h (OVL_LENGTH, OVL_USINGS, OVL_FIRST, OVL_NAME,
+ OVL_SINGLE, OVL_ELT, OVL_HAS_USING, OVL_HAS_HIDDEN): New.
+ (ovl_iterator): Implement new-style iterator.
+ * tree.c (tree_ovl_elt_check_failed): New.
+ (ovl_maybe_keep): Fixup bracing.
+ (ovl_scope): Add new smarts.
+
+ Vectorize OVERLOAD part 9
+ gcc/cp/
+ * cp-tree.h (build_new_function_call): Lose koenig_p arg.
+ (OVL_HAS_USING): New.
+ * call.c (build_new_function_call): Lose koenig_p arg.
+ * name-lookup.c (augment_local_overload_binding): New. Broken out
+ of ...
+ (push_overloaded_decl_1): ... here. Call it.
+ (do_nonmember_using_decl): Lose augment arg.
+ (do_local_using_decl): Use augment_local_overload_binding.
+ (do_toplevel_using_decl): Adjust do_nonmember_using_decl call.
+ * search.c (lookup_field_r): Use OVL_HAS_USING.
+ * pt.c (do_class_deduction): Adjust build_new_function_call call.
+ * semantics.c (finish_call_expr): Likewise.
+
+ Vectorize OVERLOAD part 8
+ gcc/cp/
+ * cp-tree.h (ovl_add_transient): Declare.
+ * tree.c (ovl_add_transient): New.
+ (remove_hidden_names): Build transient.
+ * name-lookup.c (do_nonmember_using_decl): Add AUGMENT parm,
+ adjust.
+ (do_local_using_decl): Ask for newvals from
+ do_nonmember_using_decl, iterate over that list.
+ (do_toplevel_using_decl): Ask for augmented vals.
+ (add_function): Return void. Remove extraneous
+ checks. Update callers.
+ * semantics.c (finish_call_expr): Always call ovl_maybe_keep.
+
+ Vectorize OVERLOAD part 7
+ gcc/cp/
+ * name-lookup.c (hidden_name_p, remove_hidden_names): Move
+ declarations to ...
+ * cp-tree.h (hidden_name_p, remove_hidden_names): ... here.
+ * call.c (build_new_function_call): Remove hidden pruning.
+ * name-lookup.c (hidden_name_p, remove_hidden_names): Move to
+ tree.c.
+ (lookup_name_real_1): Adjust hidden_name_p call.
+ (lookup_arg_dependent_1): Adjust remove_hidden_names call.
+ * tree.c (hidden_name_p, remove_hidden_names): Moved from
+ name-lookup.h. Adjust.
+
+ Vectorize OVERLOAD part 6
+ gcc/cp/
+ * cp-tree.h (OVL_TRANSIENT): Rename from OVL_ARG_DEPENDENT.
+ * tree.c (ovl_maybe_keep): Adjust.
+ * name-lookup.c (set_namespace_binding_1): Use OVL_SINGLE.
+ (lookup_name_real_1): Use OVL_FIRST.
+ (add_function): Set OVL_TRANSIENT.
+ (lookup_arg_dependent_1): Use OVL_FIRST.
+ (cp_emit_debug_info_for_using): Use iterator.
+
+ Add OVERLOAD iterator part 8
+ gcc/cp/
+ * name-lookup.c (do_nonmember_using_decl): Use iterators
+
+ Add OVERLOAD iterator part 7
+ gcc/cp/
+ * name-lookup.c (pushdecl_maybe_friend_1): Use OVL_FIRST.
+ (push_overloaded_decl_1): Use iterators.
+ (consider_binding_level): Use OVL_FIRST.
+
+2017-03-14 Nathan Sidwell <nathan@acm.org>
+
+ Add OVERLOAD iterator part 6
+ gcc/cp/
+ * decl2.c (check_class_fn): Use iterators.
+ * semantics.c (omp_reduction_lookup): Likewise.
+ (finish_omp_reduction_clause): Don't OVL_FIRST here.
+
+ Vectorize OVERLOAD part 5
+ gcc/cp/
+ * cp-tree.h (ovl_maybe_keep): Declare.
+ * tree.c (ovl_maybe_keep): New.
+ * semantics.c (finish_call_expr): Call it.
+ (finish_omp_clauses): Use new accessrs.
+ * class.c (handle_using_decl): Use new accessors.
+ (resolve_address_of_overloaded_function): Likewise.
+ * pt.c (print_candidates_1, print_candidates): Reimplement.
+
+ Vectorize OVERLOAD part 5
+ gcc/cp/
+ * cp-tree.h (OVL_SINGLE): New.
+ * constraint.cc (resove_constraint_check): Use new iterator.
+ (normalize_template_id_expression): Use OVL_FIRST.
+ * cvt.c (build_expr_type_conversions): Likewise.
+ * error.c (dump_decl): Use OVL_SINGLE.
+ * parser.c (cp_parser_nested_name_specifier_opt): Likewise.
+ * tree.c (is_overloaded_fn): Likewise.
+
+ Add OVERLOAD iterator part 5
+ gcc/cp/
+ * cp-tree.h (ovl_iterator::via_using_p): New.
+ (ovl_iterator::replace): New.
+ (clone_function_decl): Add via_using parm.
+ * tree.c (ovl_iterator::replace): New.
+ * class.c (add_method): Use ovl_iterator.
+ (clone_function_decl): Add via_using parm. Pass it to add_method.
+ (clone_costructors_and_destructors): Pass via_using.
+ * pt.c (tsubst_decl, instantiate_template_1): Update
+ clone_function_decl call.
+
+ Change add_method signature
+ gcc/cp/
+ * cp-tree.h (add_method): Change 3rd arg.
+ * class.c (add_method): Change 3rd arg to bool. Update.
+ (handle_using_decl, one_inheriting_sig, one_inherited_ctor,
+ clone_function_decl, finish_struct): Update add_method calls.
+ * lambda.c (maybe_add_lambda_conv_op): Likewise.
+ * method.c (lazily_declare_fn): Likewise.
+ * semantics.c (finish_member_declaration): Likewise.
+
+2017-03-13 Nathan Sidwell <nathan@acm.org>
+
+ Kill get_first_fn part 3
+ gcc/cp/
+ * cp-tree.h (get_first_fn): Delete.
+ * pt.c (iterative_hash_template_arg, tsubst_copy_and_build): Use
+ get_ovl.
+ (tsubst_baselink): Use OVL_NAME.
+ * typeck.c (invalid_nonstatic_memfn_p, build_x_unary_op,
+ cp_build_addr_expr_1): Use get_ovl.
+ (finish_class_member_access_expr): Use OVL_NAME.
+ * tree.c (dependent_name): Recode.
+ (get_first_fn): Delete.
+
+ Kill get_first_fn part 2
+ gcc/cp/
+ * cp-tree.h (get_ovl): Add want_first parm, make pure.
+ * constexpr.c (potential_constant_expression_1): Adjust get_ovl.
+ * lambda.c (lambda_function): Likewise.
+ * error.c (dump_decl): Use identifier_p.
+ * mangle.c (write_expression): Use OVL_NAME.
+ * name-lookup.c (pushdecl_class_level): Likewise.
+ * parser.c (cp_parser_postfix_expression,
+ cp_parser_expression_statement, cp_parser_direct_declarator,
+ cp_parser_constructor_declarator_p): Use get_ovl.
+ * search.c (lookup_member0: Likewise.
+ * typeck2.c (cxx_incomplete_type_diagnostic): Likewise.
+ * semantics.c (perform_koenig_lookup): Use OVL_NAME.
+ (finish_call_expr, finish_id_expression): Use get_ovl.
+ * tree.c (get_ovl): Add want_first arg, adjust.
+
+ Kill get_first_fn part 1
+ gcc/cp/
+ * call.c (add_list_candidates, build_new_method_call_1): Use
+ OVL_FIRST directly.
+ * constraint.cc (function_concept_check_p): Likewise.
+ * name-lookup.c (validate_nonmember_using_decl): Likewise.
+ * constexpr.c (potential_constant_expression_1): Use ovl_fns &
+ OVL_FIRST.
+ * lambda.c (lambda_function): Likewise.
+ * decl.c (grokdeclarator): Use OVL_NAME.
+ * error.c (dump_decl): Likewise.
+ * friend.c (do_friend): Likewise.
+ * mangle.c (write_expression): Likewise.
+
+ Kill get_fns
+ gcc/cp/
+ * cp-tree.h (get_ovl): New.
+ (get_fns): Delete.
+ * parser.c (cp_parser_nested_name_specifier_opt): Update.
+ * search.c (shared_member_p): Update.
+ * semantics.c (omp_reduction_lookup): Update.
+
+ Kill ovl_cons
+ gcc/cp/
+ * cp-tree.h (ovl_cons): Delete.
+ * tree.c (ovl_cons): Delete.
+ * class.c (add_method): Use ovl_add.
+ * name-lookup.c (push_overloaded_decl_1): Likewise.
+ * pt.c (check_explicit_specialization, do_class_deduction): Likewise.
+ * typeck.c (build_x_unary_op): Likewise.
+
+ Kill build_overload
+ gcc/cp/
+ * cp-tree.h (ovl_add): Declare.
+ (build_overload): Delete.
+ * tree.c (ovl_add): New.
+ (build_overload): Delete.
+ * class.c (add_method): Use ovl_add.
+ * constraint.cc (finish_shorthand_constraint): Likewise.
+ * name-lookup.c (do_nonmember_using_decl, merge_functions,
+ remove_hidden_names, add_function): Likewise.
+ * pt.c (make_constrained_auto): Likewise.
+
+ Rename OVL_USED
+ gcc/cp/
+ * cp-tree.h (OVL_USED): Rename to ...
+ (OVL_VIA_USING): ... here.
+ * class.c (add_method): Update.
+ * tree.c (ovl_scope): Update.
+ * search.c (lookup_field_r): Update.
+ * name-lookup.c (push_overloaded_decl_1,
+ do_nonmember_using_decl): Update.
+
+ Add OVERLOAD iterator part 4
+ gcc/cp/
+ * tree.c (cp_tree_equal): Use ovl_iterator.
+
+ Vectorize OVERLOAD part 4
+ gcc/cp/
+ * cp-tree.h (ovl_iterator::ref): New.
+ * semantics.c (finish_omp_reduction_clause): Use OVL_FIRST.
+ * tree.c (is_overloaded_fn, get_fns): Likewise.
+
+2017-03-10 Nathan Sidwell <nathan@acm.org>
+
+ Vectorize OVERLOAD part 3
+ gcc/cp/
+ * search.c (lookup_field_fuzzy_info::fuzzy_lookup_fn,
+ lookup_conversion_operator, lookup_fnfields_idx_nolazy,
+ lookup_conversions_r): Use new accessors.
+
+ Vectorize OVERLOAD part 2
+ gcc/cp/
+ * decl2.c (mark_used): Use new accessors.
+ * dump.c (cp_dump_tree): Likewise.
+ * error.c (dump_decl, dump_expr, location_of): Likewise.
+ * init.c (build_offset_ref): Likewise.
+ * parser.c (cp_parser_nested_name_specifier_opt,
+ cp_parser_lookup_name): Likewise.
+ * pt.c (check_explicit_specialization, check_template_shadow,
+ tsubst_baselink): Likewise.
+ * ptree.c (cxx_print_xnode): Likewise.
+
+ Vectorize OVERLOAD part 1
+ gcc/cp/
+ * cp-tree.h (OVL_FIRST, OVL_NAME): New accessors.
+ * call.c (build_user_type_conversion_1,
+ print_error_for_call_failure, add_candidates): Use them.
+ * class.c (method_name_cmp, resort_method_name_cmp,
+ resort_type_method_vec, finish_struct_methods, warn_hidden,
+ resolve_address_of_overloaded_function,
+ note_name_declared_in_class): Likwise.
+ * cxx-pretty-print.c (pp_cxx_unqualified_id, pp_cxx_qualified_id,
+ cxx_pretty_printer::id_expression,
+ cxx_pretty_printer::expression): Likewise.
+ * decl.c (poplevel): Likewise.
+ * mangle.c (write_member_name): Likewise.
+ * method.c (strip_inheriting_ctors): Likewise.
+ * typeck.c (cp_build_addr_expr_1): Likewise.
+
+ Makefile-supplied timestamp.
+ gcc/cp
+ * Make-lang.in: Provide MODULE_STAMP.
+ * module.c (cpm_stream::version): Use MODULE_STAMP, not __DATE__ &
+ __TIME__.
+
+ Add OVERLOAD iterator part 3
+ gcc/cp/
+ * name-lookup.c (pushdecl_maybe_friend_1,
+ lookup_extern_c_fun_in_all_ns, c_linkage_bindings,
+ set_decl_namespace, pushdecl_top_level_and_finish (tree x,
+ merge_functions, remove_hidden_names, arg_assoc_namespace,
+ arg_assoc, lookup_arg_dependent_1, cp_emit_debug_info_for_using):
+ Use new iterator.
+ * pt.c (retrieve_specialization, iterative_hash_template_arg,
+ determine_specialization, check_explicit_specialization,
+ resolve_overloaded_unification, resolve_nondeduced_context,
+ type_dependent_expression_p, dependent_template_p,
+ do_class_deduction): Likewise.
+
+ Add OVERLOAD iterator part 2
+ gcc/cp/
+ * class.c (handle_using_decl,
+ maybe_warn_about_overly_private_class, modify_all_vtables,
+ get_basefndecls, warn_hidden, add_implicitly_declared_members,
+ adjust_clone_args, deduce_noexcept_on_destructors, default_ctor_p,
+ in_class_defaulted_default_constructor, user_provided_p,
+ type_has_user_provided_constructor,
+ type_has_user_provided_or_explicit_constructor,
+ type_has_virtual_destructor, type_has_move_constructor,
+ type_has_move_assign, type_has_user_declared_move_constructor,
+ type_build_ctor_call, type_build_dtor_call,
+ type_requires_array_cookie, explain_non_literal_class,
+ finish_struct, resolve_address_of_overloaded_function): Use new
+ iterator.
+ * decl2.c (maybe_warn_sized_delete): Likewise.
+ * parser.c (cp_parser_template_name): Tweak loop exit test.
+ * semantics.c (finish_call_expr): Likewise.
+ * typeck.c (check_template_keyword): Likewise.
+
+ Add OVERLOAD iterator, part 1
+ Add MAYBE_BASELINK_FUNCTIONS
+ gcc/cp/
+ * cp-tree.h (struct ovl_iterator): New.
+ (MAYBE_BASELINK_FUNCTIONS): New.
+ * call.c (build_op_call_1, add_candidates,
+ build_op_delete_call): Use new iterator.
+ * lambda.c (maybe_generic_this_capture): Likewise.
+ * method.c (inherited_ctor_binfo, binfo_inherited_from): Likewise.
+ * parser.c (lookup_literal_operator,
+ cp_parser_template_name): Likewise.
+ * search.c (shared_member_p, look_for_overrides_here,
+ lookup_conversions_r): Likewise.
+ * semantics.c (finish_call_expr,
+ classtype_has_nothrow_assign_or_copy_p): Likewise.
+ * typeck.c (check_template_keyword): Likewise.
+ * tree.c (is_overloaded_fn, get_fns): Use MAYBE_BASELINK_FUNCTIONS.
+
+ gcc/cp/
+ * gcc/cp/cp-tree.h (NAMESPACE_CHECK): Delete.
+ (MODULE_NAMESPACE_P, GLOBAL_MODULE_NAMESPACE,
+ NAMESPACE_INLINE_P): Adjust.
+
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp: Protect DEFAULT_CXXFLAGS.
+
+2017-03-06 Nathan Sidwell <nathan@acm.org>
+
+ Add crc checkpointing.
+ gcc/cp/
+ * module.c (cpm_serial::crc): New.
+ (cpm_serial::bit_flush): Compute crc.
+ (cpm_serial::crc_unsigned_n, crc_buffer, crc_unsigned): New.
+ (cpm_reader::checkpoint, cpm_writer::checkpoint): New.
+ (cpm_reader, cpm_writer): Add checkpointing to io.
+ (cpms_in, cpms_out): Likewise.
+
+2017-03-05 Nathan Sidwell <nathan@acm.org>
+
+ Optimize crc. Push to trunk
+ gcc/
+ * tree.h (crc32_unsigned_n): Declare.
+ (crc32_unsigned, crc32_unsigned): Make inline.
+ * tree.c (crc32_unsigned_bits): Replace with ...
+ (crc32_unsigned_n): ... this.
+ (crc32_unsigned, crc32_byte): Remove.
+ (crc32_string): Remove unnecessary braces.
+
+2017-03-04 Nathan Sidwell <nathan@acm.org>
+
+ Redo bool read/write
+ gcc/cp/
+ * module.c (cpm_serial::bit_flush): New.
+ (cpm_writer::bytes4, cpm_writer::bflush: New.
+ (cpm_reader::bytes4, cpm_reader::bflush, cpm_reader::bfill): New.
+ (cpm_reader::fill): Rename from reserve. Update callers.
+ (cpm_writer::b, cpm_reader::b): Reimplement.
+ (cpm_writer::flush_bits, cpm_reader::flush_bits): Delete.
+ (cpms_out::write_tree_ary, cpms_in::read_tree_ary): Call bflush.
+ (cpms_out::write_tree, cpms_in::read_tree): Likewise.
+
+ Cleanup test pruning. Push to trunk.
+ gcc/testsuite/g++.dg
+ * g++-dg.exp (find-cxx-tests): New.
+ (main): Call it to discover direct tests rather than explicit pruning.
+
+2017-03-03 Nathan Sidwell <nathan@acm.org>
+
+ Cleanup retrofit_lang_decl. Push to trunk.
+ gcc/cp/
+ * cp-tree.h (add_lang_decl_raw, add_lang_type_raw): Rename.
+ * lex.c (maybe_add_lang_decl_raw, maybe_add_lang_type_raw): Return
+ bool. Don't assert.
+ (retrofit_lang_decl, cxx_make_type): Adjust.
+ * module.c (cpms_in::read_tree): Verify lang_decl/type insertion
+ valid.
+ * class.c (alter_access): Directly call retrofit_lang_decl.
+ * decl.c (push_local_name, duplicate_decls): Likewise.
+ * pt.c (push_template_decl_real, txubs_omp_clauses): Likewise.
+ * semantics.c (omp_privatize_field): Likewise.
+
+ Renaming stuff.
+ gcc/cp/
+ * module.c: Remove anon namespace, rename seriator, reader,
+ writer, streamer, in & out.
+
+2017-03-01 Nathan Sidwell <nathan@acm.org>
+
+ Black triangle achieved
+ gcc/cp/
+ * cp-tree.h (GLOBAL_MODULE_NAMESPACE_P): New.
+ (add_lang_decl_raw, add_lang_type_raw): Declare.
+ * lex.c (add_lang_decl_raw): New. Broken out of ...
+ (retrofit_lang_decl): ... here. Call it.
+ (add_lang_type_raw): New. Broken out of ...
+ (cxx_make_type): ... here. Call it.
+ * module.c (out::write_decl_lang_bools, in::read_decl_lang_bools): New.
+ (in::~in, in::set_scope): Correct.
+ (out::write_tree, in::read_tree): Start lang_type/decl handling.
+ (in::finish_type): Fix canonical type handling.
+ (in::finish_function): Insert into symbol table.
+ (in::finish_function): Preserve scope.
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp: Add link & execute capability.
+ * g++.dg/modules/mod-decl-2_b.C: Remove XFAILs.
+ * g++.dg/modules/mod-decl-2_c.C: Remove XFAILs.
+ * g++.dg/modules/mod-impl-1_a.C: New.
+ * g++.dg/modules/mod-impl-1_b.C: New.
+ * g++.dg/modules/mod-impl-1_c.C: New.
+ * g++.dg/modules/mod-impl-1_d.C: New.
+
+2017-02-17 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * module.c (in::finish_type): New.
+ (in::finish): Call it.
+ (out::write_core_vals, in::read_core_vals): Ensure canonical_type
+ and type_main_variant are dumped early.
+ gcc/testsuite/
+ * g++/modules/mod-exp-1_b.C: Extend.
+
+ Canonicalize canonical type hashing
+ gcc/
+ * tree.h (type_hash_default): Declare.
+ * tree.c (type_hash_list, attribute_hash_list): Move into
+ type_hash_default.
+ (build_type_attribute_qual_variant): Break out hash code calc into
+ type_hash_default.
+ (type_hash_default): New. Generic type hash computation.
+ (build_range_type_1, build_array_type_1, build_function_type,
+ build_method_type_directly, build_offset_type, build_complex_type,
+ make_vector_type): Call it.
+ gcc/c-family/
+ * c-common.c (complete_array_type): Use type_hash_default.
+
+2017-02-16 Nathan Sidwell <nathan@acm.org>
+
+ Namespace decls!
+ gcc/cp/
+ * module.c (out::write_tree_ary, in::read_tree_ary): New.
+ (out::tag_trees, in::tag_trees): Repurpose.
+ (in::finish_namespace, in::finish_function): New.
+ (out::write_tree, in::read_tree): Adjust.
+ (in::finish): Adjust.
+
+ Some actual tree writing & reading
+ gcc/cp/
+ * module.c (out::write_core_bools, out::write_core_vals): New.
+ (in::read_core_bools, in::read_core_vals): New.
+ (in::set_scope): New.
+ (out::write_tree, in::read_tree): Call core readers/writers.
+
+ Node length & allocation. Global trees.
+ gcc/cp/
+ * module.c (streamer::tags): Rename to ...
+ (streamer::record_tag): ... here. Fixup.
+ (out::tag_trees, out::start, out::write_loc): New.
+ (in::tag_trees, in::start, in::finish, in::read_loc): New.
+ (out::write_tree, in::read_tree): Adjust.
+ (write_module): Write global trees.
+
+2017-02-15 Nathan Sidwell <nathan@acm.org>
+
+ Start of tree reading & writing. Module namespace fix.
+ gcc/cp/
+ * cp-tree.h (pop_module_namespace, push_module_namespace): Add flag.
+ * parser.c (check_module_outermost, cp_parser_module_export,
+ cp_parser_module_proclamation, cp_parser_namespace_definition): Adjust.
+ * module.c (pop_module_namespace, push_module_namespace): Add
+ flag.
+ (reader::read_tree, writer::write_tree): Initial stubs.
+ (read_module, write_module, do_import_module, declare_module): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/mod-exp-1_a.C: New.
+ * g++.dg/modules/mod-exp-1_b.C: New.
+ * g++.dg/modules/mod-sym-1.C: Add cases.
+
+2017-02-14 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * Make-lang.in (CFLAGS-cp/module.o): New var.
+ * module.c (reader): Add peek_u.
+ (reader::str): Force ending NUL.
+ (writer::flush_bits): Avoid infinite recursion.
+ (streamer): Extend tags, add next.
+ (out, in): Add some readers/writers.
+ (read_module, do_import_module, write_module): Augment.
+ gcc/testsuite/
+ * g++.dg/modules/mod-imp-1_a.C
+ * g++.dg/modules/mod-imp-1_b.C
+ * g++.dg/modules/mod-imp-1_c.C
+ * g++.dg/modules/mod-imp-1_d.C
+
+2017-02-10 Nathan Sidwell <nathan@acm.org>
+
+ Start actually writing & reading module files. (headers only)
+ gcc/cp/
+ * module.c (seriator, reader, writer, streamer, in, out): New
+ classes.
+ (read_module, do_import_module, write_module, finish_module): Adjust.
+
+ gcc/
+ * gengtype-lex.l (<in_struct>): Add '/'.
+
+2017-02-09 Nathan Sidwell <nathan@acm.org>
+
+ Dump file
+ gcc/
+ * dumpfile.h (tree_dump_index): Add TDI_lang.
+ (TDF_LANG): New.
+ * dumpfile.c (dump_files): Add front-end.
+ (dump_option_value_info): Add lang. Adjust all.
+ gcc/cp/
+ * cp-tree.h (import_module): Lose is_export parm.
+ * module.c: Include dumpfile.h
+ (dopen, dclose): New.
+ (import_add): Absorb into ...
+ (do_import_module): ... here. Broken out of ...
+ (import_module): ... here. Call it.
+ (export_module, declare_module): Adjust.
+ (read_module, write_module): Write dump.
+ gcc/testsuite/
+ * g++.dg/modules/mod-decl-1.C: Adjust.
+ * g++.dg/modules/mod-decl-2_b.C: Adjust.
+ * g++.dg/modules/mod-decl-5_b.C: Adjust.
+
+ gcc/cp/
+ * cp-tree.h (DECL_CHECK): New.
+ (NAMESPACE_MODULE_P): Rename to ...
+ (MODULE_NAMESPACE_P): ... here.
+ (CURRENT_MODULE_NAMESPACE_P): New.
+ (MODULE_EXPORT_P): New.
+ (import_module): Add is_export param.
+ * module.c (mstream, mfname): Delete.
+ (imported_modules): Make hash_map.
+ (enum import_kind): New.
+ (push_module_namespace, pop_module_namespace): Adjust.
+ (import_add, import_module, export_module): Adjust.
+ (read_module, write_module): New.
+ (declare_module, finish_module): Adjust.
+ * name-lookup.c (is_ancestor): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/mod-decl-5_b.C: Adjust
+ * g++.dg/modules/modules.exp: Remote host, tweak module deletion.
+
+2017-02-08 Nathan Sidwell <nathan@acm.org>
+
+ gcc/cp/
+ * name-lookup.c (is_ancestor): Pop from module namespace root.
+ gcc/testsuite/
+ * g++.dg/modules/mod-sym-3.C: New.
+
+ Module namespaces
+ gcc/cp/
+ * cp-tree.h (NAMESPACE_MODULE_P): New.
+ (push_module_namespace, pop_module_namespace): Declare.
+ * module.c (MOD_SYM_PFX, MOD_SYM_DOT): New.
+ (module_namespace_name): New.
+ (push_module_namespace, pop_module_namespace): New.
+ (module_to_ext): New. Broken out of ...
+ (module_to_filename): ... here. Call it.
+ (declare_module): Push to module namespace.
+ * parser.c (check_module_outermost): Deal with module namespace.
+ (cp_parser_module_export, cp_parser_module_proclaimation,
+ cp_parser_namespace_definition): Likewise.
+ gcc/testsuite/
+ * g++.dg/modules/mod-decl-1.C: Adjust.
+ * g++.dg/modules/mod-sym-1.C: New.
+ * g++.dg/modules/mod-sym-2.C: New.
+
+ Cleanup inline namespace creation.
+ gcc/cp/
+ * name-lookup.h (make_namespace_inline): Declare.
+ * name-lookup.c (do_toplevel_using_directive): New.
+ (do_using_directive): Call it.
+ (make_namespace_inline): New.
+ * parser.c (cp_parser_namespace_definition): Call it.
+
+2017-02-07 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/79369 inline namespaces
+ gcc/cp/
+ * cp-tree.h (NAMESPACE_CHECK): New.
+ (NAMESPACE_INLINE_P): New.
+ * name-lookup.h (push_namespace): Return int.
+ * name-lookup.c (push_namespace): Return int. Adjust.
+ * parser.c (cp_parser_namespace_definition): Reorder nested
+ parsing. Check inline redefinition.
+ gcc/testsuite/
+ * g++.dg/cpp0x/pr65558.C: Adjust error loc.
+ * g++.dg/cpp0x/pr79369.C: New.
+ * g++.dg/cpp1z/nested-namespace-def1.C: Adjust.
+
+2017-02-03 Nathan Sidwell <nathan@acm.org>
+
+ Module files open/closed. Testsuite extension
+ gcc/cp/
+ * module.c (mstream, mfname): New.
+ (module_to_filename): New.
+ (import_module, declare_module, finish_module): Open/close module file.
+ gcc/testsuite/
+ * g++.dg/modules/modules.exp (mod_spec_to_file, dg-module-if,
+ check_module_specs, cleanup_module_files): New.
+ * g++.dg/modules/mod-decl-0.C: Adjust
+ * g++.dg/modules/mod-decl-1.C: Adjust
+ * g++.dg/modules/mod-decl-2_a.C: Adjust
+ * g++.dg/modules/mod-decl-3.C: New.
+ * g++.dg/modules/mod-decl-3_a.C: Delete.
+ * g++.dg/modules/mod-decl-3_b.C: Delete.
+ * g++.dg/modules/mod-decl-4.C: Adjust
+ * g++.dg/modules/mod-decl-5_a.C: Adjust
+ * g++.dg/modules/mod-decl-5_b.C: Adjust
+ * g++.dg/modules/proclaim-1.C: Adjust
+
+ Module names are identifiers.
+ gcc/cp/
+ * config-lang.in (gtfiles): Add modules.c.
+ * c-tree.h (module_name_t): Delete.
+ (finish_module): Declare.
+ * decl2.c (c_pare_final_cleanups): Call finish_module.
+ * module.c: Change module_name_t to tree.
+ (imported_module): Hash of module names.
+ (import_add): New.
+ (import_module, declare_module): Use it.
+ (export_module): Import module.
+ (finish_module): New.
+ * parser.c (cp_parser_module_name): Build up identifier. Adjust
+ callers.
+ gcc/testsuite/
+ * g++.dg/modules/mod-decl-0.C: Adjust.
+ * g++.dg/modules/mod-decl-1.C: Adjust.
+ * g++.dg/modules/mod-decl-2_b.C: Adjust.
+ * g++.dg/modules/mod-decl-2_c.C: New.
+ * g++.dg/modules/mod-decl-5_a.C: New.
+ * g++.dg/modules/mod-decl-5_b.C: New.
+
+2017-02-02 Nathan Sidwell <nathan@acm.org>
+
+ [[interface]]
+ gcc/cp
+ * cp-tree.h: Adjust module interface fns.
+ * modules.c (is_interface): New.
+ (push_module_export, pop_module_export, module_exporting_level):
+ Adjust.
+ (module_proclaim): Delete.
+ (module_interface_p): New.
+ (declare_module): Use 'interface' attrib.
+ (mport_module, export_module): Take attribs.
+ * parser.c (check_module_outermost, cp_parser_module_declaration,
+ cp_parser_module_export, cp_parser_module_proclamation): Adjust.
+ gcc/testsuite/
+ * g++.dg/modules/mod-decl-2_a.C: Adjust.
+ * g++.dg/modules/mod-decl-3_a.C: Adjust.
+ * g++.dg/modules/proclaim-1.C: Adjust.
+ * g++.dg/modules/mod-decl-4.C: New.
+
+2017-01-27 Nathan Sidwell <nathan@acm.org>
+
+ Parse proclaimed ownership.
+ gcc/cp/
+ * cp-tree.h (module_exporting_p, module_proclaim): Declare.
+ * module.c (proclaimer): New.
+ (module_exporting_p, module_proclaim): New.
+ * parser.c (check_module_outermost): New.
+ (cp_parser_module_declaration, cp_parser_module_export): Call it.
+ (cp_parser_module_proclamation): New.
+ (cp_parser_declaration): Add proclaimed-ownership.
+ gcc/testsuite/
+ * g++.dg/modules/proclaim-1.C: New.
+
+ Parse import & export. Test infra.
+ gcc/cp/
+ * cp-tree.h (module_purview_p, push_module_export,
+ pop_module_export, declare_module, import_module,
+ export_module): Declare.
+ * module.c (export_depth): New.
+ (module_purview_p, push_module_export, pop_module_export): New
+ (declare_module_name): Renme to ...
+ (declare_module): ... here.
+ (import_module, export_module): Stubs.
+ * parser.c (cp_parser_module_declaration): Add IS_EXPORT
+ parm. Deal with imports & exports.
+ (cp_parser_module_export): New.
+ (cp_parser_declaration): Allow module import, export.
+ gcc/testsuite/
+ * g++.dg/dg.exp: Prune module tests.
+ * g++.dg/modules/modules.exp: New.
+ * g++.dg/modules/mod-decl-2_[ab].C: New.
+ * g++.dg/modules/mod-decl-3_[ab].C: New.
+
+2017-01-25 Nathan Sidwell <nathan@acm.org>
+
+ Parse module-declaration.
+ gcc/cp
+ * cp-tree.h (module_name_t): Typedef.
+ (declare_module_name): Declare.
+ * parser.c (cp_parser_diagnose_invalid_type_name): Explain
+ fmodules.
+ (cp_parser_module_name, cp_parser_module_declaration): New.
+ (cp_parser_declaration): Add module-declaration.
+ * module.c (declared_module, module_location): New.
+ (declare_module_name): Define.
+ gcc/testsuite/
+ * g++.dg/modules/mod-decl-0.C: New.
+ * g++.dg/modules/mod-decl-1.C: New.
+
+ New flag & keywords, etc
+ gcc/c-family/
+ * c-common.c (c_common_reswords): Add 'module', 'import'.
+ * c-common.h (enum rid): Add RID_MODULE, RID_IMPORT.
+ (D_CXX_MODULES, D_CXX_MODULES_FLAGS) New.
+ * c-cppbuiltins.c (c_cpp_builtins): Add _cpp_modules define.
+ * c.opt: Add fmodules flag.
+ gcc/cp/
+ * Make-lang.in (CXX_AND_OBJCXX_OBJS): Add module.o.
+ * module.c: New file.
+ gcc/
+ * doc/invoke.texi (-fmodules): Document it.
+
+2017-01-24 Nathan Sidwell <nathan@acm.org>
+
+ Free up TREE_LANG_FLAG_3. DECL_CONSTRUCTION_VTABLE_P is useless.
+ gcc/cp/
+ * cp-tree.h (DECL_CONSTRUCTION_VTABLE_P): Delete.
+ (DECL_NON_TRIVIALLY_INITIALIZED_P): Move to TREE_LANG_FLAG_6.
+ * class.c (build_ctor_vtbl_group): Don't set
+ DECL_CONSTRUCTION_VTABLE_P.
+ * decl2.c (determine_visibility_from_class): Don't check
+ DECL_CONSTRUCTION_VTABLE_P anymore.
+
+2017-01-23 Nathan Sidwell <nathan@acm.org>
+
+ Branch creation from trunk:244828
+ Use this Changelog for all branch changes, including merges.
+
+Local Variables:
+mode: change-log
+change-log-default-name: "ChangeLog.modules"
+End:
diff --git a/gcc/REVISION b/gcc/REVISION
new file mode 100644
index 0000000..afc6e92
--- /dev/null
+++ b/gcc/REVISION
@@ -0,0 +1 @@
+[c++-modules]
diff --git a/gcc/configure b/gcc/configure
index 9bb436c..e115ba6 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -7883,6 +7883,8 @@
+# ACX_BUGURL([https://gcc.gnu.org/bugs/])
+# '\#' needed to escape hash to Make
# Check whether --with-bugurl was given.
@@ -7895,7 +7897,7 @@
;;
esac
else
- BUGURL="https://gcc.gnu.org/bugs/"
+ BUGURL="https://gcc.gnu.org/wiki/cxx-modules\#Bugs"
fi
diff --git a/gcc/configure.ac b/gcc/configure.ac
index caa6119..adcdbf8 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -1013,7 +1013,9 @@
AC_SUBST(CONFIGURE_SPECS)
ACX_PKGVERSION([GCC])
-ACX_BUGURL([https://gcc.gnu.org/bugs/])
+# ACX_BUGURL([https://gcc.gnu.org/bugs/])
+# '\#' needed to escape hash to Make
+ACX_BUGURL([https://gcc.gnu.org/wiki/cxx-modules\#Bugs])
# Allow overriding the default URL for documentation
AC_ARG_WITH(documentation-root-url,
diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
index 62295fb..5f6360a 100644
--- a/gcc/cp/Make-lang.in
+++ b/gcc/cp/Make-lang.in
@@ -64,6 +64,17 @@
MODULE_VERSION := $(shell date -r $(srcdir)/cp/module.cc '+%y%m%d-%H%M' \
2>/dev/null || date '+%y%m%d-0000' 2>/dev/null || echo 0)
+version.o : $(srcdir)/cp/module.cc
+# Set REVISION string
+ifeq ($(REVISION_c),)
+REVISION_c := []
+REVISION_s := '"[modules revision 20$(MODULE_VERSION)]"'
+else
+ifeq ($(words $(REVISION_c)),1)
+# Wedge inside [...], if that's what it already looks like
+REVISION_s := '" $(REVISION_c:]=) revision 20$(MODULE_VERSION)]"'
+endif
+endif
CFLAGS-cp/module.o += -DMODULE_VERSION='($(subst -,,$(MODULE_VERSION))U)'
endif
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 3b9875e..4621c2c 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -4966,21 +4966,6 @@
void
fixup_anonymous_aggr (tree t)
{
- /* Wipe out memory of synthesized methods. */
- TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
- TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
- TYPE_HAS_COPY_CTOR (t) = 0;
- TYPE_HAS_CONST_COPY_CTOR (t) = 0;
- TYPE_HAS_COPY_ASSIGN (t) = 0;
- TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
-
- /* Splice the implicitly generated functions out of TYPE_FIELDS. */
- for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
- if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
- *prev_p = DECL_CHAIN (probe);
- else
- prev_p = &DECL_CHAIN (probe);
-
/* Anonymous aggregates cannot have fields with ctors, dtors or complex
assignment operators (because they cannot have these methods themselves).
For anonymous unions this is already checked because they are not allowed
diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c
index 246d752..f38c5dd 100644
--- a/gcc/diagnostic.c
+++ b/gcc/diagnostic.c
@@ -643,6 +643,15 @@
if (context->abort_on_error)
real_abort ();
+#if 1
+ fnotice (stderr, "We are damaged, This is broken.\n"
+ "Logic is lost,\nWe struggle,\n"
+ "Hunt through the rubble for what once was.\n");
+ fnotice (stderr, "THIS IS AN IN-DEVELOPMENT COMPILER,"
+ " it barfed, quelle horreur\n"
+ "See %s, WHICH IS NOT THE USUAL REPORTING MECHANISM!\n",
+ bug_report_url);
+#else
fnotice (stderr, "Please submit a full bug report,\n"
"with preprocessed source if appropriate.\n");
if (count > 0)
@@ -650,6 +659,7 @@
("Please include the complete backtrace "
"with any bug report.\n"));
fnotice (stderr, "See %s for instructions.\n", bug_report_url);
+#endif
exit (ICE_EXIT_CODE);
}
@@ -659,6 +669,12 @@
real_abort ();
diagnostic_finish (context);
fnotice (stderr, "compilation terminated.\n");
+#if 1
+ fnotice (stderr, "THIS IS AN IN-DEVELOPMENT COMPILER,"
+ " it ate something that didn't agree with it\n"
+ "See %s, WHICH IS NOT THE USUAL REPORTING MECHANISM!\n",
+ bug_report_url);
+#endif
exit (FATAL_EXIT_CODE);
default:
diff --git a/gcc/gcc.c b/gcc/gcc.c
index aa5774a..ec7f5ec 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -3397,6 +3397,35 @@
int err;
const char *string = commands[i].argv[0];
+ if (false && commands[i].argv == argbuf.address ())
+ {
+ /* Munge argv[0], the one given to the exec'd command, to
+ include information about from whence it was spawned. We
+ preserve the directory component so the command can
+ determine where it is, but not what it was called.
+ Thus its otherwise unlocated errors specify something
+ like 'g++.cc1plus' rather than plan 'cc1plus'. */
+ size_t slen = strlen (string);
+ size_t plen = strlen (progname);
+ size_t tlen = strlen (commands[i].prog);
+
+ while (slen && !IS_DIR_SEPARATOR (string[slen-1]))
+ slen--;
+ char *ren = XNEWVEC (char, slen + plen + tlen + 3);
+ size_t off = 0;
+
+ memcpy (ren + off, string, slen);
+ off += slen;
+ memcpy (ren + off, progname, plen);
+ off += plen;
+ ren[off++] = '.';
+ memcpy (ren + off, commands[i].prog, tlen);
+ off += tlen;
+ ren[off++] = 0;
+
+ commands[i].argv[0] = ren;
+ }
+
errmsg = pex_run (pex,
((i + 1 == n_commands ? PEX_LAST : 0)
| (string == commands[i].prog ? PEX_SEARCH : 0)),
@@ -3411,6 +3440,12 @@
string, errmsg);
}
+ if (commands[i].argv[0] != string)
+ {
+ free (const_cast <char *> (commands[i].argv[0]));
+ commands[i].argv[0] = string;
+ }
+
if (i && string != commands[i].prog)
free (CONST_CAST (char *, string));
}
@@ -8639,7 +8674,16 @@
if (! verbose_flag)
{
+#if 1
+ printf ("\nTHIS IS AN IN-DEVELOPMENT COMPILER\n"
+#if !CHECKING_P
+ "This has been configured with --disable-checking,"
+ " ARE YOU SURE THAT IS WISE?\n"
+#endif
+ "For bug reporting, see the UNUSUAL URL:\n");
+#else
printf (_("\nFor bug reporting instructions, please see:\n"));
+#endif
printf ("%s.\n", bug_report_url);
return (0);
@@ -9037,7 +9081,12 @@
if (print_help_list)
{
+#if 1
+ printf ("\nTHIS IS AN IN-DEVELOPMENT COMPILER\n"
+ "For bug reporting, see the UNUSUAL URL:\n");
+#else
printf (("\nFor bug reporting instructions, please see:\n"));
+#endif
printf ("%s\n", bug_report_url);
}
}
diff --git a/gcc/gdbinit.in b/gcc/gdbinit.in
index 7d7c2be..e10d7dd 100644
--- a/gcc/gdbinit.in
+++ b/gcc/gdbinit.in
@@ -333,6 +333,10 @@
# Put a breakpoint on internal_error to help with debugging ICEs.
b internal_error
+# Break on module streaming error
+b bytes_in::set_overrun if !overrun
+b elf::set_error if !err
+
set complaints 0
# Don't let abort actually run, as it will make
# stdio stop working and therefore the `pr' command above as well.
diff --git a/gcc/testsuite/lib/prune.exp b/gcc/testsuite/lib/prune.exp
index a349c8a..32ce66c 100644
--- a/gcc/testsuite/lib/prune.exp
+++ b/gcc/testsuite/lib/prune.exp
@@ -48,6 +48,7 @@
regsub -all "(^|\n)\[^\n\]*: re(compiling|linking)\[^\n\]*" $text "" text
regsub -all "(^|\n)Please submit.*instructions\[^\n\]*" $text "" text
regsub -all "(^|\n)\[0-9\]\[0-9\]* errors\." $text "" text
+ regsub -all "(^|\n)THIS IS AN.*MECHANISM!\[^\n\]*" $text "" text
# Diagnostic inclusion stack
regsub -all "(^|\n)(In file)?\[ \]+included from \[^\n\]*" $text "" text
diff --git a/libcc1/libcp1plugin.cc b/libcc1/libcp1plugin.cc
index 27a6175..30a8243 100644
--- a/libcc1/libcp1plugin.cc
+++ b/libcc1/libcp1plugin.cc
@@ -1004,9 +1004,6 @@
tree identifier = DECL_NAME (target);
tree tcontext = DECL_CONTEXT (target);
- if (UNSCOPED_ENUM_P (tcontext))
- tcontext = CP_TYPE_CONTEXT (tcontext);
-
if (class_member_p)
{
tree decl = do_class_using_decl (tcontext, identifier);
@@ -3289,7 +3286,7 @@
koenig_p = true;
else if (is_overloaded_fn (callable))
{
- tree fn = get_first_fn (callable);
+ tree fn = OVL_FIRST (callable);
fn = STRIP_TEMPLATE (fn);
if (!DECL_FUNCTION_MEMBER_P (fn)
diff --git a/libcody/README.md b/libcody/README.md
index a95085e..07e34d1 100644
--- a/libcody/README.md
+++ b/libcody/README.md
@@ -284,6 +284,18 @@
These set of requests are used for GCC LTO jobserver integration with GNU Make
+#### Invoke Command
+
+A command can be invoked with the follow message:
+
+`INVOKE $args`
+
+A successful invocation provides an OK response. A failed
+invocation's produces an ERROR response.
+
+FIXME: Note for generalization this command needs to indicate which
+files may need transferring to and from a remote build system.
+
## Building libCody
Libcody is written in C++11. (It's a intended for compilers, so
diff --git a/libcody/client.cc b/libcody/client.cc
index ae69d19..425923f 100644
--- a/libcody/client.cc
+++ b/libcody/client.cc
@@ -29,6 +29,7 @@
&PathnameResponse,
&OKResponse,
&IncludeTranslateResponse,
+ &OKResponse,
};
Client::Client ()
@@ -253,6 +254,19 @@
return Packet (Client::PC_ERROR, u8"");
}
+// INVOKE $args
+Packet Client::InvokeSubProcess (char const *const *argv, size_t argc)
+{
+ write.BeginLine ();
+ write.AppendWord (u8"INVOKE");
+
+ for(size_t i = 0; i < argc; i++)
+ write.AppendWord (argv[i]);
+
+ write.EndLine ();
+ return MaybeRequest (Detail::RC_INVOKE);
+}
+
// OK or ERROR
Packet OKResponse (std::vector<std::string> &words)
{
diff --git a/libcody/cody.hh b/libcody/cody.hh
index 789ce9e..10b15eb 100644
--- a/libcody/cody.hh
+++ b/libcody/cody.hh
@@ -198,6 +198,7 @@
RC_MODULE_IMPORT,
RC_MODULE_COMPILED,
RC_INCLUDE_TRANSLATE,
+ RC_INVOKE,
RC_HWM
};
@@ -468,6 +469,17 @@
}
public:
+ /// Invoke a sub process
+ /// @param str command args
+ /// @result packet indicating success or error of command
+ Packet InvokeSubProcess (char const *const *argv, size_t argc);
+
+ Packet InvokeSubProcess (std::vector<const char *> &args)
+ {
+ return InvokeSubProcess (args.data (), args.size ());
+ }
+
+public:
/// Request compiler module repository
/// @result packet indicating repo
Packet ModuleRepo ();
@@ -624,6 +636,10 @@
std::string &module);
virtual int IncludeTranslateRequest (Server *s, Flags flags,
std::string &include);
+
+public:
+ virtual int InvokeSubProcessRequest (Server *s,
+ std::vector<std::string> &args);
};
diff --git a/libcody/resolver.cc b/libcody/resolver.cc
index 034fd63..4d933be 100644
--- a/libcody/resolver.cc
+++ b/libcody/resolver.cc
@@ -203,6 +203,12 @@
return 0;
}
+int Resolver::InvokeSubProcessRequest (Server *s, std::vector<std::string> &)
+{
+ s->ErrorResponse ("unimplemented");
+ return 0;
+}
+
void Resolver::ErrorResponse (Server *server, std::string &&msg)
{
server->ErrorResponse (msg);
diff --git a/libcody/server.cc b/libcody/server.cc
index e2fa069..7a4a6a9 100644
--- a/libcody/server.cc
+++ b/libcody/server.cc
@@ -28,6 +28,8 @@
std::vector<std::string> &words);
static int IncludeTranslateRequest (Server *, Resolver *,
std::vector<std::string> &words);
+static int InvokeSubProcessRequest (Server *, Resolver *,
+ std::vector<std::string> &words);
namespace {
using RequestFn = int (Server *, Resolver *, std::vector<std::string> &);
@@ -42,6 +44,7 @@
RequestPair {u8"MODULE-IMPORT", ModuleImportRequest},
RequestPair {u8"MODULE-COMPILED", ModuleCompiledRequest},
RequestPair {u8"INCLUDE-TRANSLATE", IncludeTranslateRequest},
+ RequestPair {u8"INVOKE", InvokeSubProcessRequest},
};
}
@@ -262,6 +265,15 @@
return r->IncludeTranslateRequest (s, flags, words[1]);
}
+int InvokeSubProcessRequest (Server *s, Resolver *r,
+ std::vector<std::string> &args)
+{
+ if (args.size () < 2 || args[1].empty ())
+ return -1;
+
+ return r->InvokeSubProcessRequest (s, args);
+}
+
void Server::ErrorResponse (char const *error, size_t elen)
{
write.BeginLine ();