Compare commits

...

2074 Commits

Author SHA1 Message Date
Nathan Sidwell
65165eb3f8 Add -f[no-]header-guard-opt
Added so that one can determine the include graph from the -E output.
2021-02-03 11:37:35 -08:00
Nathan Sidwell
000bee388b Merge commit '84110515b93' into devel/c++-modules 2021-02-03 06:48:16 -08:00
Nathan Sidwell
5938a61434 Th, th, th, that's all folks! 2021-01-04 07:59:53 -08:00
Nathan Sidwell
d8d2f7d752 Merge trunk a5469584f6 2021-01-04 07:53:37 -08:00
Nathan Sidwell
0325be5391 Merge trunk 6288183377 2021-01-04 07:21:50 -08:00
Nathan Sidwell
3c0ed58209 Merge trunk e798f08192 2020-12-21 12:21:11 -08:00
Nathan Sidwell
c3975ce1cc ICE in has_definition
gcc/cp/
	* module.cc (has_definition): Check VAR_DECL's LANG_SPECIFIC.
	gcc/testsuite/
	* g++.dg/modules/gvar_[ab].C: New.
2020-12-21 10:32:45 -08:00
Nathan Sidwell
d34124b256 Merge trunk 35b8d26874 2020-12-18 05:02:54 -08:00
Nathan Sidwell
0043138307 Merge trunk 433703843b 2020-12-15 11:26:27 -08:00
Nathan Sidwell
86c10ae324 Merge trunk 0feb237657 2020-12-15 09:36:55 -08:00
Nathan Sidwell
d01e5088e6 Remove comment
gcc/
	* diagnostic-core.h (progname): Remove comment.
2020-12-14 13:20:15 -08:00
Nathan Sidwell
4295fbcd7a Merge trunk 62c5ea5228 preprocessor: Deferred macro support 2020-12-14 08:28:12 -08:00
Nathan Sidwell
56318eb629 Named pipe support
gcc/cp
	* mapper-client.cc (module_client::open_module): Allow named pipes.
	gcc/
	* doc/invoke.texi (C++ Module Mapper): Document.
2020-12-14 08:14:43 -08:00
Nathan Sidwell
bfe96878c6 Update deferred macro fields
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-14 08:14:43 -08:00
Nathan Sidwell
bb2e188ed7 Merge trunk 9324f7a25c c++: Avoid considering some conversion ops 2020-12-11 19:53:04 -05:00
Nathan Sidwell
68f0e5e053 Code cleanup
gcc/cp/
	* decl2.c (c_parse_final_cleanups): Refactor.
2020-12-11 09:22:34 -08:00
Nathan Sidwell
0b6270c1d0 Merge trunk 1c6b86b50d c++: module test harness 2020-12-11 08:45:02 -08:00
Nathan Sidwell
1a03a5316b Merge trunk e6e4b20de3 c++: name lookup API for modules 2020-12-10 13:28:23 -08:00
Nathan Sidwell
e6e4b20de3 c++: name lookup API for modules
This adds a set of calls to name lookup that are needed by modules.
Generally installing imported bindings, or walking the current TU's
bindings.  One note about template instantiations though.  When we're
about to instantiate a template we have to know about all the
maybe-partial specializations that exist.  These can be in any
imported module -- not necesarily the module defining the template.
Thus we key such foreign templates to the innermost namespace and
identifier of the containing entitity -- that's the only thing we have
a handle on.  That's why we note and load pending specializations here.

	gcc/cp/
	* module.cc (lazy_specializations_p): Stub.
	* name-lookup.h (append_imported_binding_slot)
	(mergeable_namespacE_slots, lookup_class_binding)
	(walk_module_binding, import_module_binding, set_module_binding)
	(note_pending_specializations, load_pending_specializations)
	(add_module_decl, add_imported_namespace): Declare.
	(get_cxx_dialect_name): Declare.
	(enum WMB_flags): New.
	* name-lookup.c (append_imported_binding_slot)
	(mergeable_namespacE_slots, lookup_class_binding)
	(walk_module_binding, import_module_binding, set_module_binding)
	(note_pending_specializations, load_pending_specializations)
	(add_module_decl, add_imported_namespace): New.
	(get_cxx_dialect_name): Make extern.
2020-12-10 13:10:25 -08:00
Nathan Sidwell
ca79818f73 Merge trunk 4f1d8bd509 c++: modules & using-decls 2020-12-10 12:18:26 -08:00
Nathan Sidwell
ff3f561afe Merge trunk afc14c8d0a c++: modularize spelling suggestions 2020-12-10 08:51:13 -08:00
Nathan Sidwell
5411a232ab Remove unneeded tweaks
gcc/cp/
	* name-lookup.c (member_vec_dedup): Remove gratuitous chaining.
	(check_local_shadow): No need to check for clone.
2020-12-09 12:55:07 -08:00
Nathan Sidwell
7aa1b6fd42 Merge trunk e4c3ec980f c++: Module-specific error and tree dumping 2020-12-09 12:33:55 -08:00
Nathan Sidwell
e4c3ec980f c++: Module-specific error and tree dumping
With modules, we need the ability to name 'foos' in different modules.
The idiom for that is a trailing '@modulename' suffix.  This adds that
to the error printing routines.  I also augment the tree dumping
machinery to show module-specific metadata.

	gcc/cp/
	* error.c (dump_module_suffix): New.
	(dump_aggr_type, dump_simple_decl, dump_function_name): Call it.
	* ptree.c (cxx_print_decl): Print module information.
	* module.cc (module_name, get_importing_module): Stubs.
2020-12-09 12:20:53 -08:00
Nathan Sidwell
f87b20c032 c++: name-lookup cleanups
Name-lookup is the most changed piece of the front end for modules.
Here are some preparatort cleanups and API extensions.

	gcc/cp/
	* name-lookup.h (set_class_bindings): Return vector, take signed
	'extra' parm.
	* name-lookup.c (maybe_lazily_declare): Break out ...
	(get_class_binding): .. of here, call it.
	(find_member_slot): Adjust get_class_bindings call.
	(set_class_bindings): Allow -ve extra.  Return the vector.
	(set_identifier_type_value_with_scope): Remove checking assert.
	(lookup_using_decl): Set decl's context.
	(do_pushtag): Adjust set_identifier_type_value_with_scope handling.
2020-12-09 12:20:53 -08:00
Nathan Sidwell
a873eca894 Pre-merge cleanups
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.
2020-12-09 05:54:10 -08:00
Nathan Sidwell
8cbe9fd263 Merge trunk cf97b970fe c++: Decl module-specific semantic processing 2020-12-09 05:01:29 -08:00
Nathan Sidwell
22dd3773a0 Merge trunk 570c312c03 c++: Originating and instantiating module 2020-12-08 12:42:48 -08:00
Nathan Sidwell
1de7ca5efe Merge trunk dded5f78cc c++: template and clone fns for modules 2020-12-08 11:48:10 -08:00
Nathan Sidwell
6fcee7f194 Merge trunk 0bd4fecbea c++: Fix MODULE_VERSION breakage 2020-12-08 11:30:45 -08:00
Nathan Sidwell
b0db6b0b5e Adjust duplicate checker
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.
2020-12-07 12:09:24 -08:00
Nathan Sidwell
f52faf7c78 Merge trunk ffb268ffcf c++: Adjust array type construction 2020-12-07 09:14:11 -08:00
Nathan Sidwell
e968f107df Merge trunk 5a26d4a204 c++: Revert dependent-array changes 2020-12-04 08:59:31 -08:00
Nathan Sidwell
f963b2b0b0 Merge trunk 97eaf8c92f c++: Module API declarations 2020-12-04 05:45:03 -08:00
Nathan Sidwell
a49c711e57 Merge trunk 62fb1b9e0d c++: Fix array type dependency [PR 98107] 2020-12-03 08:55:53 -08:00
Nathan Sidwell
d76a624571 Fix noncanonical_target
c++tools/
	* configure.ac: Need ACX_NONCANONICAL_TARGET
	* configure: Rebuilt.
2020-12-03 06:51:46 -08:00
Nathan Sidwell
8a9aaaf7c1 c++tools: fix typo
c++tools/
	* Makefile.in (libexecdir): Fix typo.
2020-12-03 06:17:49 -08:00
Nathan Sidwell
ead3c5394d More documentation
gcc/
	* doc/invoke.texi (C++ Modules): Add CMI section.
2020-12-02 15:06:45 -05:00
Nathan Sidwell
fd5e5a257b Merge some lang_decl flags
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.
2020-12-02 11:28:51 -08:00
Nathan Sidwell
67c23df4fa Merge trunk 05f7a2afe8 C++ Module Binding Vector 2020-12-02 06:34:57 -08:00
Nathan Sidwell
6420399409 Merge trunk 41676a36a0 C++ Module keywords 2020-12-02 05:41:56 -08:00
Nathan Sidwell
89611c477c A Grand Renaming -- Crackin'!
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.
2020-12-02 05:25:26 -08:00
Nathan Sidwell
a2ece73254 Move struct module_vector
gcc/cp/
	* cp-tree.h (struct tree_module_vec): Move to ...
	* name-lookup.h (struct tree_module_vec): ... here.
2020-12-02 04:52:07 -08:00
Nathan Sidwell
12930302c2 Rename a struct
gcc/cp/
	* lex.c (struct token_coro): Rename to ...
	(struct module_token_filter): ... here.  Adjust through out.
2020-12-02 04:39:35 -08:00
Nathan Sidwell
dfdce31c9e libcody: Update from upstream, removing deprecated functions. 2020-12-01 10:40:38 -08:00
Nathan Sidwell
ee1460b684 Merge trunk 855bb43f6d 2020-12-01 09:18:56 -08:00
Nathan Sidwell
b1ee8f1468 Merge trunk eae68c434f testsuite: Adjust pruning 2020-12-01 08:33:45 -08:00
Nathan Sidwell
6e1fc16ff9 Merge trunk 83a1beee27 libstdc++: Add C++2a synchronization support 2020-12-01 07:54:15 -08:00
Nathan Sidwell
25ed79ba13 Fix noexcept circularity
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-12-01 07:19:42 -08:00
Nathan Sidwell
7c6ac2a899 Documentation updates
gcc/
	* doc/invoke.texi: Updates from review.
2020-11-30 05:06:56 -08:00
Nathan Sidwell
e9bbe7ce0b Merge trunk 89d9c634dc 2020-11-24 05:36:59 -08:00
Nathan Sidwell
3453ca9c92 Note some potential issues
gcc/cp/
	* Make-lang.in: Don't depend VERSION on src dir.
	* module.cc: Note some potential issues.
2020-11-24 05:36:08 -08:00
Nathan Sidwell
505e63fe26 Add flang-include-translate-not
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.
2020-11-24 05:35:58 -08:00
Nathan Sidwell
0e9a89a169 Include translate finesse
libcody/
	Update from upstream, INCLUDE_TRANSLATE response meaning change
2020-11-23 04:51:57 -08:00
Nathan Sidwell
5a52a0a4a1 Doc fixes
gcc/
	* doc/invoke.texi: Fixes.
2020-11-20 12:10:16 -05:00
Nathan Sidwell
535f1eaf8d libcody: Update from upstream. 2020-11-20 07:37:20 -08:00
Nathan Sidwell
a089fe1fbb Adjust template spec accessor
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.
2020-11-20 07:23:14 -08:00
Nathan Sidwell
e225fe8f4f Remove erraneous doc delete 2020-11-20 10:16:37 -05:00
Nathan Sidwell
eb6351eac9 Update docs
gcc/
	* doc/invoke.texi: Update
	* doc/cppopts.texi: Update
2020-11-20 10:11:14 -05:00
Nathan Sidwell
02d6056179 Merge trunk 5bba2215c2 c++: Template hash access 2020-11-20 04:30:57 -08:00
Nathan Sidwell
0ef7a82c24 Merge trunk bf425849f1 preprocessor: main-file cleanup 2020-11-19 04:59:15 -08:00
Nathan Sidwell
3e3a50eb0c Tidy up preprocess_undef lang_hook
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.
2020-11-18 13:13:32 -08:00
Nathan Sidwell
9a9d2e6556 Tidy up main_file detection
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.
2020-11-18 13:12:50 -08:00
Nathan Sidwell
49a91b6fe2 Merge trunk 92648faa1c
08-cpp-mkdeps.diff
	05-cpp-files.diff
	04a-cpp-lexer.diff
	32-aix-fixincl.diff
2020-11-18 11:55:38 -08:00
Nathan Sidwell
057222167c Merge trunk d3ae802402
01-langhooks.diff
	02-cpp-line-maps.diff
	03-cpp-callbacks.diff
	19-global-trees.diff
	21a-int-cst.diff
2020-11-18 04:50:39 -08:00
Nathan Sidwell
99c594dda5 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.
2020-11-16 10:34:25 -08:00
Nathan Sidwell
2d23df6e99 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.
2020-11-16 09:36:47 -08:00
Nathan Sidwell
d3af74a5cf Merge trunk 63496cbea5 2020-11-16 05:14:36 -08:00
Nathan Sidwell
33ef7083da 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-16 04:53:47 -08:00
Nathan Sidwell
2711152d89 Merge trunk d50310408f c++: Implement C++20 'using enum' 2020-11-13 11:18:24 -08:00
Nathan Sidwell
aab3efb1b2 Merge trunk e3b3b59683 2020-11-13 10:56:59 -08:00
Nathan Sidwell
286a25f3b6 Fix libiberty linking
* g++tools/Makefile.in (LIBIBERTY): New.
2020-11-13 09:02:28 -08:00
Nathan Sidwell
6393b1f93a Merge trunk 5fa821bba73# 2020-11-13 05:20:55 -08:00
Nathan Sidwell
c265470c48 Merge trunk 7f851c3341 libstdc++: Fix __numeric_traits_integer<__int20> 2020-11-12 12:06:03 -08:00
Nathan Sidwell
f41bab85db 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.
2020-11-12 11:44:15 -08:00
Nathan Sidwell
49305748e8 Fix some configure errors
* Makefile.def: Fix g++ check implications.
	* Makefile.in: Rebuilt.
	gcc/
	* config.in: Rebuilt.
	* configure: Rebuilt.
	* configure.ac: Remove unneeded checks
	gcc/cp/
2020-11-12 09:02:34 -08:00
Nathan Sidwell
3d7945021a Merge trunk 3c3beb1a81 2020-11-12 08:05:39 -08:00
Nathan Sidwell
db742646c1 Update to new Cody::Resolver API
c++tools/
	* resolver.h (module_resolver): Update to new API.
	* resolver.cc (module_resolver): Likewise.
2020-11-11 09:54:30 -08:00
Nathan Sidwell
257f541310 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.
2020-11-11 06:25:33 -08:00
Nathan Sidwell
0835527413 Add mapper flags support
c++tools/
	* mapper.h (class mapper_client): Add flag support.
	gcc/cp/
	* mapper-client: Likewise.
	* module.cc (maybe_translate_include): Likewise.
	(preprocessed_module): Likewise.
2020-11-10 11:58:38 -08:00
Nathan Sidwell
6bfad31b62 Rebase libcody -- $flag support.
libcody/
	Rebase on upstream -- $flag support.
2020-11-10 11:54:25 -08:00
Nathan Sidwell
2e6ccb7833 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: Movedfrom 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-10 10:12:17 -08:00
Nathan Sidwell
47a70f40ef Merge trunk e38cd64ac6 c++: ADL refactor 2020-11-09 05:27:36 -08:00
Nathan Sidwell
3658892018 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-09 04:51:00 -08:00
Nathan Sidwell
0986ce3ae9 Merge trunk 4b5f564a5d libcpp: Provide date routine 2020-11-06 10:27:15 -08:00
Nathan Sidwell
98186da5a2 Document cache_integer_cst
gcc/
	tree.c (cache_integer_cst): Document API.
2020-11-06 09:04:49 -08:00
Nathan Sidwell
130faab585 Alter revision setting
gcc/cp/
	* Make-lang.in: Drop git hash collection.
	gcc/
	* REVISION: New.
2020-11-06 05:55:31 -08:00
Nathan Sidwell
4a919dcc71 Revert some local changes
gcc/cp/
	* parser.c (cp_parser_diagnose_invalid_type_name): Revert local
	changes.
2020-11-06 05:28:11 -08:00
Nathan Sidwell
9582481c72 Genericize time API
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-06 05:27:05 -08:00
Nathan Sidwell
484c64ebaf support SOURCE_DATE_EPOCH
gcc/cp/
	* module.cc (module_state::write_Readme): Add cpp_reader parm, use
	cb_get_source_data_epoch to see if the time is locked.
2020-11-05 12:53:23 -08:00
Nathan Sidwell
8ab6ed9c4f Fixup merge kind enum
gcc/cp/
	* module.cc (enum merge_kind): Minor remapping.
	(merge_kind_name): Adjust.
2020-11-05 12:28:17 -08:00
Nathan Sidwell
ddae3c4f2e Remove now-unreachable tmpl_partial handling
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.
2020-11-05 12:06:33 -08:00
Nathan Sidwell
02dd63c9e6 Replace EK_DECL + DB_PARTIAL_BIT with EK_PARTIAL
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.
2020-11-05 11:32:10 -08:00
Nathan Sidwell
c6a08b99e7 Constrained partial specializations
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.
2020-11-05 08:01:58 -08:00
Nathan Sidwell
4c56b02498 Adjust module-mapper path search behaviour
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-05 05:33:47 -08:00
Nathan Sidwell
a331aa92fb fix scan for i686
gcc/testsuite/
	* g++.dg/modules/builtin-3_[ab].C: Adjust for i686
2020-11-04 07:19:34 -08:00
Nathan Sidwell
1c548a8f65 Fix i686 build failure
gcc/cp/
	* mapper-resolved.cc: define INCLUDE_ALGORITHM.
2020-11-04 06:55:37 -08:00
Nathan Sidwell
dbce8dbd1b Merge trunk a52bf01643 c++: using-decl instantiation 2020-11-03 10:36:50 -08:00
Nathan Sidwell
0ecda01a12 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
2020-11-03 10:35:56 -08:00
Nathan Sidwell
cbf381f3e1 Merge trunk 444655b6f0 c++: cp_tree_equal cleanups 2020-11-03 06:40:09 -08:00
Nathan Sidwell
b269b6ce45 Remove unneeded fn
libcpp/
	* include/cpplib.h (cpp_enable_filename_token): Delete.
	* macro.c (cpp_enable_filename_token): Delete.
2020-11-03 05:56:17 -08:00
Nathan Sidwell
c385d545b0 Merge trunk b2a31e2c34 2020-11-02 06:28:38 -08:00
Nathan Sidwell
41710c43ad Kill obsolete FIXME
gcc/cp/
	* module.cc (module_state::write_elf): Remove obsolete FIXME.
2020-11-02 04:58:50 -08:00
Nathan Sidwell
bd3edcc6e0 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.
2020-10-30 10:35:50 -07:00
Nathan Sidwell
46337895de More FIXMEs 2020-10-30 09:09:25 -07:00
Nathan Sidwell
81b4ae98a7 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.
2020-10-30 07:55:24 -07:00
Nathan Sidwell
f3bd075e5b 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-30 06:19:20 -07:00
Nathan Sidwell
f129054735 Fixme addressing 2020-10-29 14:04:29 -07:00
Nathan Sidwell
db9d03292b 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.
2020-10-29 13:24:51 -07:00
Nathan Sidwell
1dd2d6c253 Fix FIXMEs
gcc/cp/
	* module.cc (trees_out::get_merge_kind): Resolve FIXMEs.
	(trees_out::key_mergeable): Likewise.
2020-10-29 10:24:34 -07:00
Nathan Sidwell
7e388a776a Check function-scope nameable decls are typedefs
gcc/cp/
	* module.cc (trees_out::get_merge_kind): Only function-scope
	entities we meet are implicit TYPE_DECLs.
2020-10-29 09:37:58 -07:00
Nathan Sidwell
1679952c7a Merge trunk 9703b8d98c c++: Stop (most) function-scope entities having a template header 2020-10-29 08:48:20 -07:00
Nathan Sidwell
6cf1a723f8 Merge trunk bafcf452c7 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.
2020-10-29 08:23:30 -07:00
Nathan Sidwell
7105aeb958 Merge trunk 53dede0f04 CSE conversions within sincos 2020-10-29 07:54:45 -07:00
Nathan Sidwell
e6a58c9189 Merge trunk 4289e488dd c++: Make OMP UDR DECL_LOCAL_DECL_P earlier 2020-10-28 11:49:19 -07:00
Nathan Sidwell
c7c4e6db5e Merge trunk 7d5f38e49e c++: Refactor push_template_decl 2020-10-28 08:26:32 -07:00
Nathan Sidwell
95ca0ee653 More FIXMEs
gcc/cp/
	* module.cc: More FIXME addressing.
	(trees_out::get_merge_kind): Assert function-scope entities are
	not unexpected.
2020-10-28 07:24:47 -07:00
Nathan Sidwell
6c2dc8d4a3 Address FIXMES
gcc/cp/
	* module.cc: More FIXME fixing.
2020-10-28 05:57:02 -07:00
Nathan Sidwell
c8125a20de Fix various -xc++-header flags
gcc/cp/
	* lang-specs.h: Fix -xc++-{,user-,system-}header.
2020-10-28 05:35:42 -07:00
Nathan Sidwell
c99d1f0b66 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.
2020-10-27 12:59:06 -07:00
Nathan Sidwell
3443305d12 Add tr1 as header unit
gcc/testsuite/
	* g++.dg/modules/xtreme-tr1{.h,_a.H,_b.C}: New.
2020-10-27 12:38:33 -07:00
Nathan Sidwell
df57ef6f2e Anonymous members with typedef name
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.
2020-10-27 12:29:42 -07:00
Nathan Sidwell
f5f2ca3000 Address a couple of FIXMEs
gcc/cp/
	* module.cc (depset_cmp): Decide strcmp question.
	(module_state::write_prepare_maps): Document pruning question.
2020-10-27 10:35:52 -07:00
Nathan Sidwell
a8f8a80306 nested udts are not a thing
gcc/cp/
	* module.cc (trees_{in,out}::{read,write}_class_def): Remove
	nested udt FIXMEs.  They are no longer a thing.
2020-10-27 10:24:02 -07:00
Nathan Sidwell
c06eb13861 Merge trunk 54380d42e6 c++: Kill nested_udts 2020-10-27 10:21:34 -07:00
Nathan Sidwell
1bcfe77203 Type attributes
gcc/cp/
	* module.cc (trees_{in,out{::type_node): Stream attribs.
2020-10-26 12:31:23 -07:00
Nathan Sidwell
2bd8a7ca3d Aligned type support
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.
2020-10-26 10:52:21 -07:00
Nathan Sidwell
cb8c13729c More FIXME resolution
gcc/cp/
	* module.cc (trees_{in,out}::tree_list): Address more Fixmes,
	either by obsoleting them, or coding around their confusion.
2020-10-26 10:26:14 -07:00
Nathan Sidwell
8cabe89e17 libcody rebase
libcody/
	Rebase on upstream, robustify enable-checking.
2020-10-26 09:51:40 -07:00
Nathan Sidwell
059a635068 Avoid nreverse on readback
gcc/cp/
	* module.cc (trees_{in,out}::tree_list): New streamers.
	(trees_{in,out}::{read,write}_class_def): Use them.
2020-10-26 06:41:50 -07:00
Nathan Sidwell
a63681e296 More FIXME resolving, mainly in documentation
gcc/cp/
	* module.cc: Remove or clarify more now-obsolete FIXMEs.
2020-10-26 05:55:25 -07:00
Nathan Sidwell
2d1e598895 Clarify FIXMES in documentation
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): Document
	middle-endy/debugy BLOCK fields.  Document OPTIMIZATION_NODE &
	TARGET_OPTION_NODE issue.
2020-10-26 05:21:41 -07:00
Nathan Sidwell
a0d842c128 Fix RESULT_DECL streaming
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): RESULT_DECL is like PARM_DECL.
2020-10-26 05:21:22 -07:00
Nathan Sidwell
3931fe3d77 Rebase libcody, fix bootstrap
libcody/
	Rebase on upstream, fix enable-checking & bootstrap
2020-10-26 04:55:04 -07:00
Nathan Sidwell
11e0a02ed6 Suspicious FIXME is obsolete
gcc/cp/
	* module.cc (trees_in::chained_decls): Chain should always be null.
2020-10-26 04:54:00 -07:00
Nathan Sidwell
ac089f0a16 libcody rebase
libcody/
	Rebase on upstream, collect new autoconf bits.
2020-10-26 04:26:00 -07:00
Nathan Sidwell
9c31225a43 Address some FIXMEs
gcc/cp/
	* module.cc: Address 3 now-irrelevant FIXMES.
2020-10-23 12:26:24 -07:00
Nathan Sidwell
cf17ae6ada Reorder enum merge_kind
gcc/cp/
	* module.cc (enum merge_kind): Reorder.
	(merge_kind_name): Likewise.
2020-10-23 12:09:01 -07:00
Nathan Sidwell
e20d6929a6 Merge trunk cd8b7d7b24
Link with the configured net lib on vxworks7
2020-10-23 10:25:06 -07:00
Nathan Sidwell
2ef34e81b2 Merge trunk e957b86ca2
libstdc++: Rebase include/pstl to current upstream
	gcc/testsuite/
	PR 97549 workaround
	* g++.dg/modules/xtream-header{,-2}.h: Don't include <exception>.
2020-10-23 10:24:29 -07:00
Nathan Sidwell
bf53df8813 Merge trunk 310fe80bab
Fortran: class.c - update vtable comment
2020-10-23 07:38:33 -07:00
Nathan Sidwell
24501a7519 More windows host bits
gcc/cp/
	* mapper-server.cc: Disable networking when not available.
2020-10-23 07:03:37 -04:00
Nathan Sidwell
d963288e3a More windows defense
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.
2020-10-22 18:37:07 -04:00
Nathan Sidwell
de3ad5aa97 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.
2020-10-22 11:53:02 -07:00
Nathan Sidwell
0cd3c276ab function arg contexts
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.
2020-10-22 08:57:44 -07:00
Nathan Sidwell
d028af9e5f libcody update
libcody/
	* fatal.cc: noexcept fix from Iain Sandoe.
2020-10-22 10:59:41 -04:00
Nathan Sidwell
215d369942 Anticipated builtin smashing
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.
2020-10-22 05:13:32 -07:00
Nathan Sidwell
6246418aa4 Module mapper networking enablement
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-22 07:46:04 -04:00
Nathan Sidwell
ec6be390c6 Do not install libcody
* Makefile.def: Don't build libcody for build.  Do not install it
	either.
	* Makefile.in: Rebuilt.
2020-10-21 17:45:01 -04:00
Nathan Sidwell
f7bac0295d 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.
2020-10-21 11:02:47 -07:00
Nathan Sidwell
853067ac5e Trivial darwin test fix
gcc/testsuite/
	* g++.dg/modules/builtin-3_[ab].C: Scans for darwin, thanks Iain
2020-10-21 12:37:20 -04:00
Nathan Sidwell
385f83480f AIX fixinclude
fixincludes/
	* inclhack.def (aix_physadr_t): New.
	* fixincl.x: Regenerated.
2020-10-21 10:43:42 -04:00
Nathan Sidwell
62d7aae08f AIX test fix
gcc/testsuite/
	* g++.dg/modules/literals-1_[ab].C: Add -Wno-psabi
2020-10-21 06:14:43 -07:00
Nathan Sidwell
43d3295555 libcody fix
gcc/
	* Makefile.in (INCLUDES): Add $(CODYINC).
2020-10-20 12:23:55 -07:00
Nathan Sidwell
1a32988713 AIX sed fix
gcc/cp/
	* Make-lang.in (GIT_INFO): Support stricter seds.
2020-10-20 12:23:02 -07:00
Nathan Sidwell
cdaf02a04d Local-extern fix
gcc/cp
	* name-lookup.c (push_local_extern_decl_alias): Fix default arg bug.
2020-10-20 12:22:01 -07:00
Nathan Sidwell
225c2bdd6f 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.
2020-10-20 11:04:25 -07:00
Nathan Sidwell
413b468076 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.
2020-10-20 09:34:10 -07:00
Nathan Sidwell
b97e108859 Add libcody source
* libcody/: Import by value.
2020-10-20 09:33:51 -07:00
Nathan Sidwell
ea1205e3bb AIX madvise fix
gcc/cp/
	* module.cc (elf_in::begin): Fix madvise on AIX.
2020-10-20 07:33:46 -07:00
Nathan Sidwell
d502e14d8f Fix non-mapped file io
gcc/cp/
	* module.cc: Add testing for non-mmapped access.
	(elf_out::grow): Assert aligned at start.
	(elf_out::write): Align afterwards.
2020-10-19 12:49:14 -07:00
Nathan Sidwell
f5a64e960c Fix arm test fail
gcc/testsuite/
	* g++.dg/modules/sym-subst-3_a.C: Some assemblers say .global.
2020-10-19 09:28:45 -07:00
Nathan Sidwell
cf8ab1c0a4 Fix macro locs on darwin and ppc-linux (and probably others)
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-19 09:18:43 -07:00
Nathan Sidwell
2ec0cbf131 Merge trunk ccb4f20cbe 2020-10-16 11:58:51 -07:00
Nathan Sidwell
4c19fa0e25 exporting using decl
gcc/cp/
	* name-lookup.c (do_nonmember_using_decl): Fix duplication case.
2020-10-16 10:59:20 -07:00
Nathan Sidwell
ed9415022f Simplify binding callback API
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.
2020-10-15 12:11:07 -07:00
Nathan Sidwell
eb7a9f02da Header unit static inits
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.
2020-10-15 11:19:30 -07:00
Nathan Sidwell
62406deca5 Remove internal-linkage kludge
gcc/cp/
	* module.cc (depset::hash::finalize_dependencies): Remove
	pre-p2003 kludge.
2020-10-14 12:49:07 -07:00
Nathan Sidwell
9b71f432d2 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.
2020-10-14 12:15:57 -07:00
Nathan Sidwell
822d875cc5 Resolve pt.c FIXMEs
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.
2020-10-14 11:17:19 -07:00
Nathan Sidwell
b7c73fc949 Merge trunk 068644a149 (c++: DECL_FRIEND_P cleanup) 2020-10-14 10:49:20 -07:00
Nathan Sidwell
40513f1fb1 Merge trunk 06bec55e80 2020-10-14 10:31:47 -07:00
Nathan Sidwell
b4d0492028 Remove some obsolete fixmes
gcc/cp/
	* decl.c (duplicate_decls): Remove obsolete FIXME.
	* pt.c (push_template_decl): Remove about-to-be obsolete FIXME.
2020-10-14 10:06:36 -07:00
Nathan Sidwell
808df6317c Defining an import
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-14 10:05:20 -07:00
Nathan Sidwell
5730436827 Document unicode plan
libcpp/
	* lex.c (do_peek_module): Update plan for unicode.
2020-10-09 09:15:10 -07:00
Nathan Sidwell
b37aaf57ec fmodule-implicit-inline comment
gcc/cp/
	* decl.c (grokmethod): Remove comment about -fmodule-implicit-inline.
2020-10-09 08:30:07 -07:00
Nathan Sidwell
3152c118ca 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.
2020-10-09 08:21:30 -07:00
Nathan Sidwell
363f58ec8b Remove unused code
gcc/cp/
	* friend.c (add_friend): Remove #if'd out code
2020-10-09 07:51:18 -07:00
Nathan Sidwell
aad9dacffc 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.
2020-10-09 07:48:07 -07:00
Nathan Sidwell
98e9001194 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.
2020-10-09 07:47:57 -07:00
Nathan Sidwell
8047291fa5 Clean up mangling documentation
gcc/cp/
	* mangle.c (write_module): Update grammar description.
	* module.cc (module_state::mangle): Clarify why partitions might
	be significant.
2020-10-09 06:44:25 -07:00
Nathan Sidwell
563a32906f 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-09 06:06:25 -07:00
Nathan Sidwell
767eedddf4 Merge trunk d1c566d72d 2020-10-09 03:48:07 -07:00
Nathan Sidwell
a847e5c151 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-08 12:17:13 -07:00
Nathan Sidwell
3018e16e73 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-08 11:57:58 -07:00
Nathan Sidwell
d136cdaa41 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.
2020-10-08 09:59:20 -07:00
Nathan Sidwell
12234ffe6c Location shortage note
gcc/cp/
	* module.cc (module_state::read_prepare_maps): Only inform of
	location shortage once.
2020-10-08 05:20:27 -07:00
Nathan Sidwell
4e65e528f3 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.
2020-10-08 04:55:24 -07:00
Nathan Sidwell
f5f9f2debe Merge trunk 4e62aca0e0 (c++: block-scope externs get an alias) 2020-10-07 08:33:31 -07:00
Nathan Sidwell
dc91b82fab Merge trunk e089e43365 2020-10-07 07:59:20 -07:00
Nathan Sidwell
7839315180 Merge trunk 255aa06d40 2020-10-07 07:25:05 -07:00
Nathan Sidwell
8150ef4e30 Merge trunk bf490f0636 2020-10-07 07:11:05 -07:00
Nathan Sidwell
1371d2fd7c c++: Make spell corrections consistent
My change to namespace-scope spell corrections ignored the issue that
different targets might have different builtins, and therefore perturb
iteration order.  This fixes it by using an intermediate array of
identifier, which we sort before considering.

	gcc/cp/
	* name-lookup.c (maybe_add_fuzzy_decl): New.
	(maybe_add_fuzzy_binding): New.
	(consider_binding_level): Use intermediate sortable vector for
	namespace bindings.
	gcc/testsuite/
	* c-c++-common/spellcheck-reserved.c: Restore diagnostic.
2020-10-05 07:00:58 -07:00
Nathan Sidwell
52ab3aea01 Merge trunk 679dbc9dce (c++: Kill DECL_ANTICIPATED) 2020-10-02 13:54:58 -07:00
Nathan Sidwell
c24f808c49 Merge trunk 7ee1c0413e (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.
2020-10-02 13:29:52 -07:00
Nathan Sidwell
494311c339 Merge trunk 9340d1c97b (c++: cleanup ctor_omit_inherited_parms) 2020-10-02 13:09:16 -07:00
Nathan Sidwell
bf62288a8b Merge trunk 3158482466 2020-10-02 12:50:50 -07:00
Nathan Sidwell
af5b22ea82 Merge trunk dfaa24c974 (c++: Kill DECL_HIDDEN_P) 2020-10-02 12:37:28 -07:00
Nathan Sidwell
6aff291867 Remove DECL_HIDDEN use from modules
gcc/cp/
	* name-lookup.c (walk_module_binding): Update for new HIDDEN markers.
2020-10-02 12:27:00 -07:00
Nathan Sidwell
33fd0e7ffb Merge trunk c2978b3405 2020-10-02 12:04:06 -07:00
Nathan Sidwell
baaabe0523 Merge trunk c2978b3405 2020-10-01 12:25:29 -07:00
Nathan Sidwell
437d6ec6cc Missed commit 2020-10-01 11:23:35 -07:00
Nathan Sidwell
2bb414bcb5 c++: Kill DECL_HIDDEN_FRIEND_P (trunk 734eed6853) 2020-10-01 09:58:20 -07:00
Nathan Sidwell
a329d25fb7 Merge trunk 65167982ef 2020-10-01 06:56:51 -07:00
Nathan Sidwell
81b83669df Merge trunk 7cbfe0894d 2020-10-01 06:27:10 -07:00
Nathan Sidwell
bc57d1f5d1 Merge trunk adcf8a11c7 2020-10-01 05:59:06 -07:00
Nathan Sidwell
bf42cd2284 Merge trunk cc61827b55 2020-10-01 05:32:26 -07:00
Nathan Sidwell
5e13acd2be Merge trunk 39a27bb01a 2020-09-30 19:16:03 -07:00
Nathan Sidwell
0d893c686e Merge trunk c74e6f7cfd 2020-09-30 14:44:01 -07:00
Nathan Sidwell
9dd9897ed3 c++: Hiddenness is a property of the symbol table (trunk 7cbfe0894d) 2020-09-30 13:26:08 -07:00
Nathan Sidwell
9be6759067 c++: Name lookup simplifications (trunk adcf8a11c7) 2020-09-30 12:00:54 -07:00
Nathan Sidwell
c109cb9336 c++: Identifier type value should not update binding (trunk cc61827b55) 2020-09-30 11:08:24 -07:00
Nathan Sidwell
23841c9ab8 c++: Adjust pushdecl/duplicate_decls API (merge c74e6f7cfd) 2020-09-30 10:40:50 -07:00
Nathan Sidwell
852d73592c Prepare ovl_using for merge
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.
2020-09-30 09:35:15 -07:00
Nathan Sidwell
0106c98b91 c++: Replace tag_scope with TAG_how (merge 00aaae03db) 2020-09-30 07:30:51 -07:00
Nathan Sidwell
f5f068505a Merge trunk 0d8f3f612d 2020-09-30 07:09:30 -07:00
Nathan Sidwell
298eb88294 Merge trunk d13c0ae859 2020-09-24 20:43:55 -04:00
Nathan Sidwell
7a4d1524b3 Merge trunk cd6743e9c4 2020-09-14 12:21:08 -07:00
Nathan Sidwell
650163b267 Assert assumptions
gcc/cp/
	* module.cc (trees_out::get_merge_kind): Add asserts & FIXMEs.
2020-09-14 12:03:48 -07:00
Nathan Sidwell
ec1fefe043 Use VAR_OR_FUNCTION_DECL_P
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.
2020-09-14 10:34:45 -07:00
Nathan Sidwell
d02ded08f5 Merge trunk d106029c2a 2020-09-14 07:03:59 -07:00
Nathan Sidwell
7ffecad5c8 Merge trunk 10f51543bb
libstdc++: Add compile-time checks to__glibcxx_assert [PR 71960]
2020-09-14 06:33:38 -07:00
Nathan Sidwell
a1fed5312e Concepts and local externs
gcc/cp/
	* decl.c (grokfndecl): Don't attach to local extern.
	gcc/testsuite/
	* concepts/local-extern.C: New.
2020-09-14 05:54:19 -07:00
Nathan Sidwell
33be02f918 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-14 05:54:18 -07:00
Nathan Sidwell
84f2dc7a13 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.
2020-09-14 05:54:18 -07:00
Nathan Sidwell
065650c9da Add 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-14 05:54:07 -07:00
Nathan Sidwell
b63aa6567e 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-14 04:56:09 -07:00
Nathan Sidwell
4949a75130 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-12 10:58:03 -04:00
Nathan Sidwell
051f07cfa4 Merge trunk 8bc0f24d7a 2020-09-03 07:29:35 -07:00
Nathan Sidwell
3cb5b2bc2f 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-03 05:33:35 -07:00
Nathan Sidwell
3a846b5f96 include-next should not be xlated
libcpp/
	* files.c (_cpp_stack_file): Don't try and xlate include-next.
2020-09-02 12:06:39 -07:00
Nathan Sidwell
0a3599b598 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.
2020-09-02 12:05:45 -07:00
Nathan Sidwell
a73506a776 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-09-02 05:21:45 -07:00
Nathan Sidwell
7d342ac6fa C++ headers need directives-only preprocessing
gcc/cp/
	* lang-specs.h: c++headers always do directives-only preprocessing
	in modules mode.
2020-09-01 12:44:35 -07:00
Nathan Sidwell
4d4b2024b7 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.
2020-09-01 12:43:41 -07:00
Nathan Sidwell
9ddb36a37c Zero length mapper files
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.
2020-08-31 11:51:26 -07:00
Nathan Sidwell
965e986d18 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.
2020-08-31 10:52:10 -07:00
Nathan Sidwell
3e615e8d56 GMF namespace fix
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-31 07:34:06 -07:00
Nathan Sidwell
6f28db12d7 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.
2020-08-28 12:02:25 -07:00
Nathan Sidwell
c7c243c3ef Tweak ICE pruning
gcc/testsuite/
	* lib/prune.exp (prune_ices): Adjust regexp.
2020-08-28 06:19:29 -07:00
Nathan Sidwell
16f045d0e8 Merge trunk cb3c3d6331
Whee, all up to date!
2020-08-28 05:55:31 -07:00
Nathan Sidwell
c2285e6735 Merge trunk f1612b8ae8
c++: Check satisfaction before non-dep convs. [CWG2369]
	gcc/testsuite/
	* g++.dg/modules/concept-[13]_b.C: Adjust.
2020-08-28 05:32:05 -07:00
Nathan Sidwell
8d670e3e46 Merge trunk e6e01618e8. 2020-08-28 05:01:13 -07:00
Patrick Palka
82529869ce libstdc++: integer-class types as per [iterator.concept.winc]
This implements signed and unsigned integer-class types, whose width is
one bit larger than the widest supported signed and unsigned integral
type respectively.  In our case this is either __int128 and unsigned
__int128, or long long and unsigned long long.

Internally, the two integer-class types are represented as a largest
supported unsigned integral type plus one extra bit.  The signed
integer-class type is represented in two's complement form with the
extra bit acting as the sign bit.

libstdc++-v3/ChangeLog:

	* include/Makefile.am (bits_headers): Add new header
	<bits/max_size_type.h>.
	* include/Makefile.in: Regenerate.
	* include/bits/iterator_concepts.h
	(ranges::__detail::__max_diff_type): Remove definition, replace
	with forward declaration of class __max_diff_type.
	(__detail::__max_size_type): Remove definition, replace with
	forward declaration of class __max_size_type.
	(__detail::__is_unsigned_int128, __is_signed_int128)
	(__is_int128): New concepts.
	(__detail::__is_integer_like): Accept __int128 and unsigned
	__int128.
	(__detail::__is_signed_integer_like): Accept __int128.
	* include/bits/max_size_type.h: New header.
	* include/bits/range_access.h: Include <bits/max_size_type.h>.
	(__detail::__to_unsigned_like): Two new overloads.
	* testsuite/std/ranges/iota/difference_type.cc: New test.
	* testsuite/std/ranges/iota/max_size_type.cc: New test.
2020-08-27 13:17:57 -07:00
Nathan Sidwell
28d02ccd11 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 13:17:43 -07:00
Nathan Sidwell
0fe27d8441 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 10:57:25 -07:00
Nathan Sidwell
95d673d68c Merge trunk 708b3600d0. 2020-08-27 07:22:14 -07:00
Nathan Sidwell
c858355c6a Merge trunk 17abcc7734
libstdc++: Replace operator>>(istream&, char*) [LWG 2499]
2020-08-26 13:02:58 -07:00
Nathan Sidwell
2383be81dd 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.
2020-08-26 12:09:54 -07:00
Nathan Sidwell
ee7260fe55 Fix int_cst caching
gcc/
	* tree.c (cache_integer_cst): Fix pointer type indices.
2020-08-26 08:49:04 -07:00
Nathan Sidwell
971750eab0 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-26 06:18:41 -07:00
Nathan Sidwell
850418a6ed 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-25 06:42:16 -07:00
Nathan Sidwell
425d7384b5 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.
2020-08-20 13:00:12 -07:00
Nathan Sidwell
71e19827e4 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.
2020-08-20 10:49:49 -07:00
Nathan Sidwell
eb8dd5a3a3 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-20 10:25:24 -07:00
Nathan Sidwell
7023d170c7 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-19 17:10:55 -04:00
Nathan Sidwell
639941e922 c++: Move hidden-lambda entity lookup checking
Hidden lambda entities only occur in block and class scopes.  There's
no need to check for them on every lookup.  So moving that particular
piece of validation to lookup_name_1, which cares.  Also reordered the
namespace and type checking, as that is also simpler.

	gcc/cp/
	* name-lookup.c (qualify_lookup): Drop lambda checking here.
	Reorder namespace & type checking.
	(lookup_name_1): Do hidden lambda checking here.
2020-08-18 06:22:18 -07:00
Nathan Sidwell
485e29be36 Fix -save-temps issue
libcpp/
	* lex.c (cpp_maybe_module_directive): Increment prevent_expansion
	if not expanding.
2020-08-18 09:00:19 -04:00
Nathan Sidwell
6ac22fbbde Update module mapper documentation
gcc/
	* doc/invoke.texi (C++ Module Mapper): Update documentation.
2020-08-17 20:18:07 -04:00
Nathan Sidwell
f198081bb5 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-17 15:26:08 -04:00
Nathan Sidwell
485bf433e2 c++: Final bit of name-lookup api simplification
We no longer need to give name_lookup_real not name_lookup_nonclass
different names to the name_lookup functions.  This renames the lookup
functions thusly.

	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.
2020-08-14 17:11:01 -07:00
Nathan Sidwell
b5db575f59 c++: Yet more name-lookup api simplification
This patch deals with LOOKUP_HIDDEN, which originally meant 'find
hidden friends', but it's being pressed into service for not ignoring
lambda-relevant internals.  However these two functions are different.
(a) hidden friends can occur in block scope (very uncommon) and (b) it
had the semantics of stopping after the innermost enclosing
namepspace.  That's really suspect for the lambda case, but not
relevant there because we never get to namespace scope (I think).
Anyway, I've split the flag into two and adjusted the lambda callers
to just search block scope.  These two flags are added to the
LOOK_want enum class, which allows dropping another parameter from the
name lookup routines.

The remaining LOOKUP_$FOO flags in cp-tree.h are, I think, now all
related to features of overload resolution, conversion operators and
reference binding.  Nothing to do with /name/ lookup.

	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.
2020-08-14 15:56:18 -07:00
Nathan Sidwell
a6c852f4fc more name-lookup api cleanups
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-14 08:24:34 -07:00
Nathan Sidwell
60356152cb Unconfuse lookup_name_real API a bit
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-13 11:23:11 -07:00
Nathan Sidwell
6302da22e9 Merge trunk d21252de6c 2020-08-07 15:37:36 -07:00
Nathan Sidwell
87f1ccd4c5 Address 2 FIXMEs
gcc/cp/
	* name-lookup.c (finish_nonmember_using_decl): Here.
	(lookup_type_scope_1): Here.
2020-08-07 08:45:06 -07:00
Nathan Sidwell
d5750e3cba 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)
2020-08-07 08:45:06 -07:00
Nathan Sidwell
5b13659247 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.
2020-08-07 08:45:05 -07:00
Nathan Sidwell
7ad53d850a 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-07 08:44:50 -07:00
Nathan Sidwell
42461b826d Remove now-unneeded dedup bits
gcc/cp/
	* module.cc (module_state::read_cluster): Don't set dedup for
	partition or header unit.
2020-08-06 09:01:44 -07:00
Nathan Sidwell
931286309b 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.
2020-08-06 07:52:59 -07:00
Nathan Sidwell
f2656a9abf fix some lookup issues
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-06 07:41:14 -07:00
Nathan Sidwell
69adffa147 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.
2020-08-05 11:04:11 -07:00
Nathan Sidwell
cff03d76c2 Note duplicates on symbol vector
gcc/cp/
	* cp-tree.h (MODULE_VECTOR_GLOBAL_DUPS_P)
	(MODULE_VECTOR_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-05 10:35:21 -07:00
Nathan Sidwell
6f9c8865b7 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.
2020-08-04 13:03:23 -07:00
Nathan Sidwell
03e33763bb Merge trunk 1790d13dc8 2020-08-04 10:34:39 -07:00
Nathan Sidwell
9c6fc6da56 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.
2020-08-03 12:57:50 -07:00
Nathan Sidwell
717a53b832 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.
2020-08-03 12:29:45 -07:00
Nathan Sidwell
eb9698edfa Fix save-temps & header-units
gcc/cp/
	* lang-specs.h (@c++-{,system-,user-}header): Directives-only
	preprocessing for saving temps with modules.
2020-08-03 09:02:52 -07:00
Nathan Sidwell
583d5560c8 Merge trunk d1773f58f3 2020-08-03 08:21:10 -07:00
Nathan Sidwell
06dd8695ed 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-08-03 07:01:08 -07:00
Nathan Sidwell
1d95622996 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.
2020-07-31 11:08:02 -07:00
Nathan Sidwell
04a301cb10 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.
2020-07-31 10:21:27 -07:00
Nathan Sidwell
3910d132ca 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-31 06:30:22 -07:00
Nathan Sidwell
a30ceda5cb 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.
2020-07-30 11:24:01 -07:00
Nathan Sidwell
a894fa90d9 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-30 07:36:15 -07:00
Nathan Sidwell
403213844e Merge trunk f3665bd111 2020-07-28 09:53:46 -07:00
Nathan Sidwell
c3e54977d6 Restore a bunch of trunk behaviour
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.
2020-07-28 09:23:33 -07:00
Nathan Sidwell
bc70c94655 Merge trunk 134051f16b 2020-07-28 06:42:22 -07:00
Nathan Sidwell
b573170cdc line zero rewind fix
libcpp/
	* directives.c (_cpp_do_file_change): Check we're moving to line
	zero of the same file.
2020-07-28 06:15:10 -07:00
Nathan Sidwell
3c843d8968 Revert ada to trunk
gcc/c-family/
	* c-ada-spec.c (decl_sloc): Revert to trunk.
2020-07-22 14:58:13 -04:00
Nathan Sidwell
20eb7c128f Merge trunk 6e1e0decc9 2020-07-22 09:13:53 -07:00
Nathan Sidwell
82250e6409 Unbreak Ada
gcc/
	* gcc.c (execute): Disable argv[0] munging.
2020-07-22 10:47:50 -04:00
Nathan Sidwell
24fcaf7cad Sadly Ada still broken :(
gcc/c-family/
	* c-ada-spec.c (decl_sloc): Actually return the field's loc.
2020-07-21 09:49:13 -04:00
Nathan Sidwell
bcbd792383 Unbreak bootstrap
gcc/cp/
	* rtti.c (init_rtti_processing): Unbreak bootstrap.
2020-07-20 07:14:58 -07:00
Nathan Sidwell
be9f7b2b0b Merge trunk a926eeedf4 2020-07-20 05:59:07 -07:00
Nathan Sidwell
77bd6fc0ed Source main location
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-17 12:30:41 -07:00
Nathan Sidwell
ca814b3322 Declaring a builtin in a header unit
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.
2020-07-16 14:39:38 -07:00
Nathan Sidwell
aa9f1d9155 More FIXME resolution
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.
2020-07-16 14:00:51 -07:00
Nathan Sidwell
7f3bd0c72e include xlate callback
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.
2020-07-16 13:39:08 -07:00
Nathan Sidwell
09e0d79249 enum for main search mechanism
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.
2020-07-16 13:38:40 -07:00
Nathan Sidwell
41d88a6c8f Function-scope using-decls
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-16 13:38:13 -07:00
Nathan Sidwell
4556080e3c Merge trunk 765fbbf9bb 2020-07-15 11:43:59 -07:00
Nathan Sidwell
7eae4731c9 Merge trunk 5f809982e8 2020-07-14 09:11:51 -07:00
Nathan Sidwell
1edf8b5ed9 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.
2020-07-13 12:49:36 -07:00
Nathan Sidwell
903dcdf0b0 Address more FIXMEs
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.
2020-07-13 10:33:03 -07:00
Nathan Sidwell
9c75aba591 Remove some FIXMEs
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.
2020-07-13 08:48:20 -07:00
Nathan Sidwell
65e3cb488b Fix scan-lang-dump-not
gcc/testsuite/
	* lib/scanlang.exp (scan-lang-dump-not): Fix 3-arg case.
	* g++.dg/modules/builtin-3_a.C: Remove unnecessary bracing.
2020-07-13 07:52:19 -07:00
Nathan Sidwell
094b09111a Merge trunk a1faa8e247 2020-07-13 07:50:49 -07:00
Nathan Sidwell
156e909b63 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-13 06:30:55 -07:00
Nathan Sidwell
7cce1e321d Copy with ARM's poly ints
gcc/cp/
	* modules.cc (trees_out::type_node [VECTOR_TYPE]): poly_int's
	to_constant already does the checking we need.
2020-07-09 10:58:56 -07:00
Nathan Sidwell
7fd73b12b7 Generalize assembly scan
gcc/testsuite/
	* g++.dg/modules/sym-subst-3_a.C: Adjust scan for other ABIs
2020-07-09 10:28:19 -07:00
Nathan Sidwell
8314e36e0d aarch64 and powerpc va_lists look different
gcc/testuite/
	* g++.dg/modules/builtin-3_[ab].C: Add va_list scans for
	aarch64 and ppowerpc ABIs.
2020-07-09 09:54:51 -07:00
Nathan Sidwell
7b4cb88d27 Remove tcl 8.6ism 2020-07-08 21:06:08 +00:00
Nathan Sidwell
ccbcd56f41 Merge trunk 6bf2ff0d52 2020-07-08 11:52:01 -07:00
Nathan Sidwell
396655c25a Merge trunk ce0f842492 2020-07-03 19:22:12 -04:00
Nathan Sidwell
60a30d9566 Fix bootstrap
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-03 10:43:56 -04:00
Nathan Sidwell
c4b3a5c64f 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-02 13:22:21 -07:00
Nathan Sidwell
142418ef83 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.
2020-07-01 09:55:19 -07:00
Nathan Sidwell
2a81714823 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-07-01 09:20:48 -07:00
Nathan Sidwell
c6f2727d02 A couple of function cloning tweaks
gcc/cp/
	* class.c (copyfndecl_with_name): Drop inadvertent
	DECL_CLONED_FUNCTION setting.  Pass 0 for top_level to
	rest_of_decl_compiulation.
2020-06-30 12:11:59 -07:00
Nathan Sidwell
fb0bb1c31d Internal api tweak
gcc/cp/
	* class.c (copy_fndecl_with_name): Add tree code parm.  Adjust
	callers.
2020-06-30 10:22:36 -07:00
Nathan Sidwell
dd50d60d60 Missed a rename
libcc1/
	* libcp1plugin.cc (plugin_build_decl): Adjust.
2020-06-30 09:38:53 -07:00
Nathan Sidwell
84d3a3a985 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-30 08:59:44 -07:00
Nathan Sidwell
c34de11201 Merge master 9a33c41fe4 2020-06-29 14:00:35 -07:00
Nathan Sidwell
bfc221bd1a Merge master 44492e248c
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-29 11:19:56 -07:00
Nathan Sidwell
a534cd6685 Fix stupid communicating server bugs.
gcc/cp/
	* mapper-server.cc (process_server): We should Write when writing.
	(server): Fix off-by-one error.
2020-06-25 20:30:29 -04:00
Nathan Sidwell
d07d094efd Merge master 68df8e8c34 2020-06-25 13:22:51 -07:00
Nathan Sidwell
869158f027 Merge master 502d63b6d6
Lower VEC_COND_EXPR into internal functions. [Martin Liska]
	Apply d11c9841d5 Add missing check for gassign.  [Martin Liska]
	Apply 9435fb9668 Fix typo in tree-ssa-reassoc.c. [Martin Liska]
2020-06-25 13:11:38 -07:00
Nathan Sidwell
0862b62421 Merge master 2021af0c23 2020-06-25 12:16:04 -07:00
Nathan Sidwell
8ad50d2855 Merge masrer 668ef28fbb.
c++: Clean up previous change [PR41437] [Patrick Palka]
	gcc/cp/
	* module.cc (trees_{in,out}::code_vals [TEMPLATE_INFO]): Adjust
	access checking streaming.
2020-06-25 08:27:45 -07:00
Nathan Sidwell
390ab9b8bc Merge master 92bed03609
c++: Improve access checking inside templates [PR41437]
2020-06-25 07:39:56 -07:00
Nathan Sidwell
6665d04697 Merge master a97e49a89d 2020-06-25 07:11:31 -07:00
Nathan Sidwell
6d8fa55b64 Merge master f2242ec0d3
Over the hump!
2020-06-24 13:43:53 -07:00
Nathan Sidwell
eb150e498d 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-24 13:35:06 -07:00
Nathan Sidwell
b27bcc6c83 Merge master b825a22890 2020-06-11 05:51:26 -07:00
Nathan Sidwell
26fd9ef073 Merge master ac9face8d2
PR c++/95263
	gcc/cp/
	* pt.c (lookup_template_class_1): Do not apply reversion
	gcc/testsuite/
	* g++.dg/template/pr95263.C: New (XFAIL)
2020-06-10 12:15:12 -07:00
Nathan Sidwell
3021b1cbb3 Merge master 6c8e16aea8 2020-06-10 09:39:20 -07:00
Nathan Sidwell
2d79fc0f6e 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-10 06:16:45 -07:00
Nathan Sidwell
9a42c3334f 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.
2020-06-05 15:37:00 -04:00
Nathan Sidwell
7400add66f 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-05 09:18:22 -04:00
Nathan Sidwell
d34b6baae9 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-06-02 07:32:58 -07:00
Nathan Sidwell
6036eaa98a Merge master 149c8c7c27 2020-05-21 11:30:31 -07:00
Nathan Sidwell
ac2e10e261 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.
2020-05-21 10:46:47 -07:00
Nathan Sidwell
6b9d7a4679 Update file_find_kind names
libcpp/
	* files.c, init.c, internal.h: Adjust file_find_kind names from trunk.
2020-05-21 09:48:57 -07:00
Nathan Sidwell
e16798eea3 Fix linemap range breakage 2020-05-21 09:19:59 -07:00
Nathan Sidwell
a2b1c78c1e Renam cpp_read_main_file's have_preamble parm
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.
2020-05-20 13:04:01 -07:00
Nathan Sidwell
d714603ced Line zero optimizing
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.
2020-05-20 12:44:42 -07:00
Nathan Sidwell
74963283ed Location setting fixes
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-20 09:47:15 -07:00
Nathan Sidwell
8159d8db05 Use enumeration type for cpp file kind
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-19 13:46:19 -07:00
Nathan Sidwell
1e7d6cc63e Darwin test fixes
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.
2020-05-19 12:13:57 -07:00
Nathan Sidwell
6bf96b1809 Darwin sighandler_t fix
gcc/cp/
	* mapper-client.cc: Move fallback typedef for sighandler_t
	from here ...
	* mapper-client.h: ... to here.
2020-05-19 12:06:06 -07:00
Nathan Sidwell
61f1501886 Merge master ed63c387aa 2020-05-19 12:04:08 -07:00
Nathan Sidwell
4e0bf9b5d3 Clarify error message
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-19 09:58:50 -07:00
Nathan Sidwell
6761f494c3 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.
2020-05-15 08:41:47 -07:00
Nathan Sidwell
236e93e733 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.
2020-05-15 08:29:17 -07:00
Nathan Sidwell
09f3831f55 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-15 08:18:58 -07:00
Nathan Sidwell
79cacccce2 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.
2020-05-14 11:59:19 -07:00
Nathan Sidwell
4813653043 Merge master f497e36ae5 2020-05-14 08:13:54 -07:00
Nathan Sidwell
922db2851e Remove FIXME 2020-05-14 07:37:39 -07:00
Nathan Sidwell
cf28ae3008 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-13 10:49:49 -07:00
Nathan Sidwell
40f639a309 Merge master 2a0225e478 2020-05-12 14:01:34 -07:00
Nathan Sidwell
354fc550ee Merge master b224c3763e 2020-05-08 11:58:09 -07:00
Nathan Sidwell
b721297b71 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-08 06:33:04 -07:00
Nathan Sidwell
1fadf34081 Merge master ab2952c77d 2020-05-07 09:21:21 -07:00
Nathan Sidwell
136f279e5e 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.
2020-05-05 12:38:29 -07:00
Nathan Sidwell
c7c2447545 Fix eh specs
gcc/testsuite/
	* g++.dg/eh/builtin{5,7,9,10,11}.C: Fix eh specs on __cxa fn decls.
2020-05-05 12:36:25 -07:00
Nathan Sidwell
f894ccd5cb 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-05 12:34:45 -07:00
Nathan Sidwell
64b8060630 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-04 12:37:42 -07:00
Nathan Sidwell
cb365f78e0 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-05-01 08:55:32 -07:00
Nathan Sidwell
6636864314 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.
2020-04-30 13:05:36 -07:00
Nathan Sidwell
8ba36396a8 Tweak buultin fn hack
gcc/cp/
	* name-lookup.c (get_namespace_binding): Strip singleton overloads.
2020-04-30 13:00:52 -07:00
Nathan Sidwell
01ae956170 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-28 06:29:07 -07:00
Nathan Sidwell
6fded9a059 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.
2020-04-23 10:05:31 -07:00
Nathan Sidwell
ed1fb0809b 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-23 09:38:08 -07:00
Nathan Sidwell
27909a10f2 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-22 11:46:10 -07:00
Nathan Sidwell
1f49f4236e 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.
2020-04-21 12:19:50 -07:00
Nathan Sidwell
65a93bcc55 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-21 09:33:12 -07:00
Nathan Sidwell
88b13798f2 Merge master a28edad3da 2020-04-17 13:41:36 -07:00
Nathan Sidwell
f7908a8c38 Rename cxx-mapper
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.
2020-04-17 12:33:14 -07:00
Nathan Sidwell
91041d612f Revert some abstractification
gcc/cp/
	* module.cc (mapper_{import_export,export_done}): Revert
	2020-04-13 change/
2020-04-17 12:17:34 -07:00
Nathan Sidwell
d37d255981 Break out module-mapper to separate file
gcc/cp/
	* mapper-client.{h,cc}: New, broken out of ...
	* module.cc: ... here.
	* Make-lang.in: Add mapper-client.
2020-04-17 12:10:09 -07:00
Nathan Sidwell
7f9b821b82 More abstractification
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 ...
	(module_import_export, module_export_done): ... these.
2020-04-17 11:16:51 -07:00
Nathan Sidwell
946875ee91 module_mapper field-ectomy
gcc/cp/
	* module.cc (module_mapper::to): Drop unneeded field.
2020-04-17 09:19:24 -07:00
Nathan Sidwell
e424718753 mapper open & close
gcc/cp/
	* module.cc (module_mapper::{open,close}): New methods, use them.
2020-04-17 08:46:24 -07:00
Nathan Sidwell
93b930f137 More mapper abstractification
gcc/cp/
	* module.cc (module_mapper): Break more stuff out of ctor.
2020-04-17 08:46:06 -07:00
Nathan Sidwell
92649b212a Start abstracting module mapper
gcc/cp/
	* module.cc (module_mapper): Remove knowledge of module_state,
	update all callers.
2020-04-13 10:55:15 -07:00
Nathan Sidwell
9563d7f98a New hello-world testcase
gcc/testsuite/
	* g++.dg/modules/hello-1_[ab].C: New.
2020-04-08 12:09:54 -07:00
Nathan Sidwell
32dc3719d7 TYPE_DECLS don't necessarily have a D_L_S
gcc/cp/
	* module.cc (trees_in::decl_value): Need to retrofit lang for
	inner.
	gcc/testsuite/
	* g++.dg/modules/gmf-1_[ab].C: New.
2020-04-08 12:03:52 -07:00
Nathan Sidwell
5c4ec4a8f9 More header unit checking
gcc/testsuite/
	* g++.dg/modules/xtreme-header-[1-6]_c.C: New.
2020-04-08 09:55:34 -07:00
Nathan Sidwell
66892d570b Avoid null derefs
gcc/cp/
	* module.cc (trees_in::key_mergeable): Avoid null deref.
	(direct_import): Create attachment table.
	gcc/testsuite/
	* g++.dg/modules/lambds-[23]_c.C: New.
2020-04-08 09:54:27 -07:00
Nathan Sidwell
314832b80f Merge master 50c7853216 2020-04-08 06:43:03 -07:00
Nathan Sidwell
5e938e7912 C++20 Ranges!
gcc/testsuite/
	* g++.dg/modules/xtreme-header-2.h: Enable in c++20 mode.
2020-04-07 12:04:07 -07:00
Nathan Sidwell
c511123b6d Placeholder & constrained auto
gcc/cp/
	* module.cc (trees_{in,out}::tpl_parm_value): Stream auto
	placeholder & constraints.
	gcc/testsuite/
	* g++.dg/modules/lambda-4{,_[ab]}.[hHC]: New.
2020-04-07 11:55:58 -07:00
Nathan Sidwell
639ade0145 Lambda _FUN with recursive types
gcc/cp/
	* module.cc (trees_out::key_mergeable): A lambda's static _FUN has
	a recursive return type.
	(trees_in::is_matching_decl): Likewise.
	* g++.dg/modules/lambda-4{,_[ab]}.[hHC]: New.
	* g++.dg/modules/concept-6_b.C: Remove xfail.
2020-04-07 08:32:23 -07:00
Nathan Sidwell
db37280772 Show NULL call arguments
gcc/
	* print-tree.c (print_node): Explicitly show CALL_EXPR null arguments.
2020-04-07 08:28:49 -07:00
Nathan Sidwell
acda0716f3 Instantiations with requires
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.
2020-04-07 05:47:08 -07:00
Nathan Sidwell
836856bef4 Refactor call-expr & decltype-type comparison
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-07 05:27:33 -07:00
Nathan Sidwell
1fc1eeb085 Namespaces from partitions don't advertise that
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-06 08:28:47 -07:00
Nathan Sidwell
2c6b4bd9ab Zap NSDMIS on as_base fields [PR94476]
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.
2020-04-03 12:38:25 -07:00
Nathan Sidwell
2188cea2c6 Merge master bcafd8748c 2020-04-03 12:16:06 -07:00
Nathan Sidwell
776fd9cc4a Non Static Data Member Initializers (happy now githook?)
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.
2020-04-03 10:40:00 -07:00
Nathan Sidwell
3043c9fed9 Partition up stl header inclusion
gcc/testsuite/
	* g++.dg/modules/xtreme-header-[123456]{,_[ab]}.[hHC]: New.
2020-04-03 09:51:50 -07:00
Nathan Sidwell
9a114dd344 Experimental shouting, perhaps it'll work?
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.
2020-04-03 08:35:16 -07:00
Nathan Sidwell
3de8f3fe67 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.
2020-04-03 08:12:01 -07:00
Nathan Sidwell
f3b2cf6b68 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-03 07:46:55 -07:00
Nathan Sidwell
2a98bb1b44 namespace decl cleanup
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
2020-04-02 09:59:31 -07:00
Nathan Sidwell
dcd1233dc6 Deal with namespace dependencies separately
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-02 09:15:39 -07:00
Nathan Sidwell
61e93aebe9 Fix broken tests
gcc/testsuite/
	* g++.dg/modules/tpl-alias-1_[ab].[HC]: Fix unresolved tests.
	* g++.dg/modules/vtt-2_b.C: Likewise.
2020-04-01 07:05:31 -07:00
Nathan Sidwell
fc7e31482b 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-04-01 06:42:14 -07:00
Nathan Sidwell
577388e0c4 Inhibit typename resolution when streaming
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.
2020-03-31 12:42:21 -07:00
Nathan Sidwell
9f857401a2 Create extra scope later
gcc/cp/
	* pt.c (tsubst_lambda_expr): Set extra scope after creating the
	lambda struct.
2020-03-31 10:02:38 -07:00
Nathan Sidwell
f93e7ba1b1 Templatify pendset
gcc/cp/
	* modules.cc (template<T> uintset): New template created from ...
	(pendset): ... this.  Use it.  Adjust all uses.
2020-03-30 08:27:12 -07:00
Nathan Sidwell
d18ba80f09 Merge master 62ede14d30 2020-03-27 06:43:17 -07:00
Nathan Sidwell
07c934bb9d STL headers header-unity (except C++ 20 ranges)
gcc/testsuite/
	* g++.dg/modules/xtreme-header-{,_[ab]}.[hHC]: New.
2020-03-26 13:35:50 -07:00
Nathan Sidwell
bc90e9fa5a 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.
2020-03-26 13:15:40 -07:00
Nathan Sidwell
8ca572dccd Avoid is_mergeable streaming for instantiations
gcc/cp/
	* module.cc (trees_{in,out}::decl_value): Instantiations are
	merged things too.
2020-03-26 08:39:49 -07:00
Nathan Sidwell
45fba619d5 Refactor entity installing
gcc/cp/
	* module.cc (trees_{in,out}::install_entity): New, broken out of ...
	(trees_{in,out}::decl_value): ... here.  Call them.
2020-03-26 08:24:29 -07:00
Nathan Sidwell
6a2bc22d0a Stop morphing alias instantiation template info
WARNING: This breaks lots of modules tests because an inconsistent
	invariant 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-25 10:22:36 -07:00
Nathan Sidwell
389fa4edcb Avoid unnecessary work in loop.
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-24 10:18:55 -07:00
Nathan Sidwell
3e550ed675 no need to stream tpl-tpl-parm-contextness
gcc/cp/
	* module.cc (trees_{in,out}::tpl_parms_fini): Determine
	contextness requirement from TPI.
2020-03-23 07:36:36 -07:00
Nathan Sidwell
abd986fa1d Merge master a3586eeb88. 2020-03-23 07:29:21 -07:00
Nathan Sidwell
47bb5db5ab template template parm context
gcc/cp/
	* module.cc (trees_{in,out}::tpl_parms_fini): Flag whether
	tpl-tpl-parm context is non-null.
2020-03-20 10:43:38 -07:00
Nathan Sidwell
71493edf6a Avoid instantiation when comparing duplicates
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.
2020-03-19 12:08:19 -07:00
Nathan Sidwell
d8d1efe361 constexprs can have error_mark_node result
gcc/cp/
	* module.cc (trees_{in,out}::{read,write}_function_def): Potential
	cexprs have result == error_mark_node.
2020-03-19 11:09:00 -07:00
Nathan Sidwell
b56ea93d7c Inheriting template ctors
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.
2020-03-19 08:04:46 -07:00
Nathan Sidwell
a3718bc6ca Merge master 3512dc0108 2020-03-19 07:02:28 -07:00
Nathan Sidwell
1b786b3c5d Merge master 3512dc0108 2020-03-19 07:00:39 -07:00
Nathan Sidwell
232abc99a0 Merge master 3512dc0108 2020-03-19 05:36:51 -07:00
Nathan Sidwell
2d5f96b294 pmf typedefs are different to bare pmfs
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.
2020-03-18 11:18:41 -07:00
Nathan Sidwell
ccf1d588d4 Remove gratuitous substitition
gcc/cp/
	* module.cc (trees_out::key_mergeable): Do not perform
	requirements stubstutition.
	(check_mergeable_decl): Likewise.
2020-03-18 10:07:14 -07:00
Nathan Sidwell
d54101b57a auto return type
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-18 07:26:49 -07:00
Nathan Sidwell
736b82e061 Instantiated noexcept specifications
gcc/cp/
	* module.cc (trees_in::is_matching_decl): Propagate instantiated
	noexcept specifications.
	gcc/testsuite/
	* g++.dg/modules/except-3{,_[ab]}.[hHC]: New.
2020-03-17 13:13:31 -07:00
Nathan Sidwell
71af6e7ca3 Check recursive laziness
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-17 05:59:03 -07:00
Nathan Sidwell
decb4b2c81 Adjust read error detection & messages
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
2020-03-16 13:50:08 -07:00
Nathan Sidwell
67c341a073 Clarify a couple of newbie questions
gcc/cp/
	* doc/invoke.texi (C++ Modules): Clarify a couple of things.
2020-03-16 05:25:39 -07:00
Nathan Sidwell
e3613c51d1 Merging pointers to member fn initializers
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.
2020-03-13 13:14:31 -07:00
Nathan Sidwell
37baf522a1 Some cleanups
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.
2020-03-13 12:22:18 -07:00
Nathan Sidwell
b7834f4aa8 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
2020-03-13 12:12:39 -07:00
Nathan Sidwell
1d379b66a7 deferredness of noexcept can differ, as can builtins
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.
2020-03-13 12:05:44 -07:00
Nathan Sidwell
2ee25bcbd7 PR94027 Fixette
gcc/cp/
	* mangle.c (find_substitution): Cleanup for c++/94027 fix.
2020-03-13 08:31:00 -07:00
Nathan Sidwell
c39c0440da New -fmodule-version-ignore option
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-13 08:23:55 -07:00
Nathan Sidwell
a34216a048 Bad ranges, no biscuit!
gcc/testsuite/
	* g++.dg/modules/odr-1{,_[ab]}.[hHC]: New.
2020-03-11 04:10:17 -07:00
Nathan Sidwell
7c891deba8 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.
2020-03-10 12:29:10 -07:00
Nathan Sidwell
55faf3ea77 Merge master 3654d49d0f 2020-03-10 08:59:42 -04:00
Nathan Sidwell
9c9254107f 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.
2020-03-09 11:53:08 -07:00
Nathan Sidwell
d90b14bbba 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.
2020-03-09 10:25:53 -07:00
Nathan Sidwell
7cee441935 Chained decls read to vector
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.
2020-03-09 08:40:12 -07:00
Nathan Sidwell
1990415ae4 Partial specializations only added once
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-09 06:45:12 -07:00
Nathan Sidwell
6c40b552f7 Qualified depdent array types
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.
2020-03-05 04:54:21 -08:00
Nathan Sidwell
a00ae23ed4 Dependent array types
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-05 04:45:06 -08:00
Nathan Sidwell
17f0f914b1 Check TYPE_LANG_SPECIFIC
gcc/cp/
	* name-lookup.c (mergeable_class_entities): Check TYPE_LANG_SPECIFIC.
2020-03-04 12:49:29 -08:00
Nathan Sidwell
a3708e8852 using decls in different namespaces
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.
2020-03-04 10:59:17 -08:00
Nathan Sidwell
ce9d948fe3 typedefs in cloned functions do not smell like typedefs
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.
2020-03-04 08:29:08 -08:00
Nathan Sidwell
2d6fad9f61 More NULL names
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.
2020-03-04 05:02:06 -08:00
Nathan Sidwell
a0ed30aea5 Elide merge_key streaming when possible
gcc/cp/
	* module.cc (struct merge_key): simplify.
	(trees_{in,out}::key_mergeable): Optimize merge_key streaming.
2020-03-04 04:38:17 -08:00
Nathan Sidwell
329b9d79fa More explicit merge kind discriminators
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.
2020-03-03 14:42:21 -08:00
Nathan Sidwell
298855e460 Remove merge_key index as tree hack
gcc/cp/
	* module.cc (struct merge_key): Remove index as tree hack ...
	(merge_key::{read,write}): ... here.
	(trees_{in,out}::key_mergeable): Adjust.
2020-03-03 10:56:11 -08:00
Nathan Sidwell
5e53a8262a Pass merge_key around, not explicit parms
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.
2020-03-03 10:48:08 -08:00
Nathan Sidwell
e28d2a0f2e Move merging to key_mergeable
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.
2020-03-03 09:30:01 -08:00
Nathan Sidwell
e0db44ca34 Encapsulate merge key data in a struct
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-03 08:06:08 -08:00
Nathan Sidwell
e08748a07a Move mergeable getters to module.cc
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.
2020-03-02 12:34:38 -08:00
Nathan Sidwell
a640ac86d4 Start moving mergeable checking out of name-lookup
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-03-02 10:11:22 -08:00
Nathan Sidwell
613ecabf40 The note_defs hash needs to be a cache
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.
2020-02-28 12:23:55 -08:00
Nathan Sidwell
0a10347d04 Don'c complain about unsynthesized defaulted members
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.
2020-02-28 09:44:50 -08:00
Nathan Sidwell
53b027b734 Members can be overloaded on ref qualifierness
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.
2020-02-28 07:36:58 -08:00
Nathan Sidwell
68d6c3e2eb Merge master 9d2d283367 2020-02-28 05:23:07 -08:00
Nathan Sidwell
037aca5849 FIELD_DCLs with template info
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-27 11:18:07 -08:00
Nathan Sidwell
310ae53d8e Class-scope using-decls and dependent typename-types
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-26 12:47:20 -08:00
Nathan Sidwell
e6c0cbec94 <string> now buildable as a c++20 header unit
gcc/testsuite/
	* g++.dg/modules/string-1_[ab].[CH]: Enable in c++20 mode.
2020-02-25 13:11:15 -08:00
Nathan Sidwell
cb887e2fb7 Merge with variadic template concept
gcc/testsuite/
	* g++.dg/modules/merge-12{,_[ab]}.[hHC]: New.
2020-02-25 11:33:05 -08:00
Nathan Sidwell
7c20089e8f Concept with argument pack
gcc/cp/
	* typeck.c (structural_comptypes): Deal with TYPE_ARGUMENT_PACK.
	gcc/testsuite/
	* g++.dg/concepts/pack-1.C: New.
2020-02-25 11:13:29 -08:00
Nathan Sidwell
934fe9a30d ICE with preprocessed header unit [93761]
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.
2020-02-25 08:08:23 -08:00
Nathan Sidwell
637df2e24f Small testcase cleanups
* 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.
2020-02-25 06:37:17 -08:00
Nathan Sidwell
3b8d5c896f 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-25 06:22:21 -08:00
Nathan Sidwell
be0d02e585 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.
2020-02-24 09:51:55 -08:00
Nathan Sidwell
27fea4cf5a Merge master 3841739c29 2020-02-24 08:13:45 -08:00
Nathan Sidwell
bfaad7a57e Commonize ' & " directives-only peeking
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-22 18:36:46 -05:00
Nathan Sidwell
3f77ffc066 Backscanning for raw string literals
libcpp/
	* lex.c (cp_directive_only_process): Deal with raw strings by
	backtracking.
2020-02-19 21:36:49 +01:00
Nathan Sidwell
50974764f8 Support number-punctuator in directives-only
libcpp/
	* lex.c (cpp_directive_only_process): Cope with number
	punctuators.
	gcc/testsuite/
	* c-c++-common/cpp/dir-only-8.c: New.
2020-02-14 20:12:07 +01:00
Nathan Sidwell
fe76dae46c Show branch name in version info
gcc/cp/
	* Make-lang.in (MODULE_REVISION): Add branch name.
2020-02-12 09:43:24 +01:00
Nathan Sidwell
be16e6ca90 Fixup preprocessed main start
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.
2020-02-11 14:57:53 +01:00
Nathan Sidwell
93a35bb732 Fix preprocessed module directives
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.
2020-02-11 13:11:17 +01:00
Nathan Sidwell
6d5fdedadb Merge master a6ee556c76 2020-02-11 12:29:55 +01:00
Nathan Sidwell
e812b46fa9 Better raw strings in directives-only mode
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-10 19:59:55 +01:00
Nathan Sidwell
ecea46a64e Fix broken module control-lines
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.
2020-02-09 06:59:03 +01:00
Nathan Sidwell
b099bdbf51 change preprocess_token langhook cookie type
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-09 00:24:14 -05:00
Nathan Sidwell
bff1dce200 Relax raw string detection
libcpp/
	* lex.c (cpp_directive_only_process): Relax raw string detection.
2020-02-08 15:48:01 -05:00
Nathan Sidwell
ab75be3d7d More robust raw string literals and user-defined literals
libcpp/
	* lex.c (cpp_directive_only_process): Re-reimplement.
2020-02-07 14:31:41 -08:00
Nathan Sidwell
51e4956fd9 Use 'module control-line' terminology
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.
2020-02-07 08:48:34 -08:00
Nathan Sidwell
cb5a780f16 Remove now-unused cpp_clear_if_stack
libcpp/
	* internal/cpplib.h (cpp_clear_if_stack): Don't declare.
	* directives.c (cpp_clear_if_stack): Delete.
2020-02-07 08:01:39 -08:00
Nathan Sidwell
91b4b5d6b4 Merge master 82aee6dd61 2020-02-07 07:36:56 -08:00
Nathan Sidwell
cc018da11e Initial -fdirectives-only support
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.
2020-02-07 06:04:49 -08:00
Nathan Sidwell
a88e54535f A token streamer
gcc/c-family/
	* c-ppoutput.c (class token_streamer): New class, swallow guts of
	...
	(scan_translation_unit): ... this.  Use it.
2020-02-07 04:49:22 -08:00
Nathan Sidwell
328c45e8f6 A single generic callback for directives-only processing
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.
2020-02-06 09:33:57 -08:00
Nathan Sidwell
8657d180fb Simplify raw string lexing
libcpp/
	* lex.c (cpp_directive_only_process): Simplify raw string lexing.
2020-02-06 05:42:14 -08:00
Nathan Sidwell
2d3fcfb453 Add raw string support [PR93606]
libcpp/
	* lex.c (cpp_directive_only_process): Add raw string lexing.
	gcc/testsuite/
	* c-c++-common/cpp/dir-only-7.c: New.
2020-02-06 04:37:50 -08:00
Nathan Sidwell
ca448c6510 Merge master fa0c6e297b 2020-02-05 12:24:20 -08:00
Nathan Sidwell
a42e73f54d Clarify comment 2020-02-05 12:04:28 -08:00
Nathan Sidwell
591f66adda Reimplement directive-only scanning
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-05 12:03:47 -08:00
Nathan Sidwell
d6260ed612 Enforce preamble import restrictions
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.
2020-02-04 19:00:48 -05:00
Nathan Sidwell
348cfb09c6 Skip header macros when not preprocessing
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.
2020-02-04 13:16:05 -08:00
Nathan Sidwell
3dd4f9cc2c Fix dependency generation
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
2020-02-04 12:58:17 -08:00
Nathan Sidwell
83cc972b42 MODULE_UNKNOWN_PARTITION is unneeded
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.
2020-02-04 12:07:45 -08:00
Nathan Sidwell
97b25844b2 Remove module_state::from_loc
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.
2020-02-04 11:54:01 -08:00
Nathan Sidwell
79135d7b59 Break apart direct_import
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.
2020-02-04 08:44:57 -08:00
Nathan Sidwell
661203d785 Final module state flag cleanup
gcc/cp/
	* module.cc (struct module_state): Cleanly separate module kind
	flags from module use flags.
2020-02-04 06:11:19 -08:00
Nathan Sidwell
a7f7873982 primary_p & from_partition_p bite the dust
gcc/cp/
	* module.cc (struct module_state): Drop primary_p &
	from_partition_p.  Map uses to module_p and partition_direct_p.
2020-02-03 13:34:42 -08:00
Nathan Sidwell
3f0e7d8510 Use a load state enumeration
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.
2020-02-03 13:12:36 -08:00
Nathan Sidwell
208db70e10 Start rationalizing module_state flags
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.
2020-02-03 12:22:52 -08:00
Nathan Sidwell
badcc6b438 Diagnose poor include translation
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-03 05:57:11 -08:00
Nathan Sidwell
11c82aea67 include translation fixups
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-02-02 19:12:44 -05:00
Nathan Sidwell
3c45cc6664 Reimplement module-directive mode peeking
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.
2020-01-31 11:08:15 -08:00
Nathan Sidwell
eaa6e833f8 Merge master b92709388b 2020-01-31 09:37:08 -08:00
Nathan Sidwell
da94c667ad Fixup pragma error recovery
gcc/cp/
	* parser.c (cp_parser_skip_to_end_of_statement): Adjust pragma
	skipping.
	(cp_parser_skip_to_end_of_block_or_statement): Likewise.
2020-01-31 08:36:46 -08:00
Nathan Sidwell
581aa8f952 PRAGMA_EOL needs a location at the end of pragma line
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.
2020-01-31 07:23:06 -08:00
Nathan Sidwell
9412c7e007 Restore batched mapper communication
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-31 04:29:07 -08:00
Nathan Sidwell
59068038ea p1857 parser parts
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
2020-01-30 08:45:53 -08:00
Nathan Sidwell
55695b9451 A few parser cleanups
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.
2020-01-30 08:33:53 -08:00
Nathan Sidwell
1fa99997b3 Fix PRAGMA_EOL location
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-30 08:04:02 -08:00
Nathan Sidwell
134f3dc4ce Constify preprocess_token langhook
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.
2020-01-27 09:57:26 -08:00
Nathan Sidwell
c8e7875bdc Merge master a1f6eff20e 2020-01-24 06:32:18 -08:00
Nathan Sidwell
c594dbeb15 Module keywords are keywords
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-24 04:59:04 -08:00
Nathan Sidwell
e3346f355d preprocessor defined & has_include fixes
libcpp/
	* expr.c (parse_defined): Fixup for modules.
	(parse_has_include): Remove controlling macro nonsense.
2020-01-23 13:53:18 -08:00
Nathan Sidwell
885527c002 Implement p1857, part 1
Preprocessor lexes module directives as deferred pragmas.  Minimal changes elsewhere.

	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-23 13:49:45 -08:00
Nathan Sidwell
d2e55cb5ec Simplify remap_module
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.
2020-01-21 12:09:26 -08:00
Nathan Sidwell
841308c4c5 Separate & delay cpp and c++ state reading
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.
2020-01-21 11:47:04 -08:00
Nathan Sidwell
f96e41419b Encode directness in remap array
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-21 07:14:55 -08:00
Nathan Sidwell
db89f94f8a Merge master 3a43459715.
Coroutines committed.
2020-01-20 12:37:12 -08:00
Nathan Sidwell
e2b8d17009 Merge master bf09d886a4. 2020-01-17 11:13:06 -08:00
Nathan Sidwell
a50fabeabb Macros only for header units
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.
2020-01-16 13:24:59 -08:00
Nathan Sidwell
6fc5548356 Separate counts from config
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.
2020-01-16 12:42:40 -08:00
Nathan Sidwell
6d8ba29487 Start separating preprocessor and language reading
gcc/cp/
	* (slurping::slurping): Set current to ~0u.
	(module_state::read_{initial,preprocessor,language}): New, broken
	out of ...
	(module_state::read): ... here.  Call them.
2020-01-16 08:25:46 -08:00
Nathan Sidwell
e7a97f52d7 Merge master.
gcc/cp/
	* module.cc (depset::traits): Add empty_zero_p.
2020-01-15 06:28:30 -08:00
Nathan Sidwell
52ccbf1b00 Here goes nothing ...
gcc/cp/
	* Make-lang.in (MODULE_REVISION): SVN's dead, man.
2020-01-13 05:59:09 -08:00
Nathan Sidwell
336ad859dd Merge trunk r280131.
Bye bye SVN, I'm sure the farm upstate will be fine.

From-SVN: r280139
2020-01-10 20:49:35 +00:00
Nathan Sidwell
7e33753892 re PR c++/79592 (incomplete diagnostic "is not usable as a constexpr function because:")
PR c++/79592

	* g++.dg/ubsan/vptr-4.C: Add expected error.

From-SVN: r279903
2020-01-06 15:22:54 +00:00
Nathan Sidwell
6b8c226714 Merge trunk r279868
From-SVN: r279901
2020-01-06 13:55:06 +00:00
Nathan Sidwell
f4dac8a04d Header unit deduplication milestone
gcc/testsuite/
	* g++.dg/modules/string-1_{a.H,b.C}: New.

From-SVN: r279868
2020-01-03 20:21:48 +00:00
Nathan Sidwell
1eaa0a5422 module.cc (trees_in::decl_value): Disambiguate entity_ary slots from entuty_hash slots.
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.

From-SVN: r279867
2020-01-03 19:56:32 +00:00
Nathan Sidwell
ff3b72cde7 Return the deduped binfo
gcc/cp/
	* module.cc (trees_in::tree_value): Return existing.
	gcc/testsuite/
	* g++.dg/modules/merge-11{.h,_a.H,_b.C}: New.

From-SVN: r279865
2020-01-03 18:22:19 +00:00
Nathan Sidwell
fa2b4dcf66 anonymous bitfield merging
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.

From-SVN: r279864
2020-01-03 17:52:44 +00:00
Nathan Sidwell
030308ea7a tree.h (DECL_ALIGN_RAW): New, use it in accessors.
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.

From-SVN: r279863
2020-01-03 15:47:33 +00:00
Nathan Sidwell
dada502000 Set returns_struct
gcc/cp/
	* module.cc (module_state::read_cluster): Set cfun->returns_struct
	approprately.

From-SVN: r279862
2020-01-03 15:08:13 +00:00
Nathan Sidwell
df1a84d95f Allow post-streamed export lookup
gcc/cp/
	* module.cc (import_entity_module): Cope with exported entities.

From-SVN: r279860
2020-01-03 14:30:52 +00:00
Nathan Sidwell
0a74b817a2 Fix std::align_val_t
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.

From-SVN: r279844
2020-01-02 19:59:20 +00:00
Nathan Sidwell
4920d278da Binfo deduplication
gcc/cp/
	* module.cc (nodel_decl_has): 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.

From-SVN: r279843
2020-01-02 19:26:10 +00:00
Nathan Sidwell
bd0115f848 Simplify binfo streaming.
gcc/cp/
	* module.cc (trees_{in,out}::tree_binfo): Delete.
	(trees_{in,out}::tree_node): Use binfo chain to find binfo.

From-SVN: r279842
2020-01-02 17:41:44 +00:00
Nathan Sidwell
eb690f1302 Merge trunk r279811.
Update all the years!

From-SVN: r279838
2020-01-02 16:33:29 +00:00
Nathan Sidwell
5ca4b1c654 Merge trunk r279809
That's 2019 done.

From-SVN: r279836
2020-01-02 16:07:44 +00:00
Nathan Sidwell
812831ae7b Merge trunk r279556
gcc/
	* diagnostic-core.h (progname): Resolve conflict.

From-SVN: r279834
2020-01-02 15:11:15 +00:00
Nathan Sidwell
b12b6c2ffe Merge trunk r279555
From-SVN: r279833
2020-01-02 14:36:27 +00:00
Nathan Sidwell
df55ee6828 Merge trunk r279473
From-SVN: r279832
2020-01-02 14:10:09 +00:00
Nathan Sidwell
1d3fa2d6fa Apply trunk r279473
gcc/cp/
	* constexpr.cc (check_constexpr_fundef): Clear non-potential
	result before registering.

From-SVN: r279831
2020-01-02 14:03:54 +00:00
Nathan Sidwell
8e60cdb35f Merge trunk r279472
From-SVN: r279830
2020-01-02 13:06:44 +00:00
Nathan Sidwell
4cf6ceeeaa 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.

From-SVN: r279590
2019-12-19 18:41:56 +00:00
Nathan Sidwell
72172d601a 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.

From-SVN: r279589
2019-12-19 18:03:11 +00:00
Nathan Sidwell
7ce4ff2a1c module.cc (trees_in::decl_value): Fix enum-context merging.
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.

From-SVN: r279586
2019-12-19 16:41:13 +00:00
Nathan Sidwell
2fed242a98 Formatting fix
gcc/cp/
	* module.cc (trees_out::key_mergeable): Fix indentation.

From-SVN: r279585
2019-12-19 16:15:29 +00:00
Nathan Sidwell
059dbd509d Fix ICE with merging template class member classes.
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.

From-SVN: r279578
2019-12-19 14:14:43 +00:00
Nathan Sidwell
7a1feda6a2 Fix implicit member parm-type thinko.
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.

From-SVN: r279568
2019-12-19 12:44:02 +00:00
Nathan Sidwell
05fac9fb6e 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-memner-1_[abcde].C: New.

From-SVN: r279545
2019-12-18 21:37:39 +00:00
Nathan Sidwell
9db52afe3f 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.

From-SVN: r279469
2019-12-17 20:46:11 +00:00
Nathan Sidwell
24f471755a 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.

From-SVN: r279467
2019-12-17 16:55:26 +00:00
Nathan Sidwell
3ee7ff8511 More cross-module redeclaration checks
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.

From-SVN: r279457
2019-12-17 12:32:57 +00:00
Nathan Sidwell
3d07d0302f Merge trunk r279384.
From-SVN: r279386
2019-12-13 21:54:40 +00:00
Nathan Sidwell
c2ac89e1a0 Rename specset to pendset
gcc/cp/
	* module.cc: Rename specset to pendset.  Document.

From-SVN: r279384
2019-12-13 21:21:42 +00:00
Nathan Sidwell
4a3a6f6079 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.

From-SVN: r279382
2019-12-13 21:15:05 +00:00
Nathan Sidwell
48beb65a20 Add DECL_MODULE_ENTITY_P
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.

From-SVN: r279371
2019-12-13 13:20:33 +00:00
Nathan Sidwell
194cc57d53 Reserve an extra lazy index bit.
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.

From-SVN: r279313
2019-12-12 20:23:10 +00:00
Nathan Sidwell
23a0606245 cp-tree.h (DECL_MODULE_PARTITION_P): Update doc.
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.

From-SVN: r279312
2019-12-12 20:15:41 +00:00
Nathan Sidwell
0c359f2f35 Refactor tag checking function
gcc/cp/
	* decl.c (lookup_and_check_tag): Refactor.

From-SVN: r279311
2019-12-12 20:12:09 +00:00
Nathan Sidwell
86fafd4935 ICE when dumping
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.

From-SVN: r279308
2019-12-12 15:39:45 +00:00
Nathan Sidwell
664f600d74 Simplify maybe_strip_cmi_prefix
gcc/cp/
	* module.cc (maybe_strip_cmi_prefix): Simplify.

From-SVN: r279057
2019-12-06 18:04:05 +00:00
Nathan Sidwell
7bf2f5b0e4 Remove #ifdef'd code
gcc/cp/
	* module.cc (trees_out::key_mergeable): Remove unreachable code.

From-SVN: r279056
2019-12-06 17:52:39 +00:00
Nathan Sidwell
3b1b8f59f3 Uninstantiated template friends are not special
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.

From-SVN: r279054
2019-12-06 17:48:35 +00:00
Nathan Sidwell
b32d9665c0 Don't mark friend specializations
gcc/cp/
	* module.cc (trees_out::mark_class_def): No need to mark friend
	specializations.

From-SVN: r279052
2019-12-06 16:56:13 +00:00
Nathan Sidwell
d5cd8e21e7 Zap copied template module info.
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.

From-SVN: r279051
2019-12-06 16:10:31 +00:00
Nathan Sidwell
c218eb74ee Cluster no longer stores biased index
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.

From-SVN: r279048
2019-12-06 14:10:14 +00:00
Nathan Sidwell
43135f359d module.cc (trees_out::decl_value): No need to look for dep again.
gcc/cp/
	* module.cc (trees_out::decl_value): No need to look for dep again.

From-SVN: r279047
2019-12-06 13:49:06 +00:00
Nathan Sidwell
60e94fb89a Cache importing indices in depset
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.

From-SVN: r279044
2019-12-06 13:18:35 +00:00
Nathan Sidwell
0f4a4a2e1d 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.

From-SVN: r279042
2019-12-06 12:31:13 +00:00
Nathan Sidwell
5033b29ca9 Merge trunk r279023.
libstdc++ c++2a is now using structured bindings, and those don't
	work :(

From-SVN: r279041
2019-12-06 12:09:28 +00:00
Nathan Sidwell
0f849e09dc module.cc (depset::hash::add_namespace_context): New.
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.

From-SVN: r279022
2019-12-05 21:31:03 +00:00
Nathan Sidwell
12043116d9 module.cc (depset::hash::add_dependency): Do not depend on imports.
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.

From-SVN: r279016
2019-12-05 19:22:58 +00:00
Nathan Sidwell
67c1da61c3 module.cc (depset::{make,add}_dependency): Drop is_import parm, update all callers.
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.

From-SVN: r279015
2019-12-05 18:47:53 +00:00
Nathan Sidwell
87c4e50b0c cp-tree.h (DECL_MODULE_PARTITION_P): New.
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.

From-SVN: r279014
2019-12-05 18:33:17 +00:00
Nathan Sidwell
f2ddde3922 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.

From-SVN: r279011
2019-12-05 17:59:06 +00:00
Nathan Sidwell
285cf50d89 module.cc (macro_import::slot): Adjust encoding to use fewer bits.
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.

From-SVN: r279009
2019-12-05 17:49:07 +00:00
Nathan Sidwell
e2ec5e6536 Module index no longer on the decl itself.
From-SVN: r279008
2019-12-05 16:21:46 +00:00
Nathan Sidwell
80f8e7ebe8 name-lookup.h (add_imported_namespace): Origin is unsigned.
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.

From-SVN: r279007
2019-12-05 16:01:27 +00:00
Nathan Sidwell
9619d17ff4 cp-tree.h (get_instantiating_module_decl): Delete.
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.

From-SVN: r279006
2019-12-05 15:40:49 +00:00
Nathan Sidwell
d1b62c763d module.cc (trees_in::{enum ,get_}{dup,ord}ness): 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.

From-SVN: r279005
2019-12-05 15:36:12 +00:00
Nathan Sidwell
35fb5ddc69 decl.c (duplicate_decls): Pass the old decl to module_may_redeclare.
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.

From-SVN: r278999
2019-12-05 13:16:24 +00:00
Nathan Sidwell
e9708070db module.cc (trees_out::decl_node): Move is_import test into non-streaming block.
gcc/cp/
	* module.cc (trees_out::decl_node): Move is_import test into
	non-streaming block.  Check the decl, not the instantiator.

From-SVN: r278997
2019-12-05 12:52:18 +00:00
Nathan Sidwell
4ce9f6875c Elrond is dead, long live Elrond!
From-SVN: r278972
2019-12-04 16:51:46 +00:00
Nathan Sidwell
dff733d12f module.cc (trees_out::decl_node): Refactor, removing duplicate code blocks.
gcc/cp/
	* module.cc (trees_out::decl_node): Refactor, removing duplicate
	code blocks.

From-SVN: r278971
2019-12-04 16:49:58 +00:00
Nathan Sidwell
0a6063ba94 Delete unreachable code
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.

From-SVN: r278970
2019-12-04 16:31:44 +00:00
Nathan Sidwell
b762d23483 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.

From-SVN: r278969
2019-12-04 16:11:01 +00:00
Nathan Sidwell
3661a4c90d module.cc (dumper::impl::nested_name): Add 'template ' disambiguator.
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.

From-SVN: r278906
2019-12-02 17:26:56 +00:00
Nathan Sidwell
770808de05 module.cc (will_be_import): New.
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.

From-SVN: r278772
2019-11-27 15:05:27 +00:00
Nathan Sidwell
b97d6bcf41 module.cc (trees_out::decl_node): Untangle namespace-scope emission from class-scope.
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.

From-SVN: r278771
2019-11-27 14:41:00 +00:00
Nathan Sidwell
e151a14da3 module.cc (trees_out::decl_node): Refactor function scope & specialization emission.
gcc/cp/
	* module.cc (trees_out::decl_node): Refactor function scope
	& specialization emission.

From-SVN: r278769
2019-11-27 14:15:42 +00:00
Nathan Sidwell
5e5f56e05f module.cc (trees_out::decl_node): Deal with function scope before instantiations.
gcc/cp/
	* module.cc (trees_out::decl_node): Deal with function scope
	before instantiations.

From-SVN: r278766
2019-11-27 12:25:09 +00:00
Nathan Sidwell
edfffe2c61 module.cc (trees_out::decl_node): Tag and add indirects for uninstantiated template friend.
gcc/cp/
	* module.cc (trees_out::decl_node): Tag and add indirects for
	uninstantiated template friend.
	(trees_in::tree_node): Likewise.

From-SVN: r278741
2019-11-26 23:02:52 +00:00
Nathan Sidwell
d7d4ae1910 module.cc (trees_out::decl_node): Remove a scope.
gcc/cp/
	* module.cc (trees_out::decl_node): Remove a scope.

From-SVN: r278739
2019-11-26 22:21:08 +00:00
Nathan Sidwell
6a32241a8d module.cc (depset): Delete EK_UNNAMED, EK_MAYBE_SPEC.
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.

From-SVN: r278733
2019-11-26 20:17:18 +00:00
Nathan Sidwell
b044d1d554 module.cc (trees_out::decl_node): Assert more.
gcc/cp/
	* module.cc (trees_out::decl_node): Assert more.

From-SVN: r278730
2019-11-26 18:44:20 +00:00
Nathan Sidwell
0652e05476 module.cc (module_state::check_read): Simplify to print once per import.
gcc/cp/
	* module.cc (module_state::check_read): Simplify to print once per
	import.

From-SVN: r278729
2019-11-26 18:05:45 +00:00
Nathan Sidwell
198469b348 module.cc (trees_{in,out}::core_vals): Stream _EXPR operands in forward order.
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.

From-SVN: r278727
2019-11-26 15:44:06 +00:00
Nathan Sidwell
9a9e2ff889 module.cc (struct unnamed_entity): Delete.
gcc/cp/
	* module.cc (struct unnamed_entity): Delete.

From-SVN: r278706
2019-11-25 21:20:59 +00:00
Nathan Sidwell
5180db9ae1 name-lookup.h (get_imported_namespace): Don't delare.
gcc/cp/
	* name-lookup.h (get_imported_namespace): Don't delare.
	* name-lookup.c (get_imported_namespace): Delete.

From-SVN: r278705
2019-11-25 21:17:33 +00:00
Nathan Sidwell
5fabdd2c96 Namespaces are in the entity_ary
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.

From-SVN: r278704
2019-11-25 21:12:06 +00:00
Nathan Sidwell
4771d44b98 module.cc (tree_tag): Delete tt_namespace.
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.

From-SVN: r278696
2019-11-25 18:56:13 +00:00
Nathan Sidwell
4c07c7435b module.cc (trees_out::tree_decl): Write namespaces as tt_entity.
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.

From-SVN: r278695
2019-11-25 18:49:53 +00:00
Nathan Sidwell
7a68fb011c module.cc (module_state::write_namespaces): Delete TABLE arg, look at the dep[0]
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.

From-SVN: r278694
2019-11-25 18:26:19 +00:00
Nathan Sidwell
b25fe6214b module.cc (trees_out::decl_node): Add namespace dependency here.
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.

From-SVN: r278693
2019-11-25 17:53:44 +00:00
Nathan Sidwell
5e947e4935 missed scan updates
From-SVN: r278691
2019-11-25 14:43:00 +00:00
Nathan Sidwell
815177fb2b module.cc (depset::hash::make_dependency): Add context dependency when discovering a new GMF binding.
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.

From-SVN: r278690
2019-11-25 14:37:58 +00:00
Nathan Sidwell
bed5662d49 cxx-mapper.cc (DOT_REPLACE, [...]): New.
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.

From-SVN: r278646
2019-11-23 13:44:57 +00:00
Nathan Sidwell
b0e16bbf73 module.cc (depset::EK_FOR_BINDING): New.
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.

From-SVN: r278632
2019-11-22 21:11:12 +00:00
Nathan Sidwell
3c6ca32410 module.cc (depset::hash::find_entity): Rename to ...
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.

From-SVN: r278629
2019-11-22 20:06:43 +00:00
Nathan Sidwell
d957fd24d5 module.cc (depset::DB_PSEUDO_SPEC_BIT): Delete.
gcc/cp/
	* module.cc (depset::DB_PSEUDO_SPEC_BIT): Delete.
	(depset::is_pseudo_spec): Delete.
	(depset::add_dependency): Don't set it.

From-SVN: r278627
2019-11-22 19:39:04 +00:00
Nathan Sidwell
c07ccf3e0c module.cc (trees_out::decl_node): We should not meet imported internal namespaces.
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.

From-SVN: r278625
2019-11-22 17:54:18 +00:00
Nathan Sidwell
6a335f4b5c module.cc (trees_in::lang_decl_bools): Don't set module_origin here.
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.

From-SVN: r278620
2019-11-22 15:31:37 +00:00
Nathan Sidwell
833c8c1099 cp-tree.h (DECL_MODULE_IMPORT_P): #ifdef out, not yet ready
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.

From-SVN: r278618
2019-11-22 15:08:45 +00:00
Nathan Sidwell
9a6989cef8 module.cc (trees_out::decl_value): Ensure we stay in the section.
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.

From-SVN: r278615
2019-11-22 13:33:02 +00:00
Nathan Sidwell
7acbe3c96d name-lookup.c (lookup_enum_member): Delete.
gcc/cp/
	* name-lookup.c (lookup_enum_member): Delete.
	(get_binding_or_decl): Add missing return.

From-SVN: r278603
2019-11-21 20:55:31 +00:00
Nathan Sidwell
7f546842b1 name-lookup.c (get_binding_or_decl): Only class contexts.
gcc/cp/
	* name-lookup.c (get_binding_or_decl): Only class contexts.
	* module.cc (trees_out::decl_node): Possible fixme.

From-SVN: r278602
2019-11-21 20:52:35 +00:00
Nathan Sidwell
95c50ef084 module.cc (depset::hash): Add sections member.
gcc/cp/
	* module.cc (depset::hash): Add sections member.
	(module_state::write_cluster): Use it.
	(module_state::write): Set it.

From-SVN: r278601
2019-11-21 20:37:02 +00:00
Nathan Sidwell
0406d3382c module.cc (trees_out::decl_node): Don't strip_template checking instantiation consistency.
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.

From-SVN: r278600
2019-11-21 20:32:51 +00:00
Nathan Sidwell
48a1e3062e name-lookup.c (check_local_shadow): Bail out for clones.
gcc/cp/
	* name-lookup.c (check_local_shadow): Bail out for clones.

From-SVN: r278597
2019-11-21 20:11:11 +00:00
Nathan Sidwell
b3b3453afa module.cc (dumper::impl:nested_name): Obnly show module on imports.
gcc/cp/
	* module.cc (dumper::impl:nested_name): Obnly show module on imports.
	gcc/testsuite/
	* g++dg.modules: Anjust many scans.

From-SVN: r278595
2019-11-21 20:07:44 +00:00
Nathan Sidwell
cb93a5205e module.cc (tree_tag): Rename tt_enum_int, add tt_enum_decl.
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.

From-SVN: r278524
2019-11-20 20:02:25 +00:00
Nathan Sidwell
97865b85fb module.cc (module_state::lazy_load): Add diags arg, make index unsigned.
gcc/cp/
	* module.cc (module_state::lazy_load): Add diags arg, make index
	unsigned.
	(lazy_load_specializations): Use lazy_load.

From-SVN: r278522
2019-11-20 19:15:46 +00:00
Nathan Sidwell
b6b416e217 module.cc (module_state:write_cluster): Minor cleanups
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.

From-SVN: r278521
2019-11-20 19:00:44 +00:00
Nathan Sidwell
6df613e319 module.cc (depset:entity_kind): Reorder.
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.

From-SVN: r278520
2019-11-20 18:44:27 +00:00
Nathan Sidwell
47f598b396 (class depset): Drop entity_num field.
gcc/cp/
	* (class depset): Drop entity_num field.  Adjust all users to use
	cluster.
	(module_state::write_cluster): Merge counting and marking loops.

From-SVN: r278508
2019-11-20 16:29:02 +00:00
Nathan Sidwell
e957eadc18 module.cc (module_state): Delete unnamed_{lwm,num}.
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.

From-SVN: r278507
2019-11-20 16:18:42 +00:00
Nathan Sidwell
040cd3beae 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.

From-SVN: r278506
2019-11-20 15:56:26 +00:00
Nathan Sidwell
d264896667 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.

From-SVN: r278503
2019-11-20 15:34:03 +00:00
Nathan Sidwell
7d00700c29 module.cc (module_state::{read,write}_unnamed): Specializations store entity index.
gcc/cp/
	* module.cc (module_state::{read,write}_unnamed): Specializations
	store entity index.
	(lazy_load_specializations): Use the entity index.

From-SVN: r278502
2019-11-20 15:13:47 +00:00
Nathan Sidwell
4500cde80b 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.

From-SVN: r278499
2019-11-20 14:18:35 +00:00
Nathan Sidwell
f1aef0ccd0 module.cc (trees_out::decl_node): Process unnamed decls directly here.
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

From-SVN: r278466
2019-11-19 20:45:41 +00:00
Nathan Sidwell
a038e51369 module.cc (enum tree_tag): Kill tt_anon.
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.

From-SVN: r278462
2019-11-19 19:14:39 +00:00
Nathan Sidwell
f22aa9d814 cp-tree.h (lazy_load_binding): Drop final parm.
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.

From-SVN: r278456
2019-11-19 17:10:28 +00:00
Nathan Sidwell
8e952ad0b9 Entities are numbered (part 1)
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.

From-SVN: r278454
2019-11-19 16:09:58 +00:00
Nathan Sidwell
48decd0dfc cp-tree.h (check_mergeable_specialization): Take spec_entry arg.
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.

From-SVN: r278263
2019-11-14 19:34:33 +00:00
Nathan Sidwell
dcde38d532 cp-tree.h (lang_decl_base): Note 8-bits.
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.

From-SVN: r278257
2019-11-14 17:48:29 +00:00
Nathan Sidwell
95e90a6f5a Merge trunk r278228.
From-SVN: r278241
2019-11-14 15:14:08 +00:00
Nathan Sidwell
33d139a4bd rtti.c ({push,pop}_abi_namespace): Save and restore module state.
gcc/cp/
	* rtti.c ({push,pop}_abi_namespace): Save and restore module
	state.
	(build_dynamic_cast_1, tinfo_base_init): Adjust.

From-SVN: r277712
2019-11-01 15:42:36 +00:00
Nathan Sidwell
b414b63eec module.cc (depset::hash::find_dependencies): Reach unreached specializations.
gcc/cp/
	* module.cc (depset::hash::find_dependencies): Reach unreached
	specializations.

From-SVN: r277710
2019-11-01 15:04:03 +00:00
Nathan Sidwell
a02fbe1f76 module.cc (module_state::read_cluster): Hack around cfun.
gcc/cp/
	* module.cc (module_state::read_cluster): Hack around cfun.

From-SVN: r277665
2019-10-31 11:23:38 +00:00
Nathan Sidwell
6a7526f276 module.cc (trees_out): Clean up dead code, update instrumentation.
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.

From-SVN: r277574
2019-10-29 14:52:55 +00:00
Nathan Sidwell
704e330d9c module.cc (trees_out::core_vals): Audit VAR_DECL, removing fixme.
gcc/cp/
	* module.cc (trees_out::core_vals): Audit VAR_DECL, removing fixme.

From-SVN: r277570
2019-10-29 13:31:15 +00:00
Nathan Sidwell
6662f7e1b4 module.cc (trees_{in,out}::core_vals): Stream more block fields.
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): Stream more block fields.

From-SVN: r277538
2019-10-28 19:33:57 +00:00
Nathan Sidwell
eda238fc4b module.cc (trees_{in,out}::core_vals): Stream template info's typedefs needing access checks.
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): Stream template info's
	typedefs needing access checks.

From-SVN: r277536
2019-10-28 19:17:10 +00:00
Nathan Sidwell
e5900036fe module.cc (depset): Correct documentation.
gcc/cp/
	* module.cc (depset): Correct documentation.
	(walk_kind_name): Delete unused.
	(trees_out::get_container): Lookup for redirect.

From-SVN: r277532
2019-10-28 19:01:51 +00:00
Nathan Sidwell
07572f3cdf module.cc (node_template_info): Type cannot be NULL.
gcc/cp/
	* module.cc (node_template_info): Type cannot be NULL.

From-SVN: r277529
2019-10-28 17:06:09 +00:00
Nathan Sidwell
b102dc42c7 module.cc (trees_out::{fn_parms_ini,tpl_header}): Privatize, resolving fixme.
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.

From-SVN: r277522
2019-10-28 14:29:07 +00:00
Nathan Sidwell
9f9a88de54 Merge trunk r277514.
From-SVN: r277519
2019-10-28 14:06:26 +00:00
Nathan Sidwell
184cb6c77b module.cc (trees_out::type_node): Move typdef printing after variant printing.
gcc/cp/
	* module.cc (trees_out::type_node): Move typdef printing after
	variant printing.
	(trees_in::tree_node): Simplity tt_typedef_type.

From-SVN: r277460
2019-10-25 17:14:36 +00:00
Nathan Sidwell
2db7663f58 module.cc (trees_out::core_vals): Check if template parm has a canonical type before processing it.
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.

From-SVN: r277457
2019-10-25 16:44:44 +00:00
Nathan Sidwell
71605a44ef module.cc (enum tree_tag): Delete tt_typename_decl.
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.

From-SVN: r277456
2019-10-25 15:35:18 +00:00
Nathan Sidwell
4cfb372295 module.cc (trees_out::decl_node): Fixup anonymous case.
gcc/cp/
	* module.cc (trees_out::decl_node): Fixup anonymous case.

From-SVN: r277447
2019-10-25 12:52:37 +00:00
Nathan Sidwell
e0208fe787 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.

From-SVN: r277444
2019-10-25 12:01:54 +00:00
Nathan Sidwell
717b4e3302 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.

From-SVN: r277429
2019-10-24 23:16:49 +00:00
Nathan Sidwell
19a4d5d48c 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.

From-SVN: r277428
2019-10-24 23:10:23 +00:00
Nathan Sidwell
fa0ef83417 module.cc (trees_{in,out}::tpl_parm_value): No need to stream bound ttp's TI here.
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.

From-SVN: r277423
2019-10-24 20:12:38 +00:00
Nathan Sidwell
3bcf4c0d06 Merge trunk r277416.
From-SVN: r277418
2019-10-24 17:20:12 +00:00
Nathan Sidwell
79d79839f5 module.cc (enum ct_decl_flags): Add cdf_is_defn.
gcc/cp/
	* module.cc (enum ct_decl_flags): Add cdf_is_defn.
	(module_state::{read,write}_cluster): Don't stream definitions
	separately.

From-SVN: r277357
2019-10-23 23:06:43 +00:00
Nathan Sidwell
9c3b02b7b5 module.cc (get_clone_target): Assert more.
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.

From-SVN: r277356
2019-10-23 22:56:28 +00:00
Nathan Sidwell
6e64034884 dumpfile.c (dump_begin): Move decls for RAII.
gcc/
	* dumpfile.c (dump_begin): Move decls for RAII.

From-SVN: r277355
2019-10-23 22:16:48 +00:00
Nathan Sidwell
a59bd8ad23 module.cc (trees_{in,out}::tpl_parm_value): Don't stream tpi here.
gcc/cp/
	* module.cc (trees_{in,out}::tpl_parm_value): Don't stream tpi
	here.
	(trees_{in,out}::tree_value): Strip now-unreachable code.

From-SVN: r277350
2019-10-23 20:31:04 +00:00
Nathan Sidwell
0d7974add8 module.cc (enum tree_tag): Add tt_tpl_parm.
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.

From-SVN: r277334
2019-10-23 16:03:19 +00:00
Nathan Sidwell
9f93a298de pt.c (reduce_template_parm_level): Attach TPI to the type or decl.
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.

From-SVN: r277332
2019-10-23 14:37:25 +00:00
Nathan Sidwell
58b85e2635 module.cc (trees_{in,out}::tpl_parms{,_fini}): Drop outer parms, add tpl_levels.
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.

From-SVN: r277272
2019-10-21 23:03:47 +00:00
Nathan Sidwell
1f48f66ae7 module.cc (trees_in::back_ref): New, broken out of ...
gcc/cp/
	* module.cc (trees_in::back_ref): New, broken out of ...
	(trees_in::tree_node): ... here.  Call it multiple times.

From-SVN: r277269
2019-10-21 19:48:53 +00:00
Nathan Sidwell
10349ff9c5 module.cc (trees_{in,out}::add_indirects): New, broken out of ...
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.

From-SVN: r277265
2019-10-21 18:37:50 +00:00
Nathan Sidwell
1fff3965bf module.cc (trees_{in,out}::key_mergeable): Do not stream tpl header of fn parms here.
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.

From-SVN: r277263
2019-10-21 17:32:41 +00:00
Nathan Sidwell
f70dedf201 Merge trunk r277167.
From-SVN: r277195
2019-10-18 22:54:09 +00:00
Nathan Sidwell
57a2657977 module.cc (trees_out::decl_value): Excise template_parm handling.
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.

From-SVN: r277163
2019-10-18 18:58:31 +00:00
Nathan Sidwell
b106a456b5 module.cc (dumper::impl::nested_name): Check template_parm_p directly.
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.

From-SVN: r277162
2019-10-18 18:28:57 +00:00
Nathan Sidwell
2e3baac43a module.cc (dumper::impl::nested_name): Detect template parms.
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.

From-SVN: r277159
2019-10-18 17:50:48 +00:00
Nathan Sidwell
4a8bb127b1 module.cc (trees_{in,out}::start): Stream code if permitted.
gcc/cp/
	* module.cc (trees_{in,out}::start): Stream code if permitted.
	Adjust callers.

From-SVN: r277152
2019-10-18 11:52:44 +00:00
Nathan Sidwell
ea031678c8 module.cc (trees_out::tpl_parms): Assert a lot.
gcc/cp/
	* module.cc (trees_out::tpl_parms): Assert a lot.
	(depset::hash::find_dependencies, module_state::write_cluster):
	Mark mergeable sort-specific points.

From-SVN: r277127
2019-10-17 17:44:13 +00:00
Nathan Sidwell
df2384f4e3 module.cc (trees_out::decl_value): Stream thunks too.
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.

From-SVN: r277116
2019-10-17 15:18:15 +00:00
Nathan Sidwell
0f10a98c56 module.cc (trees_{in,out}::tpl_parms): Cope with non-shared 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.

From-SVN: r277109
2019-10-17 12:45:32 +00:00
Nathan Sidwell
d4a3870c8e cp-objcp-common.c (cp_pushdecl): Set DECL_CONTEXT.
gcc/cp/
	* cp-objcp-common.c (cp_pushdecl): Set DECL_CONTEXT.
	gcc/testsuite/
	* g++.dg/modules/builtin-3_[ab].C: New.

From-SVN: r277106
2019-10-17 12:38:33 +00:00
Nathan Sidwell
badc690dab module.cc (trees_{in,out}::decl_value): Refactor some ifs.
gcc/cp/
	* module.cc (trees_{in,out}::decl_value): Refactor some ifs.

From-SVN: r277104
2019-10-17 12:10:55 +00:00
Nathan Sidwell
5db4ba4a1f decl.c (cp_make_fname_decl): Set context to global namespace, outside functions.
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.

From-SVN: r277081
2019-10-16 20:54:02 +00:00
Nathan Sidwell
5f44c9577d rtti.c (get_tinfo_desc): Set DECL_CONTEXT.
gcc/cp/
	* rtti.c (get_tinfo_desc): Set DECL_CONTEXT.
	gcc/testsuite/
	* g++.dg/modules/tinfo-1.C: New.

From-SVN: r277074
2019-10-16 16:58:42 +00:00
Nathan Sidwell
fab636d209 module.cc (enum tree_tag): Add tt_parm.
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.

From-SVN: r277069
2019-10-16 14:34:17 +00:00
Nathan Sidwell
ce0bab834c module.cc (trees_out::core_vals): Don't assert template arguments visited.
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.

From-SVN: r277006
2019-10-15 18:33:01 +00:00
Nathan Sidwell
d3d2f001d5 module.cc (trees_out::get_container): New, broken out of ...
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.

From-SVN: r277004
2019-10-15 17:07:00 +00:00
Nathan Sidwell
45916f8c3d Merge trunk r277002.
From-SVN: r277003
2019-10-15 15:22:25 +00:00
Nathan Sidwell
5a9248dc06 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.

From-SVN: r277002
2019-10-15 14:57:08 +00:00
Nathan Sidwell
ef5c7fa2b1 module.cc (merge_kind): Add MK_local_friend.
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.

From-SVN: r277001
2019-10-15 14:33:14 +00:00
Nathan Sidwell
43e296f851 Merge trunk r276888.
Pull in c++20 concepts.

From-SVN: r276893
2019-10-11 16:08:42 +00:00
Nathan Sidwell
2b0ffa5977 module.cc (trees_{in,out}::core_vals): Don't stream function parms here.
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.

From-SVN: r276884
2019-10-11 13:39:44 +00:00
Nathan Sidwell
583a504bda module.cc (enum walk_kind): Remove WK_merge.
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.

From-SVN: r276883
2019-10-11 13:31:12 +00:00
Nathan Sidwell
e19d9e72d5 optimize.c (maybe_clone_body): Allow aliasing with modules.
gcc/cp/
	* optimize.c (maybe_clone_body): Allow aliasing with modules.

From-SVN: r276881
2019-10-11 12:58:12 +00:00
Nathan Sidwell
a514ff7dcf module.cc (enum depset::entity_kind): Remove EK_CLONE.
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.

From-SVN: r276880
2019-10-11 12:51:22 +00:00
Nathan Sidwell
86839701cb Reconstruct clones on stream in
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.

From-SVN: r276879
2019-10-11 12:43:11 +00:00
Nathan Sidwell
f8e1cbb894 cp-tree.h (DECL_NEEDS_VTT_PARM_P): Delete.
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.

From-SVN: r276852
2019-10-10 20:38:32 +00:00
Nathan Sidwell
3c68293dda class.c (maybe_add_class_template_decl_list): Don't check template-id-expr friends.
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.

From-SVN: r276775
2019-10-09 21:46:21 +00:00
Nathan Sidwell
0344a960c5 cp-tree.h (DECL_UNINSTANTIATED_TEMPLATE_FRIEND_P): New.
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.

From-SVN: r276769
2019-10-09 19:25:17 +00:00
Nathan Sidwell
36f99a3dba pt.c (push_template_decl_real): Always set DECL_CHAIN for non-pushed friends.
gcc/cp/
	* pt.c (push_template_decl_real): Always set DECL_CHAIN for
	non-pushed friends.

From-SVN: r276761
2019-10-09 15:03:04 +00:00
Nathan Sidwell
18eec4a374 module.cc (trees_out::decl_value): Check streaming before dump.
gcc/cp/
	* module.cc (trees_out::decl_value): Check streaming before dump.
	(module_name): Protect from not modules.

From-SVN: r276710
2019-10-08 19:36:18 +00:00
Nathan Sidwell
4366ec4e28 module.cc (enum merge_kind): Rename non->unique.
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.

From-SVN: r276704
2019-10-08 15:43:40 +00:00
Nathan Sidwell
46ce8ce6a7 module.cc (struct nodel_decl_hash): New.
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.

From-SVN: r276701
2019-10-08 14:01:00 +00:00
Nathan Sidwell
0dc19040b2 module.cc (enum walk_kind): Rename body->value, mergeable->merge.
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.

From-SVN: r276697
2019-10-08 12:10:23 +00:00
Nathan Sidwell
b9db16d83a module.cc (enum trees_out::tags): Delete tag_mergeable, tag_cloned.
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.

From-SVN: r276677
2019-10-07 20:32:37 +00:00
Nathan Sidwell
a73cf07789 module.cc (trees_in::get_odrness): Check if overrun.
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.

From-SVN: r276676
2019-10-07 20:29:25 +00:00
Nathan Sidwell
2c6e1dc2f4 module.cc (trees_{in,out}::core_vals): Stream decl_non_common.result for using decls.
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.

From-SVN: r276666
2019-10-07 16:46:17 +00:00
Nathan Sidwell
eb9ca9da08 module.cc (enum tree_tag): Add tt_decl.
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.

From-SVN: r276662
2019-10-07 15:39:08 +00:00
Nathan Sidwell
6341b0dee7 module.cc (trees_out::decl_node): Refactor some instantiation discovery.
gcc/cp/
	* module.cc (trees_out::decl_node): Refactor some instantiation
	discovery.

From-SVN: r276656
2019-10-07 14:03:26 +00:00
Nathan Sidwell
2d2d01f0a3 Merge trunk r276597.
From-SVN: r276598
2019-10-04 19:42:21 +00:00
Nathan Sidwell
c67eeaf6a9 module.c (trees_out:decl_node): More switchification and code movement.
gcc/cp/
	* module.c (trees_out:decl_node): More switchification and code
	movement.

From-SVN: r276586
2019-10-04 15:14:06 +00:00
Nathan Sidwell
939f96284d module.c (trees_out:decl_node): Switchify, and move some checks before template detection.
gcc/cp/
	* module.c (trees_out:decl_node): Switchify, and move some checks
	before template detection.

From-SVN: r276583
2019-10-04 14:57:00 +00:00
Nathan Sidwell
e7deb02d93 module.cc (trees_in::tree_value): Rework merge_kind switching.
gcc/cp/
	* module.cc (trees_in::tree_value): Rework merge_kind switching.
	(trees_{in,out}::key_mergeable): Likewise.

From-SVN: r276578
2019-10-04 13:48:44 +00:00
Nathan Sidwell
c50b814d3c module.cc (enum merge_kind): Reorder.
gcc/cp/
	* module.cc (enum merge_kind): Reorder.

From-SVN: r276573
2019-10-04 12:10:09 +00:00
Nathan Sidwell
823e32ee93 module.cc (trees_out::decl_node): Merge and reorder tinfo streaming.
gcc/cp/
	* module.cc (trees_out::decl_node): Merge and reorder tinfo
	streaming.
	(trees_in::tree_node): Merge tinfo streaming.

From-SVN: r276526
2019-10-03 19:39:07 +00:00
Nathan Sidwell
ba8625fcae module.cc (depset::hash::add_dependency): Separate EK_REDIRECT handling from EK_MAYBE_SPEC.
gcc/cp/
	* module.cc (depset::hash::add_dependency): Separate EK_REDIRECT
	handling from EK_MAYBE_SPEC.
	(get_instantiating_module_decl): Reorder checks, remove fixme.

From-SVN: r276521
2019-10-03 18:49:05 +00:00
Nathan Sidwell
64ef524f15 Add module-cmi
From-SVN: r276520
2019-10-03 18:02:52 +00:00
Nathan Sidwell
f87cba67f6 module.cc (trees_out::decl_node): Check DECL_LANG_SPECIFIC.
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.

From-SVN: r276517
2019-10-03 15:59:30 +00:00
Nathan Sidwell
3ce26bd9fc module.cc (elf_in::{defrost,begin}): Advise random seeking.
gcc/cp/
	* module.cc (elf_in::{defrost,begin}): Advise random seeking.

From-SVN: r276514
2019-10-03 14:17:58 +00:00
Nathan Sidwell
6bf2331123 module.cc (depset::hash::add_dependency): Drop is_import arg, update callers.
gcc/cp/
	* module.cc (depset::hash::add_dependency): Drop is_import arg,
	update callers.  Calculate it here.

From-SVN: r276513
2019-10-03 14:07:35 +00:00
Nathan Sidwell
ae01adcd0c cp-tree.h (MODULE_SLOT_*): Move to ...
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.

From-SVN: r276509
2019-10-03 13:19:06 +00:00
Nathan Sidwell
1b28e44fd3 module.cc (trees_out::tree_ctx): Delete, forward all callers to tree_node.
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.

From-SVN: r276485
2019-10-02 19:48:19 +00:00
Nathan Sidwell
93fa40b795 module.cc (trees_out::tree_type): Rename to ...
gcc/cp/
	* module.cc (trees_out::tree_type): Rename to ...
	(trees_out::type_node): Drop walk_kind arg, return void.  Update
	callers.

From-SVN: r276483
2019-10-02 19:23:56 +00:00
Nathan Sidwell
a10daf43d5 module.cc (trees_out::tree_ctx): Drop need_contents parm.
gcc/cp/
	* module.cc (trees_out::tree_ctx): Drop need_contents parm.
	Update callers.
	(trees_out::tree_{type,decl}: Likewise.

From-SVN: r276478
2019-10-02 18:41:58 +00:00
Nathan Sidwell
8322a462ef module.cc (trees_out::tree_ctx): Drop inner_decl parm.
gcc/cp/
	* module.cc (trees_out::tree_ctx): Drop inner_decl parm.  Update
	callers.
	(trees_out::tree_namespace): Likewise.

From-SVN: r276477
2019-10-02 18:27:37 +00:00
Nathan Sidwell
d1f9e86750 cp-tree.h (MK_*): Document better.
gcc/cp/
	* cp-tree.h (MK_*): Document better.

From-SVN: r276476
2019-10-02 17:48:30 +00:00
Nathan Sidwell
bf32d83a4b cp-tree.h (MODULE_CURRENT, [...]): Delete.
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.

From-SVN: r276475
2019-10-02 17:36:38 +00:00
Nathan Sidwell
fdda1214b5 Don't equivocate GMF with module
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.

From-SVN: r276460
2019-10-02 13:50:10 +00:00
Nathan Sidwell
475d276318 cp-tree.h (set_originating_module): Add friend_p.
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.

From-SVN: r276400
2019-10-01 11:01:48 +00:00
Nathan Sidwell
2c7192ea60 cp-tree.h (set_module_owner): Delete.
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.

From-SVN: r276342
2019-09-30 16:49:01 +00:00
Nathan Sidwell
3c978b7d31 Merge trunk r276201.
From-SVN: r276208
2019-09-27 20:11:10 +00:00
Nathan Sidwell
972da9df5d decl.c (fixup_anonymous_aggr): Partially revert recent change.
gcc/cp/
	* decl.c (fixup_anonymous_aggr): Partially revert recent change.
	(grokfndecl): Call set_originating_module before determining
	specialization.
	(grokdeclarator): Likewise.

From-SVN: r276201
2019-09-27 19:35:02 +00:00
Nathan Sidwell
b095634d58 cp-tree.h (set_{originating,instantiating}_module): Declare.
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.

From-SVN: r276194
2019-09-27 18:33:59 +00:00
Nathan Sidwell
dd09a5c4da cp-tree.h (get_module_owner): Delete.
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.

From-SVN: r276182
2019-09-27 14:54:08 +00:00
Nathan Sidwell
3d48ab1aa4 cp-tree.h (get_declared_module_origin): 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.

From-SVN: r276181
2019-09-27 13:28:57 +00:00
Nathan Sidwell
354f7e3bc3 cp-tree.h (DECL_MODULE_OWNER): Restrict to var/fn/type/template/namespace.
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.

From-SVN: r276160
2019-09-26 19:03:49 +00:00
Nathan Sidwell
2d168eaba0 modules.cc (enum merge_kind): Rearrange.
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.

From-SVN: r276124
2019-09-25 13:39:04 +00:00
Nathan Sidwell
1a04d34b11 modules.cc (trees_out::tree_decl): RESULT and LABEL decls written by value.
gcc/cp/
	* modules.cc (trees_out::tree_decl): RESULT and LABEL decls
	written by value.  Assert only expected things remain by name.

From-SVN: r276104
2019-09-24 14:51:18 +00:00
Nathan Sidwell
84e064b5fc modules.cc (enum tree_tag): Add tt_data_member.
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.

From-SVN: r276101
2019-09-24 14:35:30 +00:00
Nathan Sidwell
5272490981 module.cc (depset): Add DB_BOTH_SPEC_BIT.
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.

From-SVN: r276066
2019-09-23 20:26:23 +00:00
Nathan Sidwell
9b0d788a82 decl.c (fixup_anonymous_aggr): Clear LAZY flags, no need to strip out fns.
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.

From-SVN: r276005
2019-09-20 20:14:44 +00:00
Nathan Sidwell
f03556d810 module.cc (enum merge_kind): Add MK_{decl,type}_tmpl_spec, MK_type_partual_spec.
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.

From-SVN: r275988
2019-09-20 02:27:00 +00:00
Nathan Sidwell
404a7ac2e8 module.cc (slurping::slurping): Init current to mostpos - 1.
gcc/cp/
	* module.cc (slurping::slurping): Init current to mostpos - 1.
	(module_state::read): Increment slurp->current when done.

From-SVN: r275987
2019-09-20 00:33:42 +00:00
Nathan Sidwell
471a100c56 module.cc (trees_in::tree_node): Check overrun more.
gcc/cp/
	* module.cc (trees_in::tree_node): Check overrun more.

From-SVN: r275980
2019-09-19 19:58:14 +00:00
Nathan Sidwell
d05c62c7f3 module.cc (trees_in::is_matching_decl): Copy DECL_TEMPLATE_INSTANTIATED.
gcc/cp/
	* module.cc (trees_in::is_matching_decl): Copy
	DECL_TEMPLATE_INSTANTIATED.
	gcc/testsuite/
	* g++.dg/modules/inst-5_[ab].[CH]: New.

From-SVN: r275927
2019-09-19 02:47:12 +00:00
Nathan Sidwell
b0595774eb module.cc (trees_in::mergeables): Vec of intptr_t.
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.

From-SVN: r275920
2019-09-19 00:12:40 +00:00
Nathan Sidwell
f5d6fbfc11 module.cc (trees_in): Delete skip_defns & handling.
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.

From-SVN: r275918
2019-09-18 23:14:43 +00:00
Nathan Sidwell
fda92b0cda module.cc (trees_in::is_skippable_defns): Defns always complete incomplete.
gcc/cp/
	* module.cc (trees_in::is_skippable_defns): Defns always complete
	incomplete.
	gcc/testsuite/
	* g++.dg/modules/merge-3_[ab].[CH]: New.

From-SVN: r275835
2019-09-18 04:02:27 +00:00
Nathan Sidwell
24fe0c0d38 module.cc (depset::DB_TYPE_SPEC_BIT): New.
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.

From-SVN: r275767
2019-09-17 03:05:37 +00:00
Nathan Sidwell
ae7be7a931 module.cc (spec_tuple): Delete type.
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.

From-SVN: r275766
2019-09-17 02:37:46 +00:00
Nathan Sidwell
fabcfee5cd cp-tree.h (check_mergeable_specialization): Declare.
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.

From-SVN: r275765
2019-09-17 02:32:07 +00:00
Nathan Sidwell
79ec1864a9 module.cc (enum merge_kind): Add MK_linkage.
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.

From-SVN: r275764
2019-09-17 02:00:51 +00:00
Nathan Sidwell
59c0ac5b08 module.cc (enum merge_kind): Add MK_linkage.
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.

From-SVN: r275756
2019-09-16 18:45:57 +00:00
Nathan Sidwell
d0e0ce4b53 module.cc (trees_in::chained_decls): No need to deal with clones here.
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.

From-SVN: r275732
2019-09-15 19:30:22 +00:00
Nathan Sidwell
a2114feb25 Merge trunk r275727.
From-SVN: r275728
2019-09-15 13:26:21 +00:00
Nathan Sidwell
a159438d1c name-lookup.c (get_namespace_binding): Fish out global binding, if it's a vector.
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.

From-SVN: r275711
2019-09-14 01:09:00 +00:00
Nathan Sidwell
32f2cf50b0 cp-tree.h (MODULE_VECTOR_LAZY_SPEC_P): Use TREE_THIS_VOLATILE.
gcc/cp/
	* cp-tree.h (MODULE_VECTOR_LAZY_SPEC_P): Use TREE_THIS_VOLATILE.
	gcc/testsuite/
	* g++.dg/modules/binding-1_[abc].[HC]: New.

From-SVN: r275710
2019-09-14 00:31:02 +00:00
Nathan Sidwell
c60bb6dace cp-tree.def (UNBOUND_CLASS_TEMPLATE): Correct docs.
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.

From-SVN: r275688
2019-09-12 18:49:52 +00:00
Nathan Sidwell
e33095fafb module.cc (trees_out::core_vals): Never write template_decl's type ...
gcc/cp/
	* module.cc (trees_out::core_vals): Never write template_decl's
	type ...
	(trees_in::tree_value): .. resurrect it here instead.

From-SVN: r275687
2019-09-12 18:37:06 +00:00
Nathan Sidwell
622baed8ae module.cc: Sort many switch stmts.
gcc/cp/
	* module.cc: Sort many switch stmts.

From-SVN: r275686
2019-09-12 15:34:13 +00:00
Nathan Sidwell
66d30b1a8e Merge trunk r275641.
From-SVN: r275658
2019-09-11 18:57:57 +00:00
Nathan Sidwell
af8dff0709 typos
From-SVN: r275596
2019-09-10 18:22:37 +00:00
Nathan Sidwell
02cd0c0e6f Merge trunk r275518
From-SVN: r275538
2019-09-09 18:39:05 +00:00
Nathan Sidwell
ab38275e2f module.cc (enum depset::disc_bits): Delete DB_REACHED_ONCE_BIT.
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.

From-SVN: r275520
2019-09-09 16:15:36 +00:00
Nathan Sidwell
b2f5eb4815 module.cc (enum depset::disc_bits): Add DB_REACHED_ONCE_BIT.
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.

From-SVN: r275474
2019-09-06 19:25:19 +00:00
Nathan Sidwell
5c6dbac60a Merge trunk r275458.
From-SVN: r275459
2019-09-06 13:23:09 +00:00
Nathan Sidwell
d3f8b04777 concept-2_[ab].C: New.
gcc/testsuite/
	* g++.dg/modules/concept-2_[ab].C: New.

From-SVN: r275443
2019-09-05 20:18:34 +00:00
Nathan Sidwell
781a778345 module.cc (trees_{in,out}::core_vals): Stream constraint_info.
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.

From-SVN: r275441
2019-09-05 20:05:48 +00:00
Nathan Sidwell
cf7bb223a2 module.cc (module_state::write_location): Check streaming here.
gcc/cp/
	* module.cc (module_state::write_location): Check streaming here.
	Adjust many callers.

From-SVN: r275425
2019-09-05 17:19:45 +00:00
Nathan Sidwell
fc7fd59b07 module.cc (trees_{in,out}::core_vals): Move some node handling into the new switch.
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): Move some node handling
	into the new switch.

From-SVN: r275424
2019-09-05 16:51:55 +00:00
Nathan Sidwell
2494c1dc72 module.cc (trees_{in,out}::core_vals): Reorder part 7.
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.

From-SVN: r275423
2019-09-05 16:34:31 +00:00
Nathan Sidwell
e7a02b9bbf module.cc (trees_{in,out}::core_vals): Reorder part 6.
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): Reorder part 6.

From-SVN: r275420
2019-09-05 15:18:19 +00:00
Nathan Sidwell
3fc6adf03f module.cc (trees_{in,out}::core_vals): Reorder part 5.
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): Reorder part 5.

From-SVN: r275419
2019-09-05 15:13:07 +00:00
Nathan Sidwell
61a9ce640d module.cc (trees_{in,out}::core_vals): Reorder part 4.
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): Reorder part 4.

From-SVN: r275418
2019-09-05 15:01:56 +00:00
Nathan Sidwell
f2cf6b97d0 module.cc (trees_{in,out}::core_vals): Reorder part 3.
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): Reorder part 3.

From-SVN: r275417
2019-09-05 14:51:02 +00:00
Nathan Sidwell
089e5d47a6 module.cc (trees_{in,out}::core_vals): Reorder part 2.
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): Reorder part 2.

From-SVN: r275416
2019-09-05 14:39:52 +00:00
Nathan Sidwell
0e3a7bb34c module.cc (trees_{in,out}::core_vals): Reorder part 1.
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): Reorder part 1.

From-SVN: r275415
2019-09-05 14:26:41 +00:00
Nathan Sidwell
16e6fbbeb4 module.cc (trees_out::tree_type): There are no indescribable types.
gcc/cp/
	* module.cc (trees_out::tree_type): There are no indescribable types.

From-SVN: r275413
2019-09-05 14:04:05 +00:00
Nathan Sidwell
8c1e90cd89 module.cc (trees_{in,out}::core_vals): Redo enum underlying type streaming.
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): Redo enum underlying type
	streaming.

From-SVN: r275412
2019-09-05 13:58:49 +00:00
Nathan Sidwell
26373cf317 Merge trunk r275404.
From-SVN: r275407
2019-09-05 13:27:34 +00:00
Nathan Sidwell
19caba300d module.cc (trees_out::tree_type): Stream ptrmemfuncs at the appropriate point.
gcc/cp/
	* module.cc (trees_out::tree_type): Stream ptrmemfuncs at the
	appropriate point.

From-SVN: r275226
2019-08-30 20:24:30 +00:00
Nathan Sidwell
b2a492d230 module.cc (trees_in::finish{,_type}): Delete.
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.

From-SVN: r275225
2019-08-30 20:08:22 +00:00
Nathan Sidwell
eac2d8ff16 module.cc (trees_out::tree_type): Write non-standard integer types here.
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.

From-SVN: r275212
2019-08-30 18:00:29 +00:00
Nathan Sidwell
f468a3e002 module.cc (trees_{in,out}::start): Refactor switch.
gcc/cp/
	* module.cc (trees_{in,out}::start): Refactor switch.
	(trees_{in,out}::core_vals): Remove first switch.

From-SVN: r275209
2019-08-30 17:15:45 +00:00
Nathan Sidwell
220a0eb8e4 module.cc (enum streamed_extensions): New.
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.

From-SVN: r275203
2019-08-30 16:24:51 +00:00
Nathan Sidwell
cb481848a4 module.cc (trees_{in,out}::start): Deal with OMP_CLAUSE.
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.

From-SVN: r275194
2019-08-30 15:08:59 +00:00
Nathan Sidwell
71ced5cec1 module.cc (friend_from_decl_list): Reimplement.
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.

From-SVN: r275179
2019-08-30 14:11:38 +00:00
Nathan Sidwell
5c5bc07d61 module.cc (enum tree_tag): Drop tt_mergeable, tt_clone.
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.

From-SVN: r275169
2019-08-30 13:47:53 +00:00
Nathan Sidwell
06389666f2 module.cc (trees_out::tree_decl): VTTs are just vtables.
gcc/cp/
	* module.cc (trees_out::tree_decl): VTTs are just vtables.
	gcc/testsuite/
	* g++.dg/modules/vtt-1_[abc].C: New.

From-SVN: r275051
2019-08-29 18:52:10 +00:00
Nathan Sidwell
becc5e8e55 module.cc (trees_{in,out}::core_vals): We never see TS_CP_ARGUMENT_PACK_SELECT nodes.
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): We never see
	TS_CP_ARGUMENT_PACK_SELECT nodes.

From-SVN: r275048
2019-08-29 17:27:23 +00:00
Nathan Sidwell
69d91d1a29 Merge trunk r275034.
From-SVN: r275047
2019-08-29 15:14:45 +00:00
Nathan Sidwell
39d7025faa module.cc (struct location_map_info): New.
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.

From-SVN: r275006
2019-08-28 20:16:09 +00:00
Nathan Sidwell
0c22b1b8d9 Merge trunk r274992.
From-SVN: r274995
2019-08-28 15:59:20 +00:00
Nathan Sidwell
7c60df6a19 module.cc (note_includes): Renamed from inform_includes.
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.

From-SVN: r274948
2019-08-27 11:03:01 +00:00
Nathan Sidwell
82e98476fa module.cc (note_includes): Renamed from inform_includes.
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.

From-SVN: r274936
2019-08-26 20:04:20 +00:00
Nathan Sidwell
43ef2376a9 module.cc (trees_in::finish): Don't clear PENDING_TEMPLATE here.
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.

From-SVN: r274909
2019-08-25 15:28:46 +00:00
Nathan Sidwell
c3ce5a5dc1 module.cc (trees_out::tree_decl): Vtables are distinguished by DECL_VIRTUAL_P.
gcc/cp/
	* module.cc (trees_out::tree_decl): Vtables are distinguished by
	DECL_VIRTUAL_P.

From-SVN: r274908
2019-08-25 15:10:22 +00:00
Nathan Sidwell
aa04791a0c Merge trunk r274867.
From-SVN: r274873
2019-08-23 20:11:04 +00:00
Nathan Sidwell
9b773ac6ff module.cc (trees_out::core_bools): Don't propagate asm_written for types.
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.

From-SVN: r274855
2019-08-23 12:41:14 +00:00
Nathan Sidwell
bd3b1bba8f module.cc (depset::hash::add_dependency): We should never find a redirect.
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.

From-SVN: r274832
2019-08-22 18:49:22 +00:00
Nathan Sidwell
0fa429d0a8 module.cc (MOD_SNAME_PFX): Resurrect initial dot.
gcc/cp/
	* module.cc (MOD_SNAME_PFX): Resurrect initial dot.
	(elf_out::strtab_write): Elide global namespace.

From-SVN: r274821
2019-08-22 14:36:37 +00:00
Nathan Sidwell
b933d2b895 module.cc (trees_in::assert_definition): Relax already-present assert.
gcc/cp/
	* module.cc (trees_in::assert_definition): Relax already-present
	assert.

From-SVN: r274811
2019-08-21 20:42:46 +00:00
Nathan Sidwell
c96fcf576a module.cc (finish_module_processing): Protect against null filename.
gcc/cp/
	* module.cc (finish_module_processing): Protect against null
	filename.

From-SVN: r274802
2019-08-21 16:39:39 +00:00
Nathan Sidwell
f17b47937b module.cc (elf_in::release): Reset size too.
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.

From-SVN: r274801
2019-08-21 16:26:17 +00:00
Nathan Sidwell
4f16704dc7 c.opt (Winclude-translate*): New family of options.
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.

From-SVN: r274797
2019-08-21 13:29:29 +00:00
Nathan Sidwell
3039793b79 module.cc (set_cmi_repo): NULL means default init.
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.

From-SVN: r274795
2019-08-21 11:27:41 +00:00
Nathan Sidwell
e4f8c1383f module.cc (module_state::module_state): Header must be .-relative if not absolute.
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.

From-SVN: r274752
2019-08-20 18:03:00 +00:00
Nathan Sidwell
41e138cfb0 Merge trunk r274747.
From-SVN: r274750
2019-08-20 14:26:02 +00:00
Nathan Sidwell
f27682ad5a Merge trunk r273943 (Jason's TEMPLATE_INFO changes).
From-SVN: r274747
2019-08-20 12:40:44 +00:00
Nathan Sidwell
a43273e38a Merge trunk r273906 (Martin's function_decl.decl_type changes).
From-SVN: r274745
2019-08-20 11:49:54 +00:00
Nathan Sidwell
bdd8603c1c Merge trunk r273771.
From-SVN: r274679
2019-08-19 19:22:51 +00:00
Nathan Sidwell
29d9d42f90 name-lookup.c (get_cxx_dialect_name): Make extern.
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.

From-SVN: r274055
2019-08-04 08:55:11 +00:00
Nathan Sidwell
fcc851e556 module.cc (module_state::deferred_macro): Emit warning if at end of TU.
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.

From-SVN: r273970
2019-08-01 10:30:39 +00:00
Nathan Sidwell
f5d248fe3d module.cc (node_template_info): Enums may be function-local.
gcc/cp/
	* module.cc (node_template_info): Enums may be function-local.
	gcc/testsuite/
	* g++.dg/modules/enum-7.C: New.

From-SVN: r273846
2019-07-27 23:35:56 +00:00
Nathan Sidwell
78dd9bcb3a invoke.texi (C++ Modules): Update.
gcc/
	* doc/invoke.texi (C++ Modules): Update.

From-SVN: r273845
2019-07-27 22:33:40 +00:00
Nathan Sidwell
b500dbeede 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.

From-SVN: r273785
2019-07-25 02:26:09 +00:00
Nathan Sidwell
5f9e9678c0 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.

From-SVN: r273784
2019-07-25 02:15:37 +00:00
Nathan Sidwell
28068e1ed2 Merge trunk r273764.
From-SVN: r273765
2019-07-24 17:01:08 +00:00
Nathan Sidwell
9c4b070dc4 alias-2_a.H: Add dg-module-header.
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.

From-SVN: r273764
2019-07-24 15:55:57 +00:00
Nathan Sidwell
b6c4971027 module.cc (trees_out::tree_decl): Cope with using decls in the binding list.
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.

From-SVN: r273762
2019-07-24 12:26:06 +00:00
Nathan Sidwell
6295b8d4ae module.cc (enum merge_kind): Add MK_enum.
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.

From-SVN: r273760
2019-07-24 11:46:43 +00:00
Nathan Sidwell
c93d61bfb8 module.cc (depset): Rename MARKED to SPECIAL, update all users.
gcc/cp/
	* module.cc (depset): Rename MARKED to SPECIAL, update all users.

From-SVN: r273739
2019-07-23 15:16:08 +00:00
Nathan Sidwell
173b94f0bd Add quoting from Boris Kolpackov
From-SVN: r273735
2019-07-23 11:21:43 +00:00
Nathan Sidwell
c83c9a079f parser.c (cp_parser_class_specifier_1): Fixup a template's type with a late exception specifier.
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.

From-SVN: r273701
2019-07-22 15:49:57 +00:00
Boris Kolpackov
aa573b96db Make-lang.in (MODULE_REVISION): Add git rev, if it's git.
gcc/cp/
	* Make-lang.in (MODULE_REVISION): Add git rev, if it's git.

From-SVN: r273699
2019-07-22 15:21:43 +00:00
Nathan Sidwell
994368ba58 detect git clone (from boris kolpackov)
From-SVN: r273565
2019-07-18 06:29:12 +00:00
Nathan Sidwell
a0b8a5f704 Fix additional options
From-SVN: r273532
2019-07-16 15:06:56 +00:00
Nathan Sidwell
91cfd8ec22 module.cc (module_state::read_{bindings,namespaces}): Use plain vec
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.

From-SVN: r273530
2019-07-16 14:47:12 +00:00
Nathan Sidwell
5774210561 module.cc (depset::hash::add_writables): 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.

From-SVN: r273528
2019-07-16 14:04:34 +00:00
Nathan Sidwell
9fbcbb023f 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.

From-SVN: r273517
2019-07-16 09:00:15 +00:00
Nathan Sidwell
ff216dad57 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.

From-SVN: r273512
2019-07-16 08:43:03 +00:00
Nathan Sidwell
7fc0f84d30 c-opts.c (c_common_handle_option): Remove {user,system}_search.
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.

From-SVN: r273307
2019-07-09 14:36:39 +00:00
Nathan Sidwell
ea401bcb1b c-common.c (try_to_locate_new_include): Use strcmp and ignore zero-line maps.
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.

From-SVN: r273239
2019-07-08 17:18:25 +00:00
Nathan Sidwell
10a2b8be17 syncing version
From-SVN: r273234
2019-07-08 12:17:11 +00:00
Nathan Sidwell
d848ae7786 Merge trunk r273185.
From-SVN: r273186
2019-07-08 00:14:24 +00:00
Nathan Sidwell
bc1696a438 files.c (cpp_find_failed): Replace with ...
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.

From-SVN: r273185
2019-07-07 23:43:59 +00:00
Nathan Sidwell
f4f9311cbc module.cc (module_state::write_cluster): Return cluster size.
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.

From-SVN: r273183
2019-07-07 16:49:40 +00:00
Nathan Sidwell
91530d70f9 timevar.def (TV_MODULE_{IMPORT,EXPORT,MAPPER}): Define.
gcc/
	* timevar.def (TV_MODULE_{IMPORT,EXPORT,MAPPER}): Define.
	gcc/cp/
	* module.cc: Include timvar.h.  Sprinkle timevar accounting throughout.

From-SVN: r273179
2019-07-07 15:51:12 +00:00
Nathan Sidwell
44981b7596 Merge trunk r273146.
From-SVN: r273150
2019-07-06 00:04:07 +00:00
Nathan Sidwell
fc2657e9dd decl2.c (c_parse_final_cleanups): Don't do static init things for a header module.
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.

From-SVN: r273146
2019-07-05 17:43:53 +00:00
Nathan Sidwell
ac18b2fa17 iostream-1_[ab].[HC]: New.
gcc/testsuite/
	* g++.dg/modules/iostream-1_[ab].[HC]: New.

From-SVN: r273142
2019-07-05 15:44:29 +00:00
Nathan Sidwell
c6ee590834 module.cc (module_state_config::get_opts): Drop -g* switches.
gcc/cp/
	* module.cc (module_state_config::get_opts): Drop -g* switches.

From-SVN: r273141
2019-07-05 15:40:37 +00:00
Nathan Sidwell
309d354cdf cp-tree.h (get_tinfo_decl_direct): Declare.
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.

From-SVN: r273137
2019-07-05 13:02:30 +00:00
Nathan Sidwell
6f2a78e717 module.cc (module_state::read_cluster): finalize_function may not GC.
gcc/cp/
	* module.cc (module_state::read_cluster): finalize_function may
	not GC.

From-SVN: r273094
2019-07-04 20:37:37 +00:00
Nathan Sidwell
8fbb349b19 module.cc (enum cluster_tag): Add ct_defn.
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..

From-SVN: r273093
2019-07-04 20:08:41 +00:00
Nathan Sidwell
0848fdc820 module.cc (trees_{in,out}::key_mergeable): Always stream context.
gcc/cp/
	* module.cc (trees_{in,out}::key_mergeable): Always stream context.
	gcc/testsuite/
	* g++.dg/modules/merge-1_[ab].[HC]: New.

From-SVN: r273092
2019-07-04 19:18:53 +00:00
Nathan Sidwell
488c4ecb8d module.cc (trees_out::key_mergeable): Return merge kind.
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.

From-SVN: r273085
2019-07-04 15:26:38 +00:00
Nathan Sidwell
ce3738a284 module.cc (trees_out::tree_type): Add TYPEOF_TYPE, UNDERLYING_TYPE.
gcc/cp/
	* module.cc (trees_out::tree_type): Add TYPEOF_TYPE, UNDERLYING_TYPE.
	(trees_in::tree_node): Likewise.

From-SVN: r273015
2019-07-03 17:54:35 +00:00
Nathan Sidwell
106fe4aaa3 module.cc (struct unnamed_entity): GTY it.
gcc/cp/
	* module.cc (struct unnamed_entity): GTY it.
	(unnamed_map): Not a GTY object.

From-SVN: r273014
2019-07-03 17:42:53 +00:00
Nathan Sidwell
4cddaa61d0 module.cc (trees_{in,out}::fn_parms): Rename to ...
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.

From-SVN: r273012
2019-07-03 16:44:07 +00:00
Nathan Sidwell
667dc8ff0e module.cc (trees_out::tree_type): Add DECLTYPE_TYPE.
gcc/cp/
	* module.cc (trees_out::tree_type): Add DECLTYPE_TYPE.
	(trees_in::tree_node): Likewise.

From-SVN: r273010
2019-07-03 13:35:29 +00:00
Nathan Sidwell
27471cebcf module.cc (trees_in::core_vals): Protect binfo base reading.
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.

From-SVN: r272945
2019-07-02 17:28:04 +00:00
Nathan Sidwell
7ef5accd5e Rename bmi->cmi everywhere.
gcc/testsuite/
	Rename bmi->cmi everywhere.

From-SVN: r272942
2019-07-02 15:30:28 +00:00
Nathan Sidwell
199d5b5dac cp-tree.h (module_has_cmi_p): Renamed.
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.

From-SVN: r272941
2019-07-02 15:27:22 +00:00
Nathan Sidwell
347e6ebdf3 module.cc (trees_out::fn_parms): Don't use canonical type any more.
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.

From-SVN: r272940
2019-07-02 15:24:35 +00:00
Nathan Sidwell
aa377911c1 module.cc (trees_out::tree_decl): Write types for typedefs.
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.

From-SVN: r272939
2019-07-02 14:17:06 +00:00
Nathan Sidwell
0edc639154 module.cc (trees_out::tree_type): Add pack types.
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.

From-SVN: r272937
2019-07-02 13:30:36 +00:00
Nathan Sidwell
41c1e24961 module.cc (trees_out::tree_type): Detect bound template template parm.
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.

From-SVN: r272936
2019-07-02 12:59:36 +00:00
Nathan Sidwell
633f627ef3 module.cc (trees_out::tree_type): Add COMPLEX and VECTOR types.
gcc/cp/
	* module.cc (trees_out::tree_type): Add COMPLEX and VECTOR types.
	(trees_in::tree_node): ... and here.

From-SVN: r272935
2019-07-02 12:24:49 +00:00
Nathan Sidwell
17848a6f05 module.cc (trees_out::tree_decl): Deal with tinfo vars and vtables here ...
gcc/cp/
	* module.cc (trees_out::tree_decl): Deal with tinfo vars and
	vtables here ...
	(trees_out::tree_node): ... not here.

From-SVN: r272934
2019-07-02 12:02:45 +00:00
Nathan Sidwell
a9d580c881 module.cc (trees_out::tree_decl): Deal with tinfo type_decls 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.

From-SVN: r272933
2019-07-02 11:59:10 +00:00
Nathan Sidwell
e76c83f702 module.cc (trees_out::tree_decl): Fix dump typo.
gcc/cp/
	* module.cc (trees_out::tree_decl): Fix dump typo.
	(trees_in::tree_value): Likewise.
	(module_state::read_cluster): Show end.

From-SVN: r272910
2019-07-01 21:44:55 +00:00
Nathan Sidwell
ae69777a4c module.cc (module_state::write): Don't stream env.
gcc/cp/
	* module.cc (module_state::write): Don't stream env.

From-SVN: r272909
2019-07-01 21:31:03 +00:00
Nathan Sidwell
e97ba75490 module.cc (trees_in:::read_function_def): Push the template for post processing.
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.

From-SVN: r272895
2019-07-01 18:35:24 +00:00
Nathan Sidwell
01262014fb module.cc (depset::hash::add_binding): Return added flag.
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.

From-SVN: r272892
2019-07-01 18:04:35 +00:00
Nathan Sidwell
9302b97ef6 module.cc (enum tree_tag): Add tt_clone_ref.
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.

From-SVN: r272888
2019-07-01 16:25:33 +00:00
Nathan Sidwell
179a13f2ef module.cc (depset::entity_kind): Add EK_CLONE.
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.

From-SVN: r272775
2019-06-28 00:19:40 +00:00
Nathan Sidwell
f4a515b031 module.cc (trees_{in,out}::core_vals): Stream abstract_origin.
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): Stream abstract_origin.

From-SVN: r272762
2019-06-27 19:16:33 +00:00
Nathan Sidwell
636410a5a1 class.c (build_clone): Neaten and assert.
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.

From-SVN: r272761
2019-06-27 19:12:28 +00:00
Nathan Sidwell
0933d36ef4 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.

From-SVN: r272752
2019-06-27 13:05:53 +00:00
Nathan Sidwell
b397dfaa11 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.

From-SVN: r272724
2019-06-27 00:18:34 +00:00
Nathan Sidwell
8c57d25cd5 Merge trunk r272714.
From-SVN: r272716
2019-06-26 21:12:13 +00:00
Nathan Sidwell
6571868d7f decl.c (duplicate_decls): Non-modules are ok for builtins.
gcc/cp/
	* decl.c (duplicate_decls): Non-modules are ok for builtins.
	gcc/testsuite/
	* g++.dg/modules/builtin-2.C: New.

From-SVN: r272714
2019-06-26 20:43:31 +00:00
Nathan Sidwell
14a2096679 module.cc (depset::hash::add_mergeable_horcrux): Add redirect as necessary.
gcc/cp/
	* module.cc (depset::hash::add_mergeable_horcrux): Add redirect as
	necessary.
	gcc/testsuite/
	* g++.dg/modules/tpl-spec-7.C: New.

From-SVN: r272709
2019-06-26 19:00:39 +00:00
Nathan Sidwell
bb885bd186 module.cc (depset::hash::add_redirect): 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.

From-SVN: r272707
2019-06-26 18:50:09 +00:00
Nathan Sidwell
ad7d7da738 module.cc (finish_module_processing): Adjust failed to write error.
gcc/cp/
	* module.cc (finish_module_processing): Adjust failed to write error.
	gcc/testsuite/
	* g++.dg/modules/internal-1.C: Adjust.

From-SVN: r272706
2019-06-26 18:24:47 +00:00
Nathan Sidwell
4298af52cf module.cc (depset::entity_kind): Add EK_REDIRECT.
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.

From-SVN: r272705
2019-06-26 18:14:37 +00:00
Nathan Sidwell
626883fa68 module.cc (trees_{in,out}::note_definition): Rename to ...
gcc/cp/
	* module.cc (trees_{in,out}::note_definition): Rename to ...
	 (trees_{in,out}::assert_definition): ... here.  Update callers.

From-SVN: r272698
2019-06-26 15:56:34 +00:00
Nathan Sidwell
0a234cae43 cp-tree.h (match_mergeable_specialization): Add insert parm.
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.

From-SVN: r272696
2019-06-26 14:46:58 +00:00
Nathan Sidwell
f114147110 module.cc (module_state:note_cmi_name): New.
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.

From-SVN: r272657
2019-06-25 18:47:13 +00:00
Nathan Sidwell
63d76ba153 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.

From-SVN: r272617
2019-06-24 13:30:50 +00:00
Nathan Sidwell
0cce6e60c6 Merge trunk r272583.
From-SVN: r272609
2019-06-23 22:52:08 +00:00
Nathan Sidwell
41debb0329 modules.cc (depset): Add DB_OOT_SPEC_BIT.
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.

From-SVN: r272562
2019-06-21 19:13:13 +00:00
Nathan Sidwell
1a60f0650e modules.cc (note_defs): New checking hash table.
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.

From-SVN: r272557
2019-06-21 17:37:01 +00:00
Nathan Sidwell
5a41b8d65f modules.cc (dumper::operator ()): Print indentation level.
gcc/cp/
	* modules.cc (dumper::operator ()): Print indentation level.
	gcc/testsuite/
	* g++.dg/modules/scc-1.C: Adjust dump scan.

From-SVN: r272548
2019-06-21 14:12:20 +00:00
Nathan Sidwell
7ee18e5293 modules.cc (node_template_info): Enums are awkwarder.
gcc/cp/
	* modules.cc (node_template_info): Enums are awkwarder.
	gcc/testsuite/
	* g++.dg/modules/enum-4_[ab].C: New.

From-SVN: r272546
2019-06-21 13:35:38 +00:00
Nathan Sidwell
839e6349c0 module.cc (tree_out::mark_class_def): Mark bitfield's representative field.
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.

From-SVN: r272522
2019-06-20 20:58:09 +00:00
Nathan Sidwell
a487221d9c module.cc (enum tree_tag): Add tt_thunk.
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.

From-SVN: r272521
2019-06-20 20:29:51 +00:00
Nathan Sidwell
ff6d81e3e8 parser.c (cp_lexer_tokenize): Skip pragmas.
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.

From-SVN: r272519
2019-06-20 19:38:34 +00:00
Nathan Sidwell
d663910d7c 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.

From-SVN: r272517
2019-06-20 18:11:41 +00:00
Nathan Sidwell
412a45a062 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.

From-SVN: r272488
2019-06-19 22:15:26 +00:00
Nathan Sidwell
d10eccc41c Merge trunk r272419.
From-SVN: r272420
2019-06-18 13:40:53 +00:00
Nathan Sidwell
5a56197b26 module.cc (specialization_cmp): Deal with more equivalencies.
gcc/cp/
	* module.cc (specialization_cmp): Deal with more equivalencies.
	(depset_cmp): New, cloned and adjusted from cluster_cmp.
	(depset::hash::connect): Use it.

From-SVN: r272419
2019-06-18 13:15:23 +00:00
Nathan Sidwell
5757e0421a module.cc (trees_out::fn_parms): Stream canonical type.
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.

From-SVN: r272398
2019-06-17 18:59:01 +00:00
Nathan Sidwell
ce58251f90 module.cc (depset::hash::add_dependency): Don't register internal entities when in a header module.
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.

From-SVN: r272314
2019-06-14 21:19:40 +00:00
Nathan Sidwell
04c45fd07e module.cc (depset::hash::add_dependency): Inhibit internal linkage setting on functions.
gcc/cp/
	* module.cc (depset::hash::add_dependency): Inhibit internal
	linkage setting on functions.
	(cluster_cmp): We can meet matching using decls.

From-SVN: r272313
2019-06-14 20:45:56 +00:00
Nathan Sidwell
993696ab05 module.cc (depset::hash::add_dependency): Unnamed elaborated types have no linkage.
gcc/cp/
	* module.cc (depset::hash::add_dependency): Unnamed elaborated
	types have no linkage.
	gcc/testsuite/
	* g++.dg/modules/enum-5_[ab].[HC]: New.

From-SVN: r272312
2019-06-14 19:33:47 +00:00
Nathan Sidwell
303b4abb58 module.cc (module_state::{read,write}_cluster): Check stat hack is for implicit typedefs.
gcc/cp/
	* module.cc (module_state::{read,write}_cluster): Check stat hack
	is for implicit typedefs.

From-SVN: r272311
2019-06-14 18:57:55 +00:00
Nathan Sidwell
20f1424c05 module.cc (trees_out::tree_type): Simplify if-tree.
gcc/cp/
	* module.cc (trees_out::tree_type): Simplify if-tree.

From-SVN: r272310
2019-06-14 18:41:43 +00:00
Nathan Sidwell
690d2eadc0 module.cc (trees_{in,out}::core_vals): Stream original_type of type of typedefs, not their type.
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.

From-SVN: r272297
2019-06-14 18:04:34 +00:00
Nathan Sidwell
d7f4c4389e module.cc (binding_cmp): There can be an implicit and non-implicit type_decl.
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.

From-SVN: r272286
2019-06-14 12:35:25 +00:00
Nathan Sidwell
6bcf78c2a3 module.cc (depset::hash::add_specializations): Partial instantiations need their template.
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.

From-SVN: r272246
2019-06-13 14:28:31 +00:00
Nathan Sidwell
cbc8f25dfd syncing version
From-SVN: r272172
2019-06-11 20:42:03 +00:00
Nathan Sidwell
446396ffea fix typo
From-SVN: r272171
2019-06-11 20:41:44 +00:00
Nathan Sidwell
784c087a43 Merge trunk r272149.
From-SVN: r272153
2019-06-11 13:07:17 +00:00
Nathan Sidwell
bb0b8f3c3b missed changelog
From-SVN: r272149
2019-06-11 12:32:12 +00:00
Nathan Sidwell
e96463943e module.cc (module_state::read_location): Don't map UNKNOWN_LOCATION to loc.
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.

From-SVN: r272128
2019-06-10 20:03:21 +00:00
Nathan Sidwell
6172dc2a5f module.cc (loc_spans::init): Correct macro range ordering.
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.

From-SVN: r272118
2019-06-10 13:23:13 +00:00
Nathan Sidwell
6f57f5d72b missed changelog
From-SVN: r272052
2019-06-07 20:36:24 +00:00
Nathan Sidwell
fb988b5b3b module.cc (module_state::write_env): New.
gcc/cp/
	* module.cc (module_state::write_env): New.
	(module_state::write): Call it.

From-SVN: r272049
2019-06-07 19:13:43 +00:00
Nathan Sidwell
75d2a29d53 Make-lang.in (REVISION_c): Don't test it.
gcc/cp/
	* Make-lang.in (REVISION_c): Don't test it.
	* module.cc (module_state::write_locations): Fix off-by-one thinko.

From-SVN: r272048
2019-06-07 18:35:20 +00:00
Nathan Sidwell
ffcd1dcb5b module.cc (loc_spans::init): Add lmaps parm, separate main from forced header locs.
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.

From-SVN: r272042
2019-06-07 13:14:16 +00:00
Nathan Sidwell
fa038ee5eb module.cc (dumper::MACRO): New flag.
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.

From-SVN: r272041
2019-06-07 12:24:26 +00:00
Nathan Sidwell
c3907a8619 module.cc (bytes_out::print_time): New.
gcc/cp/
	* module.cc (bytes_out::print_time): New.
	(module_state::write_readme): Dump some environmental data.

From-SVN: r272039
2019-06-07 12:13:38 +00:00
Nathan Sidwell
7a1a5f3c44 syncing version
From-SVN: r272015
2019-06-06 18:02:35 +00:00
Nathan Sidwell
ea30e72655 Tweak svnversion
From-SVN: r272014
2019-06-06 17:06:51 +00:00
Nathan Sidwell
78270d26a6 Fixup revision setting
From-SVN: r272008
2019-06-06 15:14:25 +00:00
Nathan Sidwell
0f7acae37e Make-lang.in (MODULE_REVISION): Read from Changelog.modules.
gcc/cp/
	* Make-lang.in (MODULE_REVISION): Read from Changelog.modules.

From-SVN: r272004
2019-06-06 14:52:57 +00:00
Nathan Sidwell
dd5992f3c5 module.cc (dumper::MAPPER): New flag.
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.

From-SVN: r271973
2019-06-05 18:59:27 +00:00
Nathan Sidwell
ac4c63f30f module.cc (trees_out::tree_type): We can meet ttps here.
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.

From-SVN: r271972
2019-06-05 18:40:51 +00:00
Nathan Sidwell
9408c11acd module.cc (trees_out::core_vals): Template type parms are their own canonical.
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.

From-SVN: r271962
2019-06-05 13:38:27 +00:00
Nathan Sidwell
c4815c2e20 module.cc (global_tree_arys): Add c_global_trees.
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.

From-SVN: r271956
2019-06-05 12:05:41 +00:00
Nathan Sidwell
92314963e5 Merge trunk r271953.
From-SVN: r271955
2019-06-05 11:50:04 +00:00
Nathan Sidwell
e68775bfa3 tree-core.h (enum tree_index): Add TI_MODULE_HWM.
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.

From-SVN: r271953
2019-06-05 10:39:28 +00:00
Nathan Sidwell
5e722ecf5c class.c (maybe_add_class_template_decl): Mark (some) local templates.
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.

From-SVN: r271924
2019-06-04 18:47:16 +00:00
Nathan Sidwell
de7fd0b983 tpl-friend-5_[ab].C: New.
gcc/testsuite/
	* g++.dg/modules/tpl-friend-5_[ab].C: New.

From-SVN: r271923
2019-06-04 17:23:19 +00:00
Nathan Sidwell
3541a28521 name-lookup.c (lookup_type_scope_1): Look in imported slots too.
gcc/cp/
	* name-lookup.c (lookup_type_scope_1): Look in imported slots too.
	gcc/testsuite/
	* g++.dg/modules/class-8_[ab].C: New.

From-SVN: r271922
2019-06-04 17:01:28 +00:00
Nathan Sidwell
7e87e9f49e name-lookup.c (lookup_type_scope_1): Reimplement, handle local and namespace scopes separately.
gcc/cp/
	* name-lookup.c (lookup_type_scope_1): Reimplement, handle local
	and namespace scopes separately.

From-SVN: r271911
2019-06-04 15:16:54 +00:00
Nathan Sidwell
0cf0ada9f9 module.cc (friend_from_decl_list): New.
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.

From-SVN: r271882
2019-06-03 19:29:36 +00:00
Nathan Sidwell
bf24ad34b5 Template friends of templates.
gcc/testsuite/
	* g++.dg/modules/tpl-tpl-friend-1_[ab].C: New.

From-SVN: r271880
2019-06-03 18:41:06 +00:00
Nathan Sidwell
ed6c098d21 Non-template friends of templates.
gcc/testsuite/
	* g++.dg/modules/tpl-friend-4_[ab].C: New.

From-SVN: r271879
2019-06-03 18:36:27 +00:00
Nathan Sidwell
0704afc24b 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.

From-SVN: r271878
2019-06-03 18:29:16 +00:00
Nathan Sidwell
1692b6f689 Merge trunk r271874.
From-SVN: r271875
2019-06-03 17:08:03 +00:00
Nathan Sidwell
9d1f0afc4d 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.

From-SVN: r271874
2019-06-03 15:36:51 +00:00
Nathan Sidwell
7a8dc3649b 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.

From-SVN: r271809
2019-05-31 11:00:59 +00:00
Nathan Sidwell
85476fad7e decl.c (duplicate_decls): Remove duplicate assert.
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.

From-SVN: r271745
2019-05-29 16:27:33 +00:00
Nathan Sidwell
7e9e2b43f5 module.cc (maybe_add_bmi_prefix): Replace FORCE with LEN_P.
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.

From-SVN: r271742
2019-05-29 14:55:34 +00:00
Nathan Sidwell
6d6f1822d1 decl.c (duplicate_decls): Assert a template newdecl has no specializations.
* decl.c (duplicate_decls): Assert a template newdecl has no
	specializations.

From-SVN: r271714
2019-05-28 17:05:22 +00:00
Nathan Sidwell
2164265365 Revert inadvertent commits.
gcc/cp/
	* pt.c (push_template_decl_real): Here.
	* decl.c (duplicate_decls): Here.

From-SVN: r271711
2019-05-28 15:06:49 +00:00
Nathan Sidwell
4684777be2 Merge trunk r271702.
From-SVN: r271709
2019-05-28 14:19:17 +00:00
Nathan Sidwell
762c582bea module.cc (loc_spans): Make spans a vec.
gcc/cp/
	* module.cc (loc_spans): Make spans a vec.
	(module_state::{read,write}_locations): Use vec.

From-SVN: r271581
2019-05-23 20:51:38 +00:00
Nathan Sidwell
7258717682 module.cc (trees_in): Replace auto_vec with vec.
gcc/cp/
	* module.cc (trees_in): Replace auto_vec with vec.

From-SVN: r271579
2019-05-23 20:43:28 +00:00
Nathan Sidwell
0fac6831b9 Template template parms, and a bunch of other stuff
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.

From-SVN: r271578
2019-05-23 20:37:41 +00:00
Nathan Sidwell
045fa6bebe module.cc (dumper::impl::nested_name): Cope with TTPs.
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.

From-SVN: r271551
2019-05-23 11:16:16 +00:00
Nathan Sidwell
aa6ee0cd0f module.cc (depset::hash::hash): Create worklist.
gcc/cp/
	* module.cc (depset::hash::hash): Create worklist.
	(depset::tarjan::tarjan): Create stack.
	(depset::depset): Create deps.

From-SVN: r271519
2019-05-22 19:03:44 +00:00
Nathan Sidwell
e7ddc4f7d8 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.

From-SVN: r271518
2019-05-22 18:58:17 +00:00
Nathan Sidwell
3a42b90dcc module.cc (trees_out::mark_declaration): Add do_defn parm, mark definition if set.
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.

From-SVN: r271481
2019-05-21 18:56:49 +00:00
Nathan Sidwell
176bc67c7a Merge trunk r271478.
From-SVN: r271480
2019-05-21 18:31:03 +00:00
Nathan Sidwell
ee60276eab Merge trunk r271467.
From-SVN: r271478
2019-05-21 17:37:03 +00:00
Nathan Sidwell
e8cd1617dd Merge trunk r271420.
From-SVN: r271426
2019-05-20 16:44:51 +00:00
Nathan Sidwell
b92822cfc9 Merge trunk r271338.
From-SVN: r271347
2019-05-17 19:29:40 +00:00
Nathan Sidwell
f0f1d00906 module.cc (trees_out::mark_class_member): Add do_defn parm.
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.

From-SVN: r271337
2019-05-17 17:55:39 +00:00
Nathan Sidwell
d53b438cf1 module.cc (trees_out::mark_node): Drop OUTERMOST parm.
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.

From-SVN: r271333
2019-05-17 17:16:27 +00:00
Nathan Sidwell
8235c316a9 module.cc (trees_{in,out}::tpl_parms): Rename to ...
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.

From-SVN: r271332
2019-05-17 16:56:29 +00:00
Nathan Sidwell
24abd06faa module.cc (dumper::operator ()): Add null check.
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.

From-SVN: r271288
2019-05-16 13:08:07 +00:00
Nathan Sidwell
87947cc4f8 module.cc (depset::DB_HIDDEN_BIT): New, add accessors.
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.

From-SVN: r271214
2019-05-15 15:03:06 +00:00
Nathan Sidwell
3c595fb47d module.cc (trees_in::tree_value): New, broken out of ...
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.

From-SVN: r271188
2019-05-14 19:27:22 +00:00
Nathan Sidwell
68528ea4b3 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.

From-SVN: r271187
2019-05-14 18:53:22 +00:00
Nathan Sidwell
77f9e67e98 decl.c (duplicate_decls): Don't check moduleness on friend decl.
gcc/cp/
	* decl.c (duplicate_decls): Don't check moduleness on friend decl.
	* pt.c (tsubst_friend_function): Set module ownership.

From-SVN: r271072
2019-05-10 18:56:39 +00:00
Nathan Sidwell
28c2c14231 module.cc (trees_{in,out}::{read,write}_function_def): Serialize FRIEND_CONTEXT.
gcc/cp/
	* module.cc (trees_{in,out}::{read,write}_function_def): Serialize
	FRIEND_CONTEXT.
	(trees_{in,out}::{read,write}_class_def): Reattach befriending classes.

From-SVN: r271071
2019-05-10 18:35:38 +00:00
Nathan Sidwell
a33b0b13dd decl.c (duplicate_decls): Check and adjust anticipated builtin decls.
gcc/cp/
	* decl.c (duplicate_decls): Check and adjust anticipated builtin
	decls.
	* friend.c (do_friend): Set module ownership.
	* module.cc (tree_{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.

From-SVN: r271068
2019-05-10 17:53:14 +00:00
Nathan Sidwell
932bd31ce9 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.

From-SVN: r271067
2019-05-10 15:14:00 +00:00
Nathan Sidwell
c0440f6bd3 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.

From-SVN: r271041
2019-05-09 19:41:38 +00:00
Nathan Sidwell
4dc260a470 Atomically mark template's DECL_TEMPLATE_RESULT, IMPLICIT_TYPEDEF's type
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.

From-SVN: r271040
2019-05-09 18:28:47 +00:00
Nathan Sidwell
e7166810f7 pr39425.C: Adjust errors.
gcc/testsuite/
	* g++.dg/template/pr39425.C: Adjust errors.
	* g++.old-deja/g++.pt/spec20.C: Adjust errors.

From-SVN: r270980
2019-05-07 19:46:02 +00:00
Nathan Sidwell
9388a87902 Merge trunk r270943.
From-SVN: r270979
2019-05-07 18:57:23 +00:00
Nathan Sidwell
207936eba2 mkdeps.h: Rename struct mrules to struct mkdeps.
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.

From-SVN: r270923
2019-05-06 21:14:34 +00:00
Nathan Sidwell
88ed7e7d78 module.cc (enum tree_tag): Delete tt_builtin.
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.

From-SVN: r270922
2019-05-06 19:53:45 +00:00
Nathan Sidwell
33ececd4be cp-tree.h (global_purview_p): New.
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.

From-SVN: r270920
2019-05-06 17:30:27 +00:00
Nathan Sidwell
6c95795c31 cp-tree.h (spec_entry): Moved from pt.c.
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.

From-SVN: r270821
2019-05-02 19:26:41 +00:00
Nathan Sidwell
5bf72297fd module.cc (depset): Add DB_PARTIAL_BIT, is_partial_specialization, set_implicit_specialization.
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.

From-SVN: r270782
2019-05-01 23:18:06 +00:00
Nathan Sidwell
4aeef1729c pt.c (get_specializations): Adjust type template checking.
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.

From-SVN: r270781
2019-05-01 21:49:25 +00:00
Nathan Sidwell
a231906c89 module.cc (set_module_owner): Deal with specializations.
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.

From-SVN: r270772
2019-05-01 15:48:41 +00:00
Nathan Sidwell
57abf5c7c1 parser.c (cp_parser_explicit_instantiation): Correctl unwind state.
gcc/cp/
	* parser.c (cp_parser_explicit_instantiation): Correctl unwind state.
	* decl.c (grokfndecl): Set module ownership after specializationness
	is known.

From-SVN: r270771
2019-05-01 15:30:39 +00:00
Nathan Sidwell
0bfa294358 macro.c (_cpp_new_macro): memset before initing.
libcpp/
	* macro.c (_cpp_new_macro): memset before initing.

From-SVN: r270769
2019-05-01 14:28:26 +00:00
Nathan Sidwell
9a1b29d399 module.cc (module_state:write_bindings): Iterate over sccs array, not hash table.
gcc/cp/
	* module.cc (module_state:write_bindings): Iterate over sccs
	array, not hash table.
	(module_state::write): Adjust.

From-SVN: r270768
2019-05-01 14:21:38 +00:00
Nathan Sidwell
eb8ee5ceb9 macro.c (_cpp_new_macro): Initialize imported field.
libcpp/
	* macro.c (_cpp_new_macro): Initialize imported field.

From-SVN: r270767
2019-05-01 14:12:06 +00:00
Nathan Sidwell
a730352e3b Merge trunk r270765.
From-SVN: r270766
2019-05-01 13:51:24 +00:00
Nathan Sidwell
a47a770f80 cp-tree.h (module_normal_import_p): Declare.
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

From-SVN: r270708
2019-04-30 17:50:41 +00:00
Nathan Sidwell
32283aa5fe tpl-spec-2_[abc].C: New.
gcc/testsuite/
	* tpl-spec-2_[abc].C: New.

From-SVN: r270707
2019-04-30 17:32:48 +00:00
Nathan Sidwell
38a941c78f 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.

From-SVN: r270706
2019-04-30 16:55:36 +00:00
Nathan Sidwell
0e1957bb53 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.

From-SVN: r270663
2019-04-29 21:34:45 +00:00
Nathan Sidwell
1ce0952a84 Merge trunk r270644. (GCC 10)
From-SVN: r270645
2019-04-29 11:22:46 +00:00
Nathan Sidwell
9af40c5e05 modules.cc (depset::hash::add_depednency): More STRIP_TEMPLATE.
gcc/cp/
	* modules.cc (depset::hash::add_depednency): More STRIP_TEMPLATE.

From-SVN: r270644
2019-04-29 10:54:25 +00:00
Nathan Sidwell
aec57f39de cp-tree.h (get_specializations_for_module): Declare.
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.

From-SVN: r270584
2019-04-25 18:49:48 +00:00
Nathan Sidwell
a78d967de4 cp-tree.h (DECL_TEMPLATE_LAZY_SPECIALIZATIONS_P): New.
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.

From-SVN: r270555
2019-04-24 20:19:59 +00:00
Nathan Sidwell
be11483861 Merge trunk r270543.
From-SVN: r270546
2019-04-24 14:21:18 +00:00
Nathan Sidwell
e88b0e49e0 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.

From-SVN: r270543
2019-04-24 13:01:39 +00:00
Nathan Sidwell
a11a2ae3b6 cp-tree.h (module_name): New overload.
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.

From-SVN: r270519
2019-04-23 20:47:19 +00:00
Nathan Sidwell
427b477a37 module.cc (trees_{in,out}::tree_mergeable): Stream more for specializations.
gcc/cp/
	* module.cc (trees_{in,out}::tree_mergeable): Stream more for
	specializations.

From-SVN: r270517
2019-04-23 18:52:58 +00:00
Nathan Sidwell
e6468b82d7 module.cc (trees_{in,out}::core_vals): Don't stream template instantiations.
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.

From-SVN: r270516
2019-04-23 18:38:24 +00:00
Nathan Sidwell
994b4e1e31 Make-lang.in: Wedge revision number into REVISISON_s.
gcc/cp/
	* Make-lang.in: Wedge revision number into REVISISON_s.

From-SVN: r270508
2019-04-23 12:47:14 +00:00
Nathan Sidwell
58c90f922f Function instantiation merging
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.

From-SVN: r270507
2019-04-23 12:46:32 +00:00
Nathan Sidwell
dad12fbb88 Make-lang.in (MODULE_REVISION): New.
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.

From-SVN: r270325
2019-04-12 18:03:15 +00:00
Nathan Sidwell
00c28486ba module.cc (dumper::impl::nested_name): Remove namespace owner fiddling.
gcc/cp/
	* module.cc (dumper::impl::nested_name): Remove namespace owner
	fiddling.
	* name-lookup.c (make_namespace): Don't set owner.  Adjust callers.

From-SVN: r270312
2019-04-12 11:51:21 +00:00
Nathan Sidwell
4edbc4c435 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.

From-SVN: r270311
2019-04-12 11:41:44 +00:00
Nathan Sidwell
b02ca4a23e mangle.c (decl_is_template_id): Rename to ...
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.

From-SVN: r270290
2019-04-11 18:57:23 +00:00
Nathan Sidwell
66036b6f7f module.cc (module_for_{ordinary,macro}_loc): New.
gcc/cp/
	* module.cc (module_for_{ordinary,macro}_loc): New.
	(module_state::{read,write}_location): Deal with imported locations.

From-SVN: r270285
2019-04-11 14:30:04 +00:00
Nathan Sidwell
ea6d7d26ff module.cc (depset::entity_kind_name): Tweak.
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.

From-SVN: r270283
2019-04-11 14:01:35 +00:00
Nathan Sidwell
f0e3f45c31 module.cc (loc_kind): New.
gcc/cp/
	* module.cc (loc_kind): New.
	(module_state::{read,write}_location): Use tagging, compress macro
	& adhoc better.

From-SVN: r270282
2019-04-11 13:58:55 +00:00
Nathan Sidwell
88730fedea module.cc (loc_spans): Main span is all but reserved.
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.

From-SVN: r270281
2019-04-11 13:40:35 +00:00
Nathan Sidwell
f12d92379c module.cc (module_preprocess): Module partitions always produce a BMI.
gcc/cp/
	* module.cc (module_preprocess): Module partitions always produce
	a BMI.
	gcc/testsuite/
	* g++.dg/modules/dep-2.C: New.

From-SVN: r270261
2019-04-10 15:36:08 +00:00
Nathan Sidwell
63428ba45d module.cc (module_state::write_cluster): Remove unnecessary check & FIXME.
gcc/cp/
	* module.cc (module_state::write_cluster): Remove unnecessary
	check & FIXME.

From-SVN: r270256
2019-04-10 14:37:30 +00:00
Nathan Sidwell
3d5e4fc8bb module.cc (trees_out::depending_p): Delete.
gcc/cp/
	* module.cc (trees_out::depending_p): Delete.
	(trees_out::tree_decl): Refactor asserts.
	(module_state::write_cluster): Refactor initial scan.

From-SVN: r270255
2019-04-10 14:28:33 +00:00
Nathan Sidwell
d4ae24566c mkdeps.c (deps_add_module): Swap primary & module args.
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.

From-SVN: r270252
2019-04-10 12:26:27 +00:00
Nathan Sidwell
0afed47af4 module.cc (slurping): Move {ordinary,macro}_locs to ..
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.

From-SVN: r270242
2019-04-09 20:21:31 +00:00
Nathan Sidwell
d4b26417f0 module.cc (get_module): Add parent option, use it.
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.

From-SVN: r270235
2019-04-09 18:41:48 +00:00
Nathan Sidwell
6b4d396c13 module.cc (depset::is_imported_entity): New.
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.

From-SVN: r270232
2019-04-09 16:01:44 +00:00
Nathan Sidwell
9e12215923 mkdeps (munge): Quote ':'.
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.

From-SVN: r270230
2019-04-09 13:39:03 +00:00
Nathan Sidwell
3c5ef6cce2 mkdeps (mkrules::~mkrules): Use free appropriately.
libcpp/
	* mkdeps (mkrules::~mkrules): Use free appropriately.

	gcc/
	* doc/invoke.texi (C++ Module Mapper): Fix markup.

From-SVN: r270228
2019-04-09 12:46:17 +00:00
Nathan Sidwell
8822a1013c cp-tree.h (language_function): Remove x_auto_return_pattern.
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.

From-SVN: r270227
2019-04-09 12:39:26 +00:00
Nathan Sidwell
da2a1ce97f module.cc (unnamed_ary, [...]): New.
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.

From-SVN: r270213
2019-04-08 17:56:40 +00:00
Nathan Sidwell
71218c59dc cp-tree.h (struc mc_slot): Move to ...
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.

From-SVN: r270211
2019-04-08 14:58:50 +00:00
Nathan Sidwell
b6e2fa23ce module.cc (dumper): Add CLUSTER.
gcc/cp/
	* module.cc (dumper): Add CLUSTER.
	(module_state::write): Dump cluster information.

From-SVN: r270130
2019-04-03 16:07:44 +00:00
Nathan Sidwell
72c633d8c6 module.cc (node_template_info): Move earlier, protect from partial read in.
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.

From-SVN: r270128
2019-04-03 15:36:58 +00:00
Nathan Sidwell
f7c4c77ba3 module.cc (module_state::write_cluster): Refactor.
gcc/cp/
	* module.cc (module_state::write_cluster): Refactor.

From-SVN: r270127
2019-04-03 13:18:15 +00:00
Nathan Sidwell
138f3409bc module.cc (cluster_tag): Remove ct_defn.
gcc/cp/
	* module.cc (cluster_tag): Remove ct_defn.
	(module_state::{read,write}_cluster): Definitions marked via flag.

From-SVN: r270125
2019-04-03 13:05:12 +00:00
Nathan Sidwell
8628504b5e module.cc (depset::hash): Rename mergeables flag to mergeable_dep.
gcc/cp/
	* module.cc (depset::hash): Rename mergeables flag to mergeable_dep.

From-SVN: r270124
2019-04-03 12:53:50 +00:00
Nathan Sidwell
dc15f2553b 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.

From-SVN: r270107
2019-04-02 20:09:57 +00:00
Nathan Sidwell
90feea63ef 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.

From-SVN: r270106
2019-04-02 19:48:41 +00:00
Nathan Sidwell
166185fcdd module.cc (depset): Add EK_UNNAMED.
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.

From-SVN: r270103
2019-04-02 17:25:46 +00:00
Ben Boeckel
9abdb7a846 mkdeps.c (mrules): Rename is_legacy to is_header_init, adjust uses.
libcpp/
	* mkdeps.c (mrules): Rename is_legacy to is_header_init, adjust uses.
	(deps_add_module): Correctly duplicate and use strings.

Co-Authored-By: Nathan Sidwell <nathan@acm.org>

From-SVN: r270094
2019-04-02 15:38:14 +00:00
Nathan Sidwell
edc4dc7b3f module.cc (depset::add_dependency): Drop maybe_using arg.
gcc/cp/
	* module.cc (depset::add_dependency): Drop maybe_using arg.
	Adjust callers.
	(dumper::operator()): Overloads have a name.
	(has_definition): Adjust.

From-SVN: r270093
2019-04-02 15:24:49 +00:00
Nathan Sidwell
20886e31e6 module.cc (depset): Move flags into discriminator field.
gcc/cp/
	* module.cc (depset): Move flags into discriminator field.  Adjust uses.

From-SVN: r270067
2019-04-01 20:04:45 +00:00
Nathan Sidwell
f18eb8e774 module.cc (depset): Replace key wih entity/discriminator tuple.
gcc/cp/
	* module.cc (depset): Replace key wih entity/discriminator tuple.
	Add entity_kind and disc_bits enums.  Adjust hashing &
	construction routines.

From-SVN: r270063
2019-04-01 17:07:15 +00:00
Nathan Sidwell
02d8687e67 module.cc (depset): Entity keying uses unique entity.
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.

From-SVN: r270058
2019-04-01 14:58:53 +00:00
Nathan Sidwell
e3e00e67c6 cp-tree.h (saved_scope): Remove this_module field.
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.

From-SVN: r270018
2019-03-29 14:54:34 +00:00
Nathan Sidwell
9ff2773a29 pt.c: Comment some structures.
gcc/cp/
	* pt.c: Comment some structures.

From-SVN: r269993
2019-03-28 14:25:25 +00:00
Nathan Sidwell
ed2d6b09d7 invoke.texi (C++ Modules): Update.
gcc/
	* doc/invoke.texi (C++ Modules): Update.

From-SVN: r269989
2019-03-28 13:35:49 +00:00
Nathan Sidwell
5c3ed9d552 Merge trunk r269975.
From-SVN: r269988
2019-03-28 11:55:29 +00:00
Nathan Sidwell
4ae801b63e invoke.texi (C++ Modules): Update.
gcc/
	* doc/invoke.texi (C++ Modules): Update.

From-SVN: r269974
2019-03-27 19:13:18 +00:00
Nathan Sidwell
e206a204a8 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.

From-SVN: r269973
2019-03-27 18:53:10 +00:00
Nathan Sidwell
6681bbff73 Expunge header name quoting in mapper
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.

From-SVN: r269968
2019-03-27 16:49:16 +00:00
Nathan Sidwell
efd079f064 Header unit names lack quotes
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.

From-SVN: r269966
2019-03-27 16:13:49 +00:00
Nathan Sidwell
fa7e225f49 Header unit names are strings
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.

From-SVN: r269963
2019-03-27 13:13:28 +00:00
Nathan Sidwell
7ad3e652a2 c-opts.c (c_common_post_options): Invert sense of cpp_read_main_file arg.
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.

From-SVN: r269955
2019-03-26 20:17:19 +00:00
Nathan Sidwell
39a54be1fb Header units disambiguated by originating header path
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.

From-SVN: r269950
2019-03-26 15:47:19 +00:00
Nathan Sidwell
85d18f6c28 files.c (struct _cpp_file): Make bools bitfields, add header_unit flag.
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.

From-SVN: r269844
2019-03-21 18:29:26 +00:00
Nathan Sidwell
8b85ef4aa1 Merge trunk r269839.
From-SVN: r269840
2019-03-21 15:31:58 +00:00
Nathan Sidwell
98c80272f9 gcc.c (execute): Frob argv[0] to show spawning from driver.
gcc/
	* gcc.c (execute): Frob argv[0] to show spawning from driver.
	(process_command): Don't check input file exists here.

From-SVN: r269839
2019-03-21 15:01:41 +00:00
Nathan Sidwell
dbc1a921e5 gcc.c (execute): Frob argv[0] to show spawning from driver.
gcc/
	* gcc.c (execute): Frob argv[0] to show spawning from driver.
	(process_command): Don't check input file exists here.

From-SVN: r269833
2019-03-21 11:45:27 +00:00
Nathan Sidwell
bc43c9c9e3 module.cc (trees_out::mark_class_def): Skip friends in decl_list.
gcc/cp/
	* module.cc (trees_out::mark_class_def): Skip friends in decl_list.

From-SVN: r269825
2019-03-20 16:02:04 +00:00
Nathan Sidwell
772de12369 module.cc (module_state::read_namespaces): Module-linkage namespaces are visible in the module itself.
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.

From-SVN: r269824
2019-03-20 15:46:44 +00:00
Nathan Sidwell
edfbd9ff45 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.

From-SVN: r269822
2019-03-20 15:04:35 +00:00
Nathan Sidwell
609acdc0d7 Enum members of templates.
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.

From-SVN: r269821
2019-03-20 14:00:35 +00:00
Nathan Sidwell
1f07d4ec78 module.cc (depset::hash::find_dependencies): It might be a fixed tree.
gcc/cp/
	* module.cc (depset::hash::find_dependencies): It might be a fixed
	tree.
	gcc/testsuite/
	* g++.dg/modules/stdns_[ab].C: New.

From-SVN: r269810
2019-03-19 18:42:30 +00:00
Nathan Sidwell
e9a6dab33f 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.

From-SVN: r269806
2019-03-19 17:33:14 +00:00
Nathan Sidwell
df0f4e522b using-3.C: New.
gcc/testsuite/
	* g++.dg/modules/using-3.C: New.

From-SVN: r269805
2019-03-19 17:10:13 +00:00
Nathan Sidwell
30b9e7ddab 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.

From-SVN: r269803
2019-03-19 17:02:04 +00:00
Nathan Sidwell
96df6ff310 name-lookup.c (do_nonmember_using_decl): Cleanups.
gcc/cp/
	* name-lookup.c (do_nonmember_using_decl): Cleanups.
	(finish_nonmember_using_decl): Likewise.

From-SVN: r269798
2019-03-19 14:27:36 +00:00
Nathan Sidwell
9b842b4490 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.

From-SVN: r269774
2019-03-18 18:25:55 +00:00
Nathan Sidwell
2c59f7dc96 module.cc (module_state::{read,write}_locations): Cope with trailing empty expansions.
gcc/cp/
	* module.cc (module_state::{read,write}_locations): Cope with
	trailing empty expansions.

From-SVN: r269773
2019-03-18 18:23:13 +00:00
Nathan Sidwell
6fbf6d226a module.cc (module_state::{read,write}_locations): Macro maps can have embedded zeroes.
gcc/cp/
	* module.cc (module_state::{read,write}_locations): Macro maps can
	have embedded zeroes.

From-SVN: r269768
2019-03-18 17:01:21 +00:00
Nathan Sidwell
7ec6aa514c name-lookup.c (do_nonmember_using_decl): Add install & fn_scope args.
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.

From-SVN: r269767
2019-03-18 16:21:16 +00:00
Nathan Sidwell
d07b25ea84 name-lookup.c (do_nonmember_using_decl): Have lookup passed in.
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.

From-SVN: r269714
2019-03-15 18:52:47 +00:00
Nathan Sidwell
596478979d name-lookup.h (finish_nonmember_using_decl): Drop LOOKUP parm.
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.

From-SVN: r269711
2019-03-15 16:44:47 +00:00
Nathan Sidwell
8df20b9d9a 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.

From-SVN: r269705
2019-03-15 12:55:17 +00:00
Nathan Sidwell
4c4d38c246 backport: name-lookup.c (finish_nonmember_using_decl): New, merged from ...
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.

From-SVN: r269693
2019-03-14 20:14:58 +00:00
Nathan Sidwell
14ee6cf798 Drop cp_binding_level::usings
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.

From-SVN: r269689
2019-03-14 17:25:02 +00:00
Nathan Sidwell
185689391c name-lookup.c (validate_nonmember_using_decl): Drop DR 36 case.
gcc/cp/
	* name-lookup.c (validate_nonmember_using_decl): Drop DR 36 case.
	gcc/testsuite/
	* g++.dg/lookup/using53.C: Permit DR 36 case.

From-SVN: r269686
2019-03-14 16:03:04 +00:00
Nathan Sidwell
52f258b8e7 Merge trunk r269682.
From-SVN: r269685
2019-03-14 14:33:46 +00:00
Nathan Sidwell
7665fe6f9f Start doing something with using decls
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.

From-SVN: r269657
2019-03-13 19:14:31 +00:00
Nathan Sidwell
2b95910389 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.

From-SVN: r269654
2019-03-13 17:19:28 +00:00
Nathan Sidwell
878edb8187 typedef struct {} foo; part 2
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.

From-SVN: r269653
2019-03-13 16:54:17 +00:00
Nathan Sidwell
410e860f50 module.cc (trees_out::tree_decl): Refactor named decl streaming.
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.

From-SVN: r269649
2019-03-13 13:52:29 +00:00
Nathan Sidwell
25146f8bcc module.cc (trees_out::tree_node): Refactor.
gcc/cp/
	* module.cc (trees_out::tree_node): Refactor.
	(module_state::write_cluster): Prefer non-anonymous name.

From-SVN: r269626
2019-03-12 18:56:30 +00:00
Nathan Sidwell
b8e6e1a709 typedef struct {} foo;
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.

From-SVN: r269621
2019-03-12 17:06:12 +00:00
Nathan Sidwell
b7d3611843 decl.c (fndecl_declared_return_type): Remove BMI FIXME.
gcc/cp/
	* decl.c (fndecl_declared_return_type): Remove BMI FIXME.
	* module.cc (trees_{in,out}::lang_decl_vals): Stream
	saved_auto_return_type.

From-SVN: r269617
2019-03-12 15:30:31 +00:00
Nathan Sidwell
cf446185f3 tree.c (ovl_splice): Delete.
gcc/cp/
	* tree.c (ovl_splice): Delete.

From-SVN: r269615
2019-03-12 15:09:49 +00:00
Nathan Sidwell
4e6a491d2d Kill DECL_SAVED_FUNCTION_DATA part 1
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.

From-SVN: r269614
2019-03-12 15:09:15 +00:00
Nathan Sidwell
39dbb42cd5 module.cc (writable_cmp): New.
gcc/cp/
	* module.cc (writable_cmp): New.
	(depset::hash::add_writables): Sort the hash before inserting.

From-SVN: r269610
2019-03-12 12:59:07 +00:00
Nathan Sidwell
959c6fba9e decl.c (fndecl_declared_return_type): Extend BMI hack.
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 #.

From-SVN: r269609
2019-03-12 12:41:36 +00:00
Nathan Sidwell
161c01072e avoid spurious error
From-SVN: r269593
2019-03-11 17:55:32 +00:00
Nathan Sidwell
f8ca116fbe 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.

From-SVN: r269590
2019-03-11 17:16:00 +00:00
Nathan Sidwell
5b6706bd46 tree.h (make_anon_name): Drop optional parm.
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.

From-SVN: r269589
2019-03-11 16:45:39 +00:00
Nathan Sidwell
b9078b1565 name-lookup.h (extract_module_binding): Return binding, not name.
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.

From-SVN: r269498
2019-03-08 15:55:50 +00:00
Nathan Sidwell
27020aa92c cp-tree.h (ovl_sort): Delete.
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.

From-SVN: r269496
2019-03-08 15:21:19 +00:00
Nathan Sidwell
736df565ab 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.

From-SVN: r269490
2019-03-08 12:32:27 +00:00
Nathan Sidwell
9e3484d867 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.

From-SVN: r269466
2019-03-07 18:15:30 +00:00
Nathan Sidwell
eeef66eefd Refactor all the things!
gcc/cp/
	* module.cc: Tighten up access.

From-SVN: r269439
2019-03-06 19:43:57 +00:00
Nathan Sidwell
226bf5f2ed module.cc (module_state): Reorder member fn definitions.
Refactor.
	gcc/cp/
	* module.cc (module_state): Reorder member fn definitions.

From-SVN: r269438
2019-03-06 19:35:33 +00:00
Nathan Sidwell
ded9e97b0d module.cc (module_state::is_matching_decl): Moved to ...
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.

From-SVN: r269437
2019-03-06 19:29:07 +00:00
Nathan Sidwell
3c25ac9d61 module.cc (module_state::read_definition): Moved to ...
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.

From-SVN: r269436
2019-03-06 19:11:47 +00:00
Nathan Sidwell
cedae516af module.cc (module_state::{write,mark}_definition): Move to ...
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.

From-SVN: r269435
2019-03-06 18:51:33 +00:00
Nathan Sidwell
30e6874ffc module.cc (module_state::{add_writables,find_dependencies}): Move to ...
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.

From-SVN: r269432
2019-03-06 18:22:27 +00:00
Nathan Sidwell
b732f7efd0 GMF pruning, Part 2
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.

From-SVN: r269431
2019-03-06 18:01:24 +00:00
Nathan Sidwell
093af63697 module.cc (trees_out::trees_out): Add depset::hash parm.
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.

From-SVN: r269430
2019-03-06 17:07:05 +00:00
Nathan Sidwell
d34d579b9d Linkage promotion ban GMF pruning, Part 1
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.

From-SVN: r269425
2019-03-06 14:35:13 +00:00
Nathan Sidwell
712c899f52 module.cc (depset::hash::add_binding): Ignore internal-linkage entities.
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.

From-SVN: r269400
2019-03-05 19:48:47 +00:00
Nathan Sidwell
32596325f8 module.cc (depset::add_dependency): Drop kind arg, return void.
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.

From-SVN: r269397
2019-03-05 17:48:00 +00:00
Nathan Sidwell
c6b84af365 module.cc (depset): Add refs_internal field.
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.

From-SVN: r269395
2019-03-05 16:44:10 +00:00
Nathan Sidwell
1574453f6a Merge trunk r269375.
From-SVN: r269377
2019-03-04 22:59:11 +00:00
Nathan Sidwell
e17a95cad8 Merge trunk r269375.
From-SVN: r269376
2019-03-04 22:58:49 +00:00
Nathan Sidwell
7e89ef6593 GMF content locations
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.

From-SVN: r269375
2019-03-04 20:53:15 +00:00
Nathan Sidwell
58df4b11dd 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.

From-SVN: r269373
2019-03-04 20:18:21 +00:00
Nathan Sidwell
d0495cc99f cpplib.h (struct cpp_hashnode): Drop C compatibility macros.
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.

From-SVN: r269370
2019-03-04 17:42:40 +00:00
Nathan Sidwell
20869ca8a1 module.cc (declare_module): Deal with de-GMFing here, get name of implicit header module.
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.

From-SVN: r269369
2019-03-04 17:39:20 +00:00
Nathan Sidwell
a39a7395c1 Merge trunk r269321.
From-SVN: r269323
2019-03-01 17:55:50 +00:00
Nathan Sidwell
49837c4a7d Merge trunk r269078 (metadata update).
From-SVN: r269321
2019-03-01 16:39:06 +00:00
Nathan Sidwell
69dd4456b3 Apply trunk r269078.
gcc/cp/
	* module.cc (module_state::{read,write}_function_def): Adjust.

From-SVN: r269320
2019-03-01 16:34:49 +00:00
Nathan Sidwell
bcaf28b18d cp-tree.h (struct constexpr_fundef): Moved from constexpr.c.
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.

From-SVN: r269316
2019-03-01 14:22:02 +00:00
Nathan Sidwell
ec8bd3709c Merge trunk r269077.
From-SVN: r269310
2019-03-01 13:46:08 +00:00
Nathan Sidwell
fd7f592ed4 parser.c (cp_lexer_set_source_position_from_token): Revert.
gcc/cp/
	* parser.c (cp_lexer_set_source_position_from_token): Revert.

From-SVN: r269306
2019-03-01 12:51:04 +00:00
Nathan Sidwell
4ebef46785 module & import-semi lexing rules
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.

From-SVN: r269284
2019-02-28 19:31:23 +00:00
Nathan Sidwell
348c719f8e Remove eof_token
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.

From-SVN: r269279
2019-02-28 13:33:34 +00:00
Nathan Sidwell
314f0f37eb __import in extern "C"
__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.

From-SVN: r269261
2019-02-27 18:26:43 +00:00
Nathan Sidwell
a966ed3bf4 cp-tree.h (import_module): Return bool.
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.

From-SVN: r269257
2019-02-27 15:29:33 +00:00
Nathan Sidwell
dd2acf6a68 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.

From-SVN: r269231
2019-02-26 21:02:08 +00:00
Nathan Sidwell
80b046381a 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.

From-SVN: r269228
2019-02-26 20:03:43 +00:00
Nathan Sidwell
a2e74eee5a 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.

From-SVN: r269225
2019-02-26 18:49:34 +00:00
Nathan Sidwell
921577aedf 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.

From-SVN: r269223
2019-02-26 18:08:34 +00:00
Nathan Sidwell
680f8b6f1b 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.

From-SVN: r269215
2019-02-26 15:30:38 +00:00
Nathan Sidwell
6dcef32638 invoke.texi: Update modules documentation.
gcc/
	* doc/invoke.texi: Update modules documentation.

From-SVN: r269147
2019-02-23 02:35:12 +00:00
Nathan Sidwell
99679bed65 mkdeps.h (deps_write): Add phony arg.
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.

From-SVN: r269146
2019-02-23 02:04:15 +00:00
Nathan Sidwell
ef2904ca0c cp-tree.h (init_module_processing): Add arg.
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.

From-SVN: r269128
2019-02-22 18:29:12 +00:00
Nathan Sidwell
4dcc1c0fae mkdeps.c (deps_add_module): Allow empty bmi name.
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.

From-SVN: r269126
2019-02-22 17:54:10 +00:00
Nathan Sidwell
6b2ca38c1b c.opt: Rename fmodule-legacy to fmodule-header
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.

From-SVN: r269092
2019-02-22 01:24:43 +00:00
Nathan Sidwell
fedfa06cb8 langhooks.h (struct lang_hooks): Adjust preprocess_token API.
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.

From-SVN: r269076
2019-02-21 20:53:53 +00:00
Nathan Sidwell
46d51789a5 REVISION: Add [].
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.

From-SVN: r269051
2019-02-20 20:21:25 +00:00
Nathan Sidwell
92577f23eb Merge trunk r268782.
From-SVN: r268794
2019-02-12 13:46:25 +00:00
Nathan Sidwell
2a6bf78629 Make dependencies
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.

From-SVN: r268782
2019-02-11 20:38:49 +00:00
Nathan Sidwell
f95467a7ec mkdeps.c (struct deps): Make more C++y.
libcpp/
	* mkdeps.c (struct deps): Make more C++y.  Update all uses.

From-SVN: r268703
2019-02-08 15:40:42 +00:00
Nathan Sidwell
350b3f1aea module.cc (module_mapper::module_mapper): Fix local socket creation.
gcc/cp/
	* module.cc (module_mapper::module_mapper): Fix local socket creation.

From-SVN: r268641
2019-02-07 14:52:32 +00:00
Nathan Sidwell
0c8ec7dd9d c++-mapper.cc (module2bmi): Do not map dir separators.
gcc/cp/
	* c++-mapper.cc (module2bmi): Do not map dir separators.
	gcc/testsuite/
	* g+.dg/modules/modules.exp (decode_mod_spec): Likewise.

From-SVN: r268616
2019-02-07 13:24:38 +00:00
Nathan Sidwell
ac3f39bbcc module.cc (create_dirs): New.
gcc/cp/
	* module.cc (create_dirs): New.
	(maybe_add_bmi_prefix): Add FORCE parm, adjust.
	(finish_module_parse): Try and create intermediate dirs.

From-SVN: r268615
2019-02-07 13:03:11 +00:00
Nathan Sidwell
70cd6925c0 prefix mismatch to dump file
From-SVN: r268577
2019-02-06 12:46:19 +00:00
Nathan Sidwell
e7642770e3 name-lookup.c (finish_namespace_using_decl): Add assert + FIXME.
gcc/cp/
	* name-lookup.c (finish_namespace_using_decl): Add assert + FIXME.

From-SVN: r268549
2019-02-05 17:10:52 +00:00
Nathan Sidwell
dde51bb05f cxx-mapper.cc (client::action): Add mapper agent.
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.

From-SVN: r268548
2019-02-05 16:59:53 +00:00
Nathan Sidwell
b0bb86d3bf module.cc (module_state::read_locations): Make wanring development-only.
gcc/cp/
	* module.cc (module_state::read_locations): Make wanring
	development-only.

From-SVN: r268538
2019-02-05 14:48:25 +00:00
Nathan Sidwell
3663899cf1 module.cc (get_module_slot): New broken out of ...
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.	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.

From-SVN: r268535
2019-02-05 14:29:43 +00:00
Nathan Sidwell
83d7176282 Merge trunk r268456.
From-SVN: r268457
2019-02-01 21:01:45 +00:00
Nathan Sidwell
5eb5a3f722 indent
From-SVN: r268456
2019-02-01 20:58:03 +00:00
Nathan Sidwell
ee75767dbc decl.c (duplicate_decls): Accomodate anticipated fns.
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.

From-SVN: r268454
2019-02-01 17:59:28 +00:00
Nathan Sidwell
4cc495496b module.cc (try_increase_lazy): Fix setrlimit call.
gcc/cp/
	* module.cc (try_increase_lazy): Fix setrlimit call.
	(init_module_processing): Fix getrlimit call.

From-SVN: r268423
2019-01-31 14:43:42 +00:00
Nathan Sidwell
48df08ee81 module.cc (init_module_processing): Dump even more config.
gcc/cp/
	* module.cc (init_module_processing): Dump even more config.
	Tweak lazy limit.

From-SVN: r268421
2019-01-31 13:42:39 +00:00
Nathan Sidwell
b201fbc904 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.

From-SVN: r268420
2019-01-31 12:57:47 +00:00
Nathan Sidwell
10323633c0 ADL part 2
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.

From-SVN: r268401
2019-01-30 20:38:28 +00:00
Nathan Sidwell
7b3dfc8207 ADL part 1
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.

From-SVN: r268399
2019-01-30 17:42:03 +00:00
Nathan Sidwell
40bcebefe7 name-lookup.c (name_lookup::adl_namespace_only): Delete.
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.

From-SVN: r268395
2019-01-30 15:29:54 +00:00
Iain Sandoe
3ccfaa402e module.cc: Reorder includes.
gcc/cp/
	* module.cc: Reorder includes.
	* cxx-mapper.cc: Likewise.

From-SVN: r268387
2019-01-30 12:25:22 +00:00
Iain Sandoe
b02aa56a34 fn-inline-1_{bc}.C: Adjust weak scan.
gcc/testsuite/
	* g++.dg/modules/fn-inline-1_{bc}.C: Adjust weak scan.

From-SVN: r268386
2019-01-30 12:03:32 +00:00
Nathan Sidwell
fe7848b86c invoke.texi (C++ Modules): Add submenu.
gcc/
	* doc/invoke.texi (C++ Modules): Add submenu.

From-SVN: r268385
2019-01-30 12:00:41 +00:00
Nathan Sidwell
41dfd13ea0 module.cc (init_module_processing): Dump more config.
gcc/cp/
	* module.cc (init_module_processing): Dump more config.

From-SVN: r268364
2019-01-29 13:32:11 +00:00
Nathan Sidwell
e7b08c11b9 module.cc (MAPPED_READING, [...]): 0 or 1
gcc/cp/
	* module.cc (MAPPED_READING, MAPPED_WRITING): 0 or 1
	(init_module_processing): Dump mapping behaviour.

From-SVN: r268363
2019-01-29 12:59:03 +00:00
Nathan Sidwell
ad4d4f6512 module.cc (module_mapper::make): Drop options arg, look at CXX_MODULE_MAPPER.
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.

From-SVN: r268340
2019-01-28 18:47:37 +00:00
Nathan Sidwell
cad26d5035 module.cc (trees_{in,out}::core_vals): Lambda location.
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.

From-SVN: r268339
2019-01-28 18:12:27 +00:00
Nathan Sidwell
23fd81f8f2 Merge trunk r268337.
From-SVN: r268338
2019-01-28 16:50:45 +00:00
Nathan Sidwell
639a13481e More fixme reformatting
From-SVN: r268227
2019-01-24 00:30:43 +00:00
Nathan Sidwell
303f8733c1 Reformat FIXMEs
From-SVN: r268226
2019-01-24 00:17:02 +00:00
Nathan Sidwell
cc8c93090b module.cc (trees_{in,out}::core_vals): Stream expression locii.
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): Stream expression locii.

From-SVN: r268222
2019-01-23 23:17:45 +00:00
Nathan Sidwell
c5c761a75d 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 tcc_statement.

From-SVN: r268221
2019-01-23 23:05:31 +00:00
Nathan Sidwell
cf0b8150a7 cp-objcp-common.c (cp_common_init_ts): MARK_TS_EXP for scope_ref & noexcept_expr.
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.

From-SVN: r268220
2019-01-23 22:54:43 +00:00
Nathan Sidwell
19549423da module.cc (trees_{in,out}::core_vals): Adjust expression streaming.
gcc/cp/
	* module.cc (trees_{in,out}::core_vals): Adjust expression streaming.

From-SVN: r268218
2019-01-23 22:42:22 +00:00
Nathan Sidwell
a71b42a283 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.

From-SVN: r268217
2019-01-23 22:19:32 +00:00
Nathan Sidwell
4385532f1f module.cc (trees_{in,out}::core_vals): Clean up enumeral type handling.
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.

From-SVN: r268206
2019-01-23 20:53:13 +00:00
Nathan Sidwell
019fec68e1 module.cc (tree_tag): Add tt_enum_int.
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.

From-SVN: r268196
2019-01-23 19:40:33 +00:00
Nathan Sidwell
f63dc19d3f module.cc (trees_in::finish_type): Don't speciual case TYPE_PACKs.
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.

From-SVN: r268194
2019-01-23 18:59:19 +00:00
Nathan Sidwell
e6b2e9ff5f cp-objcp-common.c (cp_common_init_ts): Set TYPE_PACK_EXPANSION and TYPE_ARGUMENT_PACK correctly.
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.

From-SVN: r268171
2019-01-22 23:58:11 +00:00
Nathan Sidwell
a0f65afcfa module.cc (tree_tag): Add tt_ptrmem_type.
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.

From-SVN: r268169
2019-01-22 22:42:42 +00:00
Nathan Sidwell
a19f26e866 module.cc (trees_{in,out}::core_vals): Stream tcc_reference, baselink, static_assert, trait_expr.
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.

From-SVN: r268078
2019-01-18 14:23:44 +00:00
Nathan Sidwell
284bf9e027 module.cc (trees_{in,out}::core_vals): Stream tcc_reference, baselink, static_assert, trait_expr.
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.

From-SVN: r268074
2019-01-18 12:39:20 +00:00
Nathan Sidwell
3da1800b6e module.cc (module_state::{read,write}_locations): Fix macro expansion compression.
gcc/cp/
	* module.cc (module_state::{read,write}_locations): Fix macro
	expansion compression.

From-SVN: r268073
2019-01-18 12:37:19 +00:00
Nathan Sidwell
abd3e0919e 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.

From-SVN: r268040
2019-01-17 16:58:47 +00:00
Nathan Sidwell
f0f13f827c module.cc (trees_{in,out}::fn_parms): New.
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.

From-SVN: r268039
2019-01-17 16:49:09 +00:00
Nathan Sidwell
7bbc69c239 module.cc (trees_{in,out}::tree_mergeable): Allow non-implicit typedefs.
gcc/cp/
	* module.cc (trees_{in,out}::tree_mergeable): Allow non-implicit
	typedefs.
	gcc/testsuite/
	* g++.dg/modules/leg-merge-9_[abc].[HC]: New.

From-SVN: r267990
2019-01-16 22:56:04 +00:00
Nathan Sidwell
d035d32af8 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.

From-SVN: r267988
2019-01-16 22:35:30 +00:00
Nathan Sidwell
d1ee5e53da module.cc (dumper::GM): Rename to MERGE.
gcc/cp/
	* module.cc (dumper::GM): Rename to MERGE.  Update uses.

From-SVN: r267982
2019-01-16 18:16:48 +00:00
Nathan Sidwell
fb95135d25 cp-tree.h (module_name): Replace FULL parm with primary pointer.
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.

From-SVN: r267981
2019-01-16 18:14:26 +00:00
Nathan Sidwell
eacd1d2c32 cp-tree.h (module_name): Add FULL parm.
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.

From-SVN: r267977
2019-01-16 15:58:35 +00:00
Nathan Sidwell
82cdbd898a Merge trunk r267946.
From-SVN: r267947
2019-01-15 20:17:22 +00:00
Nathan Sidwell
59877906f3 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.

From-SVN: r267945
2019-01-15 18:58:21 +00:00
Nathan Sidwell
9cfc4be642 tree.h (cache_integer_cst): Add defaulted small parm.
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.

From-SVN: r267919
2019-01-14 15:03:33 +00:00
Nathan Sidwell
9ab9abbc96 module.cc (trees_out::start): Catch POLY_INT_CST, adjust VECTOR_CST.
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.

From-SVN: r267918
2019-01-14 13:37:39 +00:00
Nathan Sidwell
aed4f51ab8 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.

From-SVN: r267857
2019-01-11 20:36:21 +00:00
Nathan Sidwell
7e39994e30 Reals & Complex
Reals & Complex
	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.

From-SVN: r267856
2019-01-11 20:21:37 +00:00
Nathan Sidwell
5283d2b1f1 module.cc (get_module): Fix partition parsing.
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.

From-SVN: r267853
2019-01-11 19:16:01 +00:00
Nathan Sidwell
c6b110ddac cp-tree.h (module_not_legacy_p): New.
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.

From-SVN: r267813
2019-01-10 15:48:47 +00:00
Nathan Sidwell
d38cefbdd5 module.cc (finish_module_parse): Better location info on errors.
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.

From-SVN: r267807
2019-01-10 12:35:36 +00:00
Nathan Sidwell
9bd3deff8b module.cc (module_state::read_partitions): New.
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.

From-SVN: r267782
2019-01-09 20:38:06 +00:00
Nathan Sidwell
8dec5c04fa module.cc (module_state::read_partitions): New.
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.

From-SVN: r267780
2019-01-09 19:56:45 +00:00
Nathan Sidwell
e64aacbe18 module.cc (module_state::from_partition_p): New field.
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.

From-SVN: r267777
2019-01-09 17:37:14 +00:00
Nathan Sidwell
baab95c119 missed checkin
From-SVN: r267737
2019-01-08 20:28:08 +00:00
Nathan Sidwell
0f0ebbad70 cxx-mapper.cc (module2bmi): Update mapping
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.

From-SVN: r267736
2019-01-08 20:16:30 +00:00
Nathan Sidwell
52ce475262 module.cc (module_state::{interface_p,is_interface}): New.
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.

From-SVN: r267733
2019-01-08 18:55:41 +00:00
Nathan Sidwell
2686e405b2 module.cc (bytes_out::set_crc): Only set if crc_ptr != 0.
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.

From-SVN: r267730
2019-01-08 15:42:25 +00:00
Nathan Sidwell
e29a29fdbb module.cc (module_state::direct_import): Add LAZY parm, use it rather than legacy_p.
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.

From-SVN: r267729
2019-01-08 14:55:04 +00:00
Nathan Sidwell
e5d618176e cp-tree.h (module_has_bmi_p): New.
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.

From-SVN: r267727
2019-01-08 14:27:32 +00:00
Nathan Sidwell
daa60bdd32 cp-tree.h (module_export_depth, [...]): Replace with ...
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.

From-SVN: r267724
2019-01-08 12:52:00 +00:00
Nathan Sidwell
e649824165 cxx-mapper.cc (module2bmi): Don't map ':'.
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 ':'

From-SVN: r267659
2019-01-07 20:22:30 +00:00
Nathan Sidwell
1500f4c1e6 name-lookup.h (match_global_decl): Rename to ...
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.

From-SVN: r267561
2019-01-03 18:21:44 +00:00
Nathan Sidwell
2b57d22567 name-lookup.c (module_binding_slot): Break apart to ...
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.

From-SVN: r267554
2019-01-03 15:03:03 +00:00
Nathan Sidwell
4e0fcebd25 name-lookup.c (module_binding_slot): Use FIXED parm.
gcc/cp/
	* name-lookup.c (module_binding_slot): Use FIXED parm.

From-SVN: r267530
2019-01-02 20:36:14 +00:00
Nathan Sidwell
9347e70a4e more sensible parm ordering
From-SVN: r267529
2019-01-02 20:27:45 +00:00
Nathan Sidwell
dc5338d75a name-lookup.c (module_binding_slot): Add FIXED parm, adjust all callers.
gcc/cp/
	* name-lookup.c (module_binding_slot): Add FIXED parm, adjust all
	callers.

From-SVN: r267527
2019-01-02 19:49:48 +00:00
Nathan Sidwell
80486f45a7 module.cc: Rename gme -> mme, because partitions.
gcc/cp/
	* module.cc: Rename gme -> mme, because partitions.

From-SVN: r267525
2019-01-02 19:10:15 +00:00
Nathan Sidwell
5d89f69864 cp-tree.h (DECL_MODULE_PURVIEW_P): Delete.
gcc/cp/
	* cp-tree.h (DECL_MODULE_PURVIEW_P): Delete.
	(MAYBE_DECL_MODULE_PURVIEW_P): Delete.
	* mangle.c (maybe_write_module): Adjust.

From-SVN: r267524
2019-01-02 18:53:29 +00:00
Nathan Sidwell
fecf9a164c legacy-8_[abcde].[CH]: New.
gcc/testsuite/
	* g++.dg/modules/legacy-8_[abcde].[CH]: New.

From-SVN: r267523
2019-01-02 18:45:57 +00:00
Nathan Sidwell
943e880d1b re PR c++/88664 (False positive -Waddress-of-packed-member)
gcc/cp/
	* cxx-mapper.cc (server): Workaround PR c++/88664.

From-SVN: r267516
2019-01-02 15:23:56 +00:00
Nathan Sidwell
e7acf9612a Merge trunk r267509.
* module.cc, cxx-mapper.cc: Update copyright years.

From-SVN: r267514
2019-01-02 14:59:37 +00:00
Nathan Sidwell
f58c351b4e 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.

From-SVN: r267311
2018-12-20 19:14:37 +00:00
Nathan Sidwell
3bd761bef1 module.cc (module_state::check_read): Fix bogus note.
gcc/cp/
	* module.cc (module_state::check_read): Fix bogus note.
	gcc/testsuite/
	* g++.dg/modules/indirect-1_c.C: Add bogus note test.

From-SVN: r267310
2018-12-20 19:11:02 +00:00
Nathan Sidwell
03e91ef2d8 module.cc (module_state::remap): New member var.
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.

From-SVN: r267300
2018-12-20 14:47:38 +00:00
Nathan Sidwell
2f1ac0bb75 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.

From-SVN: r267269
2018-12-19 14:44:15 +00:00
Nathan Sidwell
84df79b99a cp-tree.h (get_module): Add partition arg.
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.

From-SVN: r267243
2018-12-18 20:44:04 +00:00
Nathan Sidwell
d641a8cccc cp-tree.h (get_module): Default NULL parent.
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.

From-SVN: r267242
2018-12-18 19:53:50 +00:00
Nathan Sidwell
b7194ae846 module.cc (trees_out::tree_decl): Remove some remaining non-atomic template hacks.
gcc/cp/
	* module.cc (trees_out::tree_decl): Remove some remaining
	non-atomic template hacks.

From-SVN: r267241
2018-12-18 18:53:33 +00:00
Nathan Sidwell
53a49b6a17 module.cc (module_state::write): Sort dependency table.
gcc/cp/
	* module.cc (module_state::write): Sort dependency table.

From-SVN: r267240
2018-12-18 18:47:20 +00:00
Nathan Sidwell
00c04f31d8 module.cc (module_cpp_undef): Don't zap undef hook if we don't own it.
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.

From-SVN: r267233
2018-12-18 13:57:03 +00:00
Nathan Sidwell
fbb306e144 Merge trunk r267229.
From-SVN: r267231
2018-12-18 13:32:58 +00:00
Nathan Sidwell
60e871169d module.cc (trees_out::{write,mark}_template_def): Delete.
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.

From-SVN: r267218
2018-12-17 21:36:27 +00:00
Nathan Sidwell
de8fb4cf1b 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.

From-SVN: r267217
2018-12-17 21:32:02 +00:00
Nathan Sidwell
6f890569fa 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.

From-SVN: r267211
2018-12-17 21:24:47 +00:00
Nathan Sidwell
21f892e82f Intermediate step to atomic TEMPLATE_DECL + DECL_TEMPLATE_RESULT.
Breaks leg-merge-7_c.C,
	gcc/cp/
	* module.c (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.

From-SVN: r267205
2018-12-17 16:55:00 +00:00
Nathan Sidwell
7aab222631 module.cc (trees_out::node_template_info): New, broken out of ...
gcc/cp/
	* module.cc (trees_out::node_template_info): New, broken out of
	...
	(trees_out::tree_decl): ... here.  Use it.

From-SVN: r267140
2018-12-14 19:18:58 +00:00
Nathan Sidwell
82faacf1c7 module.cc (trees_out::tree_decl): Adjust TEMPLATE_INFO access.
gcc/cp/
	* module.cc (trees_out::tree_decl): Adjust TEMPLATE_INFO access.

From-SVN: r267139
2018-12-14 18:46:13 +00:00
Nathan Sidwell
6b4442fd28 Function template deduping
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.

From-SVN: r267110
2018-12-13 20:55:24 +00:00
Nathan Sidwell
0a873b629b module.cc (slurping::remap): Heap allocate.
gcc/cp/
	* module.cc (slurping::remap): Heap allocate.
	(gt_pch_nx): Delete hacks.

From-SVN: r266814
2018-12-05 02:23:35 +00:00
Nathan Sidwell
2a812ddd13 module.cc (tree_tag): Replace tt_named_type with tt_{primary,secondary}_type.
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.

From-SVN: r266802
2018-12-04 22:38:19 +00:00
Nathan Sidwell
2bd52d9f6c Class deduping
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.

From-SVN: r266800
2018-12-04 22:12:46 +00:00
Nathan Sidwell
ba05fa80f5 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.

From-SVN: r266797
2018-12-04 20:54:35 +00:00
Nathan Sidwell
f46b60b2f4 module.c (module_state::{read,write,mark}_enum): Take DECL.
gcc/cp/
	* module.c (module_state::{read,write,mark}_enum): Take DECL.
	(module_state::{read,write,mark}_definition): Adjust.

From-SVN: r266791
2018-12-04 18:04:56 +00:00
Nathan Sidwell
8db16f3cd3 class.c (layout_class_type): Base type has same module as owner.
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.

From-SVN: r266790
2018-12-04 18:00:42 +00:00
Nathan Sidwell
62fb31f235 class.c (build_base_field_1): Refactor.
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.

From-SVN: r266789
2018-12-04 17:39:16 +00:00
Nathan Sidwell
4c65fd4b39 module.cc (trees_in): Rename bad_decls to skip_defns.
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.

From-SVN: r266778
2018-12-04 13:23:25 +00:00
Nathan Sidwell
7b01562cbb Merge trunk r266680.
From-SVN: r266681
2018-11-30 20:02:13 +00:00
Nathan Sidwell
49034139b0 module.cc: Fix enums with trailing commas.
gcc/cp/
	* module.cc: Fix enums with trailing commas.
	* name-lookup.c (match_global_decl): Avoid unused arg warning.

From-SVN: r266679
2018-11-30 18:50:23 +00:00
Nathan Sidwell
05a3404e10 module.cc (module_state::write_binfos): Binfo was not visited.
gcc/cp/
	* module.cc (module_state::write_binfos): Binfo was not visited.

From-SVN: r266676
2018-11-30 16:41:53 +00:00
Nathan Sidwell
734f6391ec module.cc (module_state::write_binfos): Always write number of vbases.
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.

From-SVN: r266675
2018-11-30 16:34:14 +00:00
Nathan Sidwell
8ba50616ca class.c (fixup_type_variants): Copy TYPE_SIZE & TYPE_SIZE_UNIT.
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.

From-SVN: r266670
2018-11-30 15:48:46 +00:00
Nathan Sidwell
120a966312 module.cc (trees_in): Add bad_decls and post_decls.
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.

From-SVN: r266669
2018-11-30 15:43:11 +00:00
Nathan Sidwell
d148c88a0c 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.

From-SVN: r266643
2018-11-29 21:20:09 +00:00
Nathan Sidwell
3718e2186e modules.cc (module_state::check_read): Adjust, print inform of outer location.
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.

From-SVN: r266642
2018-11-29 21:03:21 +00:00
Nathan Sidwell
f1c25f2869 Fixing GME classes
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.

From-SVN: r266639
2018-11-29 20:14:43 +00:00
Nathan Sidwell
33b8e3aff6 Some ODR checking of GMEs
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.

From-SVN: r266629
2018-11-29 17:03:34 +00:00
Nathan Sidwell
d2f39fedb2 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.

From-SVN: r266626
2018-11-29 15:34:26 +00:00
Nathan Sidwell
ca9a8bb144 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.

From-SVN: r266623
2018-11-29 15:10:47 +00:00
Nathan Sidwell
f190073977 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.

From-SVN: r266589
2018-11-28 21:20:30 +00:00
Nathan Sidwell
6b36d7be1e modules.cc (trees_{in,out}::tree_node_bools): Break out tree_node_specific.
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.

From-SVN: r266580
2018-11-28 20:02:59 +00:00
Nathan Sidwell
8f87c1ad93 modules.cc (trees_{in,out}::tree_node_raw): Bifurcate to ...
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.

From-SVN: r266479
2018-11-26 20:29:32 +00:00
Nathan Sidwell
9f45de6c9f modules.cc (trees_out::tree_ref): Rename to ...
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.

From-SVN: r266476
2018-11-26 19:30:00 +00:00
Nathan Sidwell
f04c95414a modules.cc (trees_out::walk_kind): New enum.
gcc/cp/
	* modules.cc (trees_out::walk_kind): New enum.
	(trees_out::tree_ref): Return it.
	(trees_out::tree_{ctx,decl,node}): Use it.

From-SVN: r266475
2018-11-26 18:33:35 +00:00
Nathan Sidwell
1fe194e0a3 modules.cc (trees_out::ref_force_{lwm.hwm}): New ref values.
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.

From-SVN: r266474
2018-11-26 18:24:48 +00:00
Nathan Sidwell
c66affd04e modules.cc (dumper): Rename dump flags.
gcc/cp/
	* modules.cc (dumper): Rename dump flags.  Adjust throughout.

From-SVN: r266324
2018-11-20 17:26:58 +00:00
Nathan Sidwell
07e801d065 module.cc (handle_module_option): Handle OPT_fmodule_legacy.
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.

From-SVN: r266283
2018-11-19 20:22:46 +00:00
Nathan Sidwell
854342c3c4 Merge trunk r266271.
From-SVN: r266273
2018-11-19 13:56:35 +00:00
Nathan Sidwell
83c7b55fbf Merge trunk r266161.
From-SVN: r266191
2018-11-15 17:25:22 +00:00
Nathan Sidwell
3b595d9a8e invoke.texi: Rename cookie->ident, people read too much into 'cookie'.
gcc/
	* doc/invoke.texi: Rename cookie->ident, people read too much into
	'cookie'.

From-SVN: r266189
2018-11-15 16:04:38 +00:00
Nathan Sidwell
b0d59a42dd parser.c (cp_parser_translation_unit): Refactor.
gcc/cp/
	* parser.c (cp_parser_translation_unit): Refactor.

From-SVN: r265907
2018-11-08 03:41:47 +00:00
Nathan Sidwell
4c645696da 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.

From-SVN: r265905
2018-11-08 03:25:47 +00:00
Nathan Sidwell
9d94d3fa2e cp-tree.h (module_gmf_p): 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.

From-SVN: r265883
2018-11-07 18:38:03 +00:00
Nathan Sidwell
1680f7c06d 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.

From-SVN: r265779
2018-11-04 21:14:23 +00:00
Nathan Sidwell
11e6f415b0 modules.c (module_state::read): Interface can be lazy too.
gcc/cp/
	* modules.c (module_state::read): Interface can be lazy too.

From-SVN: r265754
2018-11-02 17:49:06 +00:00
Nathan Sidwell
4abd8c3652 name-lookup.c (STAT_EXPORTS): Rename to ...
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.

From-SVN: r265753
2018-11-02 17:47:14 +00:00
Nathan Sidwell
90b6ad4130 cp-tree.h (module_may_redeclare): Declare.
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.

From-SVN: r265752
2018-11-02 17:43:11 +00:00
Nathan Sidwell
2bbc1ae543 module.cc (module_state::read_cluster): Preserve export_tail.
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.

From-SVN: r265750
2018-11-02 15:40:31 +00:00
Nathan Sidwell
f229dde02a decl.c (duplicate_decls): Refactor export check.
gcc/cp/
	* decl.c (duplicate_decls): Refactor export check.
	gcc/testsuite/
	* g++.dg/modules/export-1.C: New.

From-SVN: r265746
2018-11-02 13:35:27 +00:00
Nathan Sidwell
c02dc66f04 decl.c (duplicate_decls): Refactor checks.
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.

From-SVN: r265731
2018-11-01 20:10:24 +00:00
Nathan Sidwell
8c22ebb3ad Merge trunk r265714.
Move to autoconf 2.69.

From-SVN: r265718
2018-11-01 11:58:49 +00:00
Nathan Sidwell
af3ec4196f module.cc (module_state::read): Don't read macros for preprocessed innput.
gcc/cp/
	* module.cc (module_state::read): Don't read macros for
	preprocessed innput.
	(module_state::set_import): Adjust legacy test.

From-SVN: r265712
2018-11-01 11:09:23 +00:00
Nathan Sidwell
d07061a786 module.cc (module_state::check_not_purview): Check name.
gcc/cp/
	* module.cc (module_state::check_not_purview): Check name.
	(mangle_mondule, module_name): Likewise.
	(declare_module): Set parent, not alias.

From-SVN: r265699
2018-10-31 19:48:35 +00:00
Nathan Sidwell
422b84c0a2 Merge trunk r265692.
From-SVN: r265694
2018-10-31 15:33:14 +00:00
Nathan Sidwell
b00a830393 Merge trunk r265679.
From-SVN: r265682
2018-10-31 13:11:56 +00:00
Nathan Sidwell
b75e475c45 cp-tree.h (OVL_EXPORT_P): Delete.
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.

From-SVN: r265671
2018-10-31 11:25:37 +00:00
Nathan Sidwell
08e39eb508 Module interface gets own mod number
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.

From-SVN: r265643
2018-10-30 20:13:18 +00:00
Nathan Sidwell
e205126cdb cp-tree.h (OVL_HAS_USING_P): Rename to ...
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.

From-SVN: r265642
2018-10-30 20:07:05 +00:00
Nathan Sidwell
567d0d4ff7 Less ordered overloads
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.

From-SVN: r265630
2018-10-30 15:31:19 +00:00
Nathan Sidwell
8933fb8cb1 cp-tree.h (ovl_insert): Drop export_tail parm.
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.

From-SVN: r265597
2018-10-29 17:42:12 +00:00
Nathan Sidwell
b460c8b6fd module.cc (module_state::read_imports): Do in one pass.
gcc/cp/
	* module.cc (module_state::read_imports): Do in one pass.

From-SVN: r265592
2018-10-29 14:32:37 +00:00
Nathan Sidwell
2537f5fb21 module.cc (module_state::direct_import): Drop DEFERRABLE arg.
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.

From-SVN: r265589
2018-10-29 14:11:44 +00:00
Nathan Sidwell
06f6e8f887 Merge trunk r265554.
From-SVN: r265560
2018-10-27 20:57:40 +00:00
Nathan Sidwell
02fb5f5a85 Anon namespaces
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.

From-SVN: r265540
2018-10-26 18:30:33 +00:00
Nathan Sidwell
1dc5389ef2 Statics on bindings
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.

From-SVN: r265536
2018-10-26 17:31:35 +00:00
Nathan Sidwell
318f05b158 cp-tree.h (module_purview): Declare.
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.

From-SVN: r265530
2018-10-26 13:39:55 +00:00
Nathan Sidwell
1299d08f39 p1103 no implicit namespace export
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.

From-SVN: r265529
2018-10-26 13:11:05 +00:00
Nathan Sidwell
2f324aac6f Rationalize bool ok == true
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.

From-SVN: r265504
2018-10-25 19:26:13 +00:00
Nathan Sidwell
9a038d3360 module.cc (module_state::write_readme): Tidy.
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.

From-SVN: r265501
2018-10-25 18:18:10 +00:00
Nathan Sidwell
329f657f95 module.cc (enum tree_tag): Add tt_namespace.
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.

From-SVN: r265468
2018-10-24 18:39:55 +00:00
Nathan Sidwell
7fa0e4d562 module.cc (trees_out::{tree_{decl,type}): Drop owner arg.
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.

From-SVN: r265466
2018-10-24 17:47:15 +00:00
Nathan Sidwell
8c0bb64033 module.cc: Add dumper::TREES to tree streamers.
gcc/cp/
	* module.cc: Add dumper::TREES to tree streamers.
	gcc/testsuite/
	* g++.dg/modules/: Add -uid to several lang dumps.

From-SVN: r265435
2018-10-23 18:06:00 +00:00
Nathan Sidwell
3887c46291 module.cc (slurping::remap_module): New.
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.

From-SVN: r265434
2018-10-23 17:38:41 +00:00
Nathan Sidwell
c4f79b6c9d cp-tree.h (module_exporting_level): Delete.
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.

From-SVN: r265394
2018-10-22 14:47:37 +00:00
Nathan Sidwell
96e69857f3 lex.c (module_preprocess_token): Fix padding/comment states.
gcc/cp/
	* lex.c (module_preprocess_token): Fix padding/comment states.
	* parser.c (cp_parser_tokenize): Reduce is_decl states.

From-SVN: r265384
2018-10-22 11:28:30 +00:00
Nathan Sidwell
d5a15b13d4 Merge trunk r265362.
From-SVN: r265367
2018-10-22 01:29:35 +00:00
Nathan Sidwell
c4b93105ff 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.

From-SVN: r265361
2018-10-21 22:31:41 +00:00
Nathan Sidwell
1e66ee3211 lex.c (module_preprocessing_token): Pay attention to braces.
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.

From-SVN: r265355
2018-10-21 19:28:53 +00:00
Nathan Sidwell
70b01eb74e parser.c (cp_parser_diagnose_invalid_type_name): Use C_RID_CODE more.
gcc/cp/
	* parser.c (cp_parser_diagnose_invalid_type_name): Use C_RID_CODE more.

From-SVN: r265354
2018-10-21 18:44:09 +00:00
Nathan Sidwell
2ab2a56c2f parser.c (cp_parser_tokenize): Don't stop after nested module/import decl.
gcc/cp/
	* parser.c (cp_parser_tokenize): Don't stop after nested
	module/import decl.

From-SVN: r265328
2018-10-19 21:44:10 +00:00
Nathan Sidwell
c8e29f81fc parser.c (cp_parser_translation_unit): Adjust GMF deferred imports.
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.

From-SVN: r265299
2018-10-18 23:45:49 +00:00
Nathan Sidwell
1bf6d8496b parser.c (cp_parser_translation_unit): Process deferred imports here ...
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.

From-SVN: r265298
2018-10-18 23:31:26 +00:00
Nathan Sidwell
566f8f346e 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.

From-SVN: r265292
2018-10-18 21:53:27 +00:00
Nathan Sidwell
b51b6105ab modules.exp (mode-list): Delete.
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.

From-SVN: r265289
2018-10-18 20:42:16 +00:00
Nathan Sidwell
b61c4b968b 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.

From-SVN: r265282
2018-10-18 19:07:52 +00:00
Nathan Sidwell
861f12b441 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.

From-SVN: r265280
2018-10-18 18:32:18 +00:00
Nathan Sidwell
7f9f78a1af Preamble on module
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.

From-SVN: r265279
2018-10-18 18:14:07 +00:00
Nathan Sidwell
678cf35731 No export { import x; }
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.

From-SVN: r265278
2018-10-18 18:01:57 +00:00
Nathan Sidwell
e72fdf3200 No atom preamble in non-module
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.

From-SVN: r265269
2018-10-18 15:31:16 +00:00
Nathan Sidwell
c14e05ef47 err-2_[ab].*: Move to ...
gcc/testsuite/
	* g++.dg/modules/err-2_[ab].*: Move to ...
	* g++.dg/modules/cpp-5_[ab].*: ... here.
	* g++.dg/modules/cpp5_c.C: New.

From-SVN: r265258
2018-10-18 04:02:39 +00:00
Nathan Sidwell
d695de064d 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.

From-SVN: r265256
2018-10-18 00:52:35 +00:00
Nathan Sidwell
0cf81d5c41 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.

From-SVN: r265230
2018-10-17 03:38:17 +00:00
Nathan Sidwell
0543a9b26a module.cc (module_purview): New.
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.

From-SVN: r265229
2018-10-17 03:00:53 +00:00
Nathan Sidwell
d11439a99d macloc-1_[abcd].C: No longer atom-specific.
gcc/testsuite/
	* g++.dg/modules/macloc-1_[abcd].C: No longer atom-specific.

From-SVN: r265222
2018-10-17 00:02:33 +00:00
Nathan Sidwell
9cf5bed662 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.

From-SVN: r265221
2018-10-16 23:58:36 +00:00
Nathan Sidwell
40f1895868 dumpfile.c (dump_switch_p_1): Don't let a '-' filename fool the option machinery.
gcc/
	* dumpfile.c (dump_switch_p_1): Don't let a '-' filename fool the
	option machinery.

From-SVN: r265220
2018-10-16 23:34:52 +00:00
Nathan Sidwell
76ad592023 Legacy importing during -E
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.

From-SVN: r265219
2018-10-16 22:49:17 +00:00
Nathan Sidwell
0ba2999325 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.

From-SVN: r265217
2018-10-16 21:23:56 +00:00
Nathan Sidwell
1650e24fb5 Uncommitted tests
From-SVN: r265216
2018-10-16 21:16:57 +00:00
Nathan Sidwell
02b0993280 *.H: Drop unnecessary -fmodules-atom option.
gcc/testsuite/
	* g++.dg/modules/*.H: Drop unnecessary -fmodules-atom option.

From-SVN: r265214
2018-10-16 20:57:43 +00:00
Nathan Sidwell
7a5205cf8b Reimplement preamble peeking
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.

From-SVN: r265213
2018-10-16 20:44:26 +00:00
Nathan Sidwell
3bcda11dec 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.

From-SVN: r265209
2018-10-16 17:24:53 +00:00
Nathan Sidwell
efc2b73d25 Remove preamble peeking
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.

From-SVN: r265208
2018-10-16 17:11:58 +00:00
Nathan Sidwell
8a7846ccad Common tokenizer for atom & ts
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

From-SVN: r265207
2018-10-16 17:10:53 +00:00
Nathan Sidwell
fdc0841a38 Common tokenizer for atom & ts
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

From-SVN: r265206
2018-10-16 16:48:36 +00:00
Nathan Sidwell
8625c76d82 cp-tree.h (process_deferred_imports): Drop location arg.
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

From-SVN: r265201
2018-10-16 15:53:31 +00:00
Nathan Sidwell
58fbbb0659 parser.c (cp_parser_translation_unit): Detect GMF here ...
gcc/cp/
	* parser.c (cp_parser_translation_unit): Detect GMF here ...
	(cp_parser_module_declaration): ... not here.

From-SVN: r265196
2018-10-16 14:35:31 +00:00
Nathan Sidwell
11b06e13df cp-tree.h ({import,declare}_module): Return adjustment.
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.

From-SVN: r265184
2018-10-16 00:32:20 +00:00
Nathan Sidwell
1cce6582a2 lang-specs.h: Fix .s elision with legacy modules.
gcc/cp/
	* lang-specs.h: Fix .s elision with legacy modules.

From-SVN: r265176
2018-10-15 19:37:02 +00:00
Nathan Sidwell
dbdad8e2ea langhooks.h (struct lang_hooks): Adjust preprocess_main_file signature.
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.

From-SVN: r265174
2018-10-15 17:49:49 +00:00
Nathan Sidwell
fffe126027 cp-tree.h (process_deferred_imports): New.
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.

From-SVN: r265173
2018-10-15 17:22:12 +00:00
Nathan Sidwell
9d868e6610 module.cc (module_state::direct_import): New.
gcc/cp/
	* module.cc (module_state::direct_import): New.
	({import,declare}_module): Call it.
	(module_state::preamble_load): Likewise.

From-SVN: r265170
2018-10-15 16:20:31 +00:00
Nathan Sidwell
f5fbc61a5f lex.c (cpp_peek_token_with_location): Fix pragma rewinding.
libcpp/
	* lex.c (cpp_peek_token_with_location): Fix pragma rewinding.
	gcc/cp/
	* parser.c (cp_parser_initial_pragma): Peek at first token.

From-SVN: r265134
2018-10-12 21:18:11 +00:00
Nathan Sidwell
c9ce90a301 Merge trunk r265127.
From-SVN: r265128
2018-10-12 18:51:32 +00:00
Nathan Sidwell
afbedd82db parser.c (cp_parser_{module,import}_declaration): Remove temp hacks.
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.

From-SVN: r265124
2018-10-12 18:04:43 +00:00
Nathan Sidwell
601962c1f5 parser.c (cp_parser_translation_unit): Deal with one level of export block here.
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.

From-SVN: r265123
2018-10-12 17:45:49 +00:00
Nathan Sidwell
755e116b27 parser.c (cp_parser_translation_unit): Detect module and import declarations here.
gcc/cp/
	* parser.c (cp_parser_translation_unit): Detect module and import
	declarations here.

From-SVN: r265114
2018-10-12 16:35:02 +00:00
Nathan Sidwell
c63997ab5b 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.

From-SVN: r265104
2018-10-12 14:45:28 +00:00
Nathan Sidwell
128447fbff Merge trunk r265055.
From-SVN: r265057
2018-10-11 19:04:52 +00:00
Nathan Sidwell
7f81cebb79 Kill proclaiming decls
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.

From-SVN: r265045
2018-10-11 16:52:52 +00:00
Nathan Sidwell
83d23cb763 Macro locations!
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.

From-SVN: r265043
2018-10-11 15:35:01 +00:00
Nathan Sidwell
ebc987cf16 Merge trunk r265037.
From-SVN: r265039
2018-10-11 13:14:06 +00:00
Nathan Sidwell
6e67aae285 module.cc (loc_spans::close): Close the current last map.
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.

From-SVN: r265023
2018-10-10 16:44:06 +00:00
Nathan Sidwell
c76ed612b7 module.cc (pending_imports): New.
gcc/
	* module.cc (pending_imports): New.
	({import,declare}_module): Use it.
	(module_from_cmp): Delete.
	(module_state::preamble_load): Use pending_imports array.

From-SVN: r265022
2018-10-10 15:49:57 +00:00
Nathan Sidwell
af9a599036 invoke.texi (fmodule-legacy): Augment syntax.
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.

From-SVN: r265018
2018-10-10 14:43:01 +00:00
Nathan Sidwell
6da37d1077 module.cc (module_state::controlling_macro): Delete.
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.

From-SVN: r265016
2018-10-10 13:15:58 +00:00
Nathan Sidwell
ebacb5661b module.cc (module_state::{read,write}_defines): Rename to ...
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.

From-SVN: r265015
2018-10-10 12:08:43 +00:00
Nathan Sidwell
e086cf4eb5 Lazy macro table loading
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.

From-SVN: r264998
2018-10-09 23:18:31 +00:00
Nathan Sidwell
0debbe53d0 Controlling macros & alias detection
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.

From-SVN: r264997
2018-10-09 21:16:39 +00:00
Nathan Sidwell
b4935ffb77 module.cc (module_state::deferred_macro): Print macro definition.
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.

From-SVN: r264885
2018-10-05 18:49:09 +00:00
Nathan Sidwell
b071dd56b0 module.cc (module_state): Add controlling_macro, unionize slurp with alias.
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.

From-SVN: r264878
2018-10-05 16:53:11 +00:00
Nathan Sidwell
ad55fdc542 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.

From-SVN: r264873
2018-10-05 15:12:26 +00:00
Nathan Sidwell
5bb46ac836 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.

From-SVN: r264870
2018-10-05 13:58:37 +00:00
Nathan Sidwell
9aae012981 Dump command line macros, better command line locs
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.

From-SVN: r264854
2018-10-04 19:45:50 +00:00
Nathan Sidwell
6959ba5e58 Merge trunk r264769.
Slip in module.c -> module.cc rename

From-SVN: r264770
2018-10-01 19:50:18 +00:00
Nathan Sidwell
9c9e83ee33 Merge trunk r264765.
From-SVN: r264768
2018-10-01 17:16:57 +00:00
Nathan Sidwell
d50914c164 lang-specs.h: Error out on -fcoroutines.
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.

From-SVN: r264765
2018-10-01 16:10:52 +00:00
Nathan Sidwell
33c74848f2 Avoid UB type punning union shenanigans
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.

From-SVN: r264763
2018-10-01 15:46:19 +00:00
Nathan Sidwell
d83f99cbdd AdHoc locations
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.

From-SVN: r264743
2018-10-01 11:25:02 +00:00
Nathan Sidwell
88cf0cde4a module.c (module_state::deferred_macro): Fix undef hiding logic.
gcc/cp/
	* module.c (module_state::deferred_macro): Fix undef hiding logic.
	gcc/testsuite/
	* g++.dg/modules/macro-4*: New.

From-SVN: r264700
2018-09-28 20:51:53 +00:00
Nathan Sidwell
18dc9790ac No speculative undefs.
gcc/cp/
	* module.c (maybe_add_macro): Simplify.
	(module_state::undef_macro): Only add undef for a deferred macro.

From-SVN: r264672
2018-09-27 15:38:50 +00:00
Nathan Sidwell
6286335648 fix typo.
From-SVN: r264671
2018-09-27 14:55:18 +00:00
Nathan Sidwell
df62d620b3 Add -fforce-module-macros
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.

From-SVN: r264670
2018-09-27 14:54:38 +00:00
Nathan Sidwell
a58c76e653 Add deferred cpp_hashnode field.
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.

From-SVN: r264662
2018-09-27 04:12:31 +00:00
Nathan Sidwell
b509bc44ae 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.

From-SVN: r264654
2018-09-26 20:57:31 +00:00
Nathan Sidwell
39f5ffe4a0 modules (module_state): Add legacies bitmap.
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.

From-SVN: r264517
2018-09-23 17:08:47 +00:00
Nathan Sidwell
dc091b0758 invoke.texi (C++ Modules): Update mapper protocol.
gcc/
	* doc/invoke.texi (C++ Modules): Update mapper protocol.
	* cxx-mapper.c (client): Remove bewait, forget members.
	(client::action): Remove BYIMPORT, BEWAIT & RESET.

From-SVN: r264348
2018-09-16 14:09:00 +00:00
Nathan Sidwell
25e5695385 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.

From-SVN: r264347
2018-09-16 14:01:37 +00:00
Nathan Sidwell
2faf245da1 langhooks.h (preprocess_main_file): Drop index arg.
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.

From-SVN: r264321
2018-09-14 15:57:30 +00:00
Nathan Sidwell
11d8450c81 A grand renaming
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.

From-SVN: r264314
2018-09-14 13:44:41 +00:00
Nathan Sidwell
1103fd4652 Expunge the spewer
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.

From-SVN: r264311
2018-09-14 12:49:17 +00:00
Nathan Sidwell
ef660b1f8c Expunge old location scheme
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.

From-SVN: r264310
2018-09-14 12:31:37 +00:00
Nathan Sidwell
e669b19d44 New locations working
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.

From-SVN: r264309
2018-09-14 12:22:38 +00:00
Nathan Sidwell
d09c3ceb89 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.

From-SVN: r264289
2018-09-13 20:17:37 +00:00
Nathan Sidwell
6cfa701876 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.

From-SVN: r264284
2018-09-13 18:22:49 +00:00
Nathan Sidwell
712e258ffd 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.

From-SVN: r264272
2018-09-13 13:56:09 +00:00
Nathan Sidwell
41720e0d4a Refactor location spans
Refactor location spans
	gcc/cp/
	* module.c (class loc_spans): New.  Absorb ...
	({open,close,ordinary,macro}_interval): ... these.  Update all uses.

From-SVN: r264269
2018-09-13 12:03:07 +00:00
Nathan Sidwell
c2d95cd0f7 Adding location spans
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.

From-SVN: r264252
2018-09-12 19:25:39 +00:00
Nathan Sidwell
ffc9daa086 parser.c (cp_parser_get_module_preamble_tokens): Don't read past EOF.
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.

From-SVN: r264242
2018-09-12 14:36:17 +00:00
Nathan Sidwell
9d9de35620 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.

From-SVN: r264240
2018-09-12 13:54:15 +00:00
Nathan Sidwell
39e61e5dbb diagnostic.c (diagnostic_report_current_module): Do not line break after module name.
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.

From-SVN: r264190
2018-09-10 07:20:13 +00:00
Nathan Sidwell
e68c900521 c.opt (fmodule-only): Set flag.
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.

From-SVN: r264144
2018-09-06 07:41:16 +00:00
Nathan Sidwell
7b5e7691b0 Add -fmodule-only, rename -fmodules-legacy
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.

From-SVN: r264140
2018-09-06 07:21:02 +00:00
Nathan Sidwell
237c80469f configure.ac (checkfuncs, [...]): Add pipe2.
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.

From-SVN: r264018
2018-08-31 14:13:18 +00:00
Nathan Sidwell
8ecf52e2ab AIXify tests fcc/testsuite/
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.

From-SVN: r264002
2018-08-30 21:41:58 +00:00
Nathan Sidwell
58bbdfab5b Fix AIX
Fix AIX
	gcc/cp/
	* cxx-mapper.cc (buffer::get_request): Reinit pos.

From-SVN: r263998
2018-08-30 20:36:42 +00:00
Nathan Sidwell
3b33cb575c Fix --enable-checking=release.
gcc/cp/
	* name-lookup.c (set_module_binding): Add static cast.

From-SVN: r263996
2018-08-30 20:05:53 +00:00
Nathan Sidwell
480a532292 Fix more GC
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.

From-SVN: r263995
2018-08-30 19:47:57 +00:00
Nathan Sidwell
e405162d40 AIX build
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.

From-SVN: r263984
2018-08-30 14:58:54 +00:00
Nathan Sidwell
93907de55e * Merge trunk r263974.
From-SVN: r263975
2018-08-30 12:23:46 +00:00
Nathan Sidwell
ff85d84ef1 module.c (atom_cpp_undef): location_t arg is unused.
gcc/cp/
	* module.c (atom_cpp_undef): location_t arg is unused.

From-SVN: r263961
2018-08-29 15:36:07 +00:00
Nathan Sidwell
5a85780040 module.c (module_state::{read,write}_define): Add NUL terminators to CPP_TOKEN_FLD_STR elements.
gcc/cp/
	* module.c (module_state::{read,write}_define): Add NUL
	terminators to CPP_TOKEN_FLD_STR elements.

From-SVN: r263956
2018-08-29 12:39:15 +00:00
Nathan Sidwell
9f049b4e6e lex.c (cpp_alloc_token_string): Don't clobber ending NUL.
libcpp/
	* lex.c (cpp_alloc_token_string): Don't clobber ending NUL.

From-SVN: r263951
2018-08-29 12:03:32 +00:00
Nathan Sidwell
e8aac46da4 cp-lang.c (LANG_HOOKS_PREPROCESS_UNDEF): Override.
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.

From-SVN: r263932
2018-08-28 20:28:26 +00:00
Nathan Sidwell
2982e99ef9 Sorted macros
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.

From-SVN: r263929
2018-08-28 19:19:13 +00:00
Nathan Sidwell
2b2dae3856 Macro define locations
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.

From-SVN: r263927
2018-08-28 18:33:23 +00:00
Nathan Sidwell
3d3f97f14e 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.

From-SVN: r263926
2018-08-28 17:02:44 +00:00
Nathan Sidwell
d8655a0f9d 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.

From-SVN: r263919
2018-08-28 13:37:15 +00:00
Nathan Sidwell
8bcd4fe221 Merge trunk r263897.
From-SVN: r263898
2018-08-27 22:13:02 +00:00
Nathan Sidwell
13ee363fef module.c (module_state): Remove depth.
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.

From-SVN: r263897
2018-08-27 21:17:58 +00:00
Nathan Sidwell
bc41258a85 module.c (module_state::check_not_purview): New.
gcc/cp/
	* module.c (module_state::check_not_purview): New.
	(module_state::read_imports,import_module): Use it.

From-SVN: r263895
2018-08-27 20:06:27 +00:00
Nathan Sidwell
a86bf07345 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.

From-SVN: r263893
2018-08-27 19:43:25 +00:00
Nathan Sidwell
846b3cc8e8 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.

From-SVN: r263892
2018-08-27 19:13:26 +00:00
Nathan Sidwell
4cf98010d2 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.

From-SVN: r263889
2018-08-27 16:14:43 +00:00
Nathan Sidwell
668499eda8 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.

From-SVN: r263883
2018-08-27 13:45:47 +00:00
Nathan Sidwell
cb89a1901c 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.

From-SVN: r263823
2018-08-23 23:24:56 +00:00
Nathan Sidwell
116c1274ae Kill N: prefix notation
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.

From-SVN: r263812
2018-08-23 13:05:06 +00:00
Nathan Sidwell
590bce27e4 %M formatter
%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.

From-SVN: r263779
2018-08-22 15:58:14 +00:00
Nathan Sidwell
abc6abad07 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.

From-SVN: r263777
2018-08-22 13:43:05 +00:00
Nathan Sidwell
fbfe859a1d Fix GTY
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.

From-SVN: r263775
2018-08-22 13:21:36 +00:00
Nathan Sidwell
db585e2c26 cp-tree.h (declare_module, [...]): Separate name from location.
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.

From-SVN: r263748
2018-08-21 18:13:55 +00:00
Nathan Sidwell
4a6628459d module.c (module_mapper::divert_include): Don't append export attrib.
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.

From-SVN: r263746
2018-08-21 16:54:22 +00:00
Nathan Sidwell
220324eef2 module.c (module_state::get_module): Lose dflt & insert args.
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.

From-SVN: r263740
2018-08-21 15:33:19 +00:00
Nathan Sidwell
630fdc5ccc module.c (module_state::is_mapping): Rename to ...
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.

From-SVN: r263705
2018-08-21 14:13:45 +00:00
Nathan Sidwell
e73f417376 pex-unix.c (IS_FAKE_VFORK): Rename to VFORK_IS_FORK.
libiberty/
	* pex-unix.c (IS_FAKE_VFORK): Rename to VFORK_IS_FORK.
	(pex_unix_exec_child): Avoid spuros clobber warning, use stdio
	when forking.

From-SVN: r263704
2018-08-21 14:11:05 +00:00
Nathan Sidwell
b7b25d8e7c Merge trunk r263679.
From-SVN: r263684
2018-08-21 00:26:53 +00:00
Nathan Sidwell
9507acab94 Merge trunk r263673.
From-SVN: r263674
2018-08-20 20:23:03 +00:00
Nathan Sidwell
052da585c1 Revert r263619 2018-08-17 Nathan Sidwell <nathan@acm.org> Revert r263597...
Revert r263619  2018-08-17  Nathan Sidwell  <nathan@acm.org>
	Revert r263597  2018-08-16  Nathan Sidwell  <nathan@acm.org>
	They break GTY strangely.

From-SVN: r263673
2018-08-20 19:49:07 +00:00
Nathan Sidwell
4f9491d50c module.c (module_state::is_detached): New.
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.

From-SVN: r263619
2018-08-17 13:12:23 +00:00
Nathan Sidwell
3eed57f321 modules.exp (dg-module-pre-prune): Delete
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.

From-SVN: r263599
2018-08-16 19:01:57 +00:00
Nathan Sidwell
a6e2cbe7ad cp-tree.h (class module_state): Forward declare.
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.

From-SVN: r263597
2018-08-16 18:51:36 +00:00
Nathan Sidwell
ac589de58e Merge trunk r263429.
From-SVN: r263431
2018-08-08 19:33:14 +00:00
Nathan Sidwell
dd6ea0f635 Merge trunk r263272.
From-SVN: r263276
2018-08-02 20:25:52 +00:00
Nathan Sidwell
68bf538f62 cpplib.h (cpp_clear_if_stack): Renamed from cpp_pop_directives.
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.

From-SVN: r262594
2018-07-12 14:11:18 +00:00
Nathan Sidwell
aa5b71ef7c c.opt (fmodule-preamble): Alias fmodule-preamble=
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.

From-SVN: r262593
2018-07-12 13:38:20 +00:00
Nathan Sidwell
ae2917b615 Hide NT_MACRO
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.

From-SVN: r262592
2018-07-12 13:33:48 +00:00
Nathan Sidwell
76b367c3b7 modules.exp: Restore g++-dg-prune after test.
gcc/testsuite/
	* g++.dg/modules/modules.exp: Restore g++-dg-prune after test.
	* g++.dg/modules/legacy-5_c.C: Fix scan-lang-dump.

From-SVN: r262478
2018-07-06 14:43:07 +00:00
Nathan Sidwell
c1f45e4923 No ALIASes for IMPORTS
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.

From-SVN: r262450
2018-07-05 18:06:47 +00:00
Nathan Sidwell
77317a8b43 Legacy header warning
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.

From-SVN: r262449
2018-07-05 17:41:55 +00:00
Nathan Sidwell
51cbdcc2e9 Legacy header aliasing
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.

From-SVN: r262441
2018-07-05 15:09:59 +00:00
Nathan Sidwell
06b6cb5bac backport: invoke.texi (C++ Modules): Adjust.
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.

From-SVN: r262356
2018-07-03 19:13:59 +00:00
Nathan Sidwell
651ccaf2ee Explicit user/system legacy headers
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.

From-SVN: r262355
2018-07-03 18:03:15 +00:00
Nathan Sidwell
13a14c25f6 Diverted header column preservation
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.

From-SVN: r262259
2018-06-29 20:06:15 +00:00
Nathan Sidwell
41db2dbfef Diverted include line numbering
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

From-SVN: r262256
2018-06-29 17:42:19 +00:00
Nathan Sidwell
540eb3a7ec modules.exp (dg-module-pre-prunes): Renamed.
gcc/testsuite/
	* g++.dg/modules/modules.exp (dg-module-pre-prunes): Renamed.

From-SVN: r262253
2018-06-29 14:44:00 +00:00
Nathan Sidwell
f4a86773b9 directives.c (do_include_common): Include diverter will push buffer.
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.

From-SVN: r262252
2018-06-29 14:34:29 +00:00
Nathan Sidwell
39af15a3d3 legacy-3*: New.
gcc/testsuite/
	* g++.dg/modules/legacy-3*: New.

From-SVN: r262235
2018-06-28 21:06:54 +00:00
Nathan Sidwell
f802b4e39e modules.exp: Fix execution tests.
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.

From-SVN: r262233
2018-06-28 20:30:51 +00:00
Nathan Sidwell
1f00e190b1 (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.

From-SVN: r262229
2018-06-28 19:07:07 +00:00
Nathan Sidwell
bc33e2e808 (Beginnings of) Legacy importing
(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.

From-SVN: r262187
2018-06-27 14:46:32 +00:00
Nathan Sidwell
dbea8969da (Beginnings of) Legacy header modules
(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.

From-SVN: r262183
2018-06-27 12:05:47 +00:00
Nathan Sidwell
36b0f6f555 Merge trunk r262148.
From-SVN: r262151
2018-06-26 14:31:59 +00:00
Nathan Sidwell
4489b4ee94 configure.ac: Fix AF_INET6 & accept4 tests.
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.

From-SVN: r262148
2018-06-26 13:34:13 +00:00
Nathan Sidwell
6692af0529 cxx-module.cc (kill_signal): New.
gcc/cp/
	* cxx-module.cc (kill_signal): New.
	(server): Fixup inet_ntop use.

From-SVN: r262019
2018-06-25 14:47:29 +00:00
Nathan Sidwell
1e5bfe6116 configure.ac: Check for inet_ntop.
gcc/
	* configure.ac: Check for inet_ntop.
	* configure, config.in: Rebuilt.
	gcc/cp/
	* cxx-mapper.cc (server): Use inet_ntop when available.a

From-SVN: r262018
2018-06-25 13:13:51 +00:00
Nathan Sidwell
172c473884 cxx-mapper.cc: BMI->GCC
gcc/cp/
	* cxx-mapper.cc: BMI->GCC
	* module.c: Likewise.
	gcc/
	* doc/invoke.texi: Likewise.

From-SVN: r261996
2018-06-24 15:03:56 +00:00
Nathan Sidwell
3572c5ba3f cxx-mapper.cc (struct netmask): New.
gcc/cp/
	* cxx-mapper.cc (struct netmask): New.
	(server): Validate connection addresses.
	(accept_from): New.
	(process_args): Add -a arg.

From-SVN: r261993
2018-06-24 01:12:37 +00:00
Nathan Sidwell
ebae4682fa 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.

From-SVN: r261987
2018-06-23 23:33:46 +00:00
Nathan Sidwell
a0b17abcec A proper server
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.

From-SVN: r261986
2018-06-23 20:08:27 +00:00
Nathan Sidwell
25f3198d17 module.c (module_mapper::send_command): Fix off-by-one.
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.

From-SVN: r261889
2018-06-22 13:12:26 +00:00
Nathan Sidwell
747350a736 configure.ac: Check select, accept4.
gcc/
	* configure.ac: Check select, accept4.
	* config.in, configure: Rebuilt.

From-SVN: r261887
2018-06-22 12:32:02 +00:00
Nathan Sidwell
4a2623caab c.opt: Add -fmodule-header.
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.

From-SVN: r261862
2018-06-21 20:04:36 +00:00
Nathan Sidwell
a12bfc32cc Use getaddrinfo, not gethostbyname2
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.

From-SVN: r261852
2018-06-21 16:43:43 +00:00
Nathan Sidwell
79a84edce9 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.

From-SVN: r261747
2018-06-19 15:11:51 +00:00
Nathan Sidwell
412b9ca98e loc-2_[a-f].C: New.
gcc/testsuite/
	* g++.dg/modules/loc-2_[a-f].C: New.

From-SVN: r261701
2018-06-18 14:19:33 +00:00
Nathan Sidwell
693ce46d3f configure.ac: Detect epoll & pselect.
gcc/
	* configure.ac: Detect epoll & pselect.
	* configure, config.in: Rebuilt.

From-SVN: r261691
2018-06-17 20:42:35 +00:00
Nathan Sidwell
e289a38232 module.c (module_mapper::module_mapper): Fixup length errors.
gcc/cp/
	* module.c (module_mapper::module_mapper): Fixup length errors.

From-SVN: r261690
2018-06-17 18:23:06 +00:00
Nathan Sidwell
e4fbddce07 cxx-module-mapper.sh: Remove recompilation capability.
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.

From-SVN: r261689
2018-06-17 18:18:01 +00:00
Nathan Sidwell
d7b179ec6b diagnostic.c (diagnostic_report_current_module): Starting location could be a module.
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.

From-SVN: r261669
2018-06-15 23:14:04 +00:00
Nathan Sidwell
630361e3cf cp-tree.h (make_module_loc): Delete.
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.

From-SVN: r261667
2018-06-15 21:46:51 +00:00
Nathan Sidwell
2c2b15bf34 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.

From-SVN: r261652
2018-06-15 19:51:08 +00:00
Nathan Sidwell
a838847239 line-map.h (IS_ORDINARY_LOC, [...]): 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.

From-SVN: r261651
2018-06-15 19:49:11 +00:00
Nathan Sidwell
47f9ef48d2 diagnostic.c (diagnostic_report_current_module): Fixup include stack messages.
gcc/
	* diagnostic.c (diagnostic_report_current_module): Fixup include
	stack messages.
	gcc/testsuite/
	* lib/prune.exp (prune_gcc_output): Adjust include stack regexps.

From-SVN: r261650
2018-06-15 19:46:15 +00:00
Nathan Sidwell
677caa2b9d module.c (spewer::linemaps): Return mask.
gcc/cp/
	* module.c (spewer::linemaps): Return mask.
	(module_state::{find,write}_locations): Use mask.
	(module_state::read_locations): Implement.

From-SVN: r261628
2018-06-15 13:49:06 +00:00
Nathan Sidwell
d2c838639c 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.

From-SVN: r261627
2018-06-15 13:31:18 +00:00
Nathan Sidwell
d6fbd62bef module.c (bytes_{in,out}::align): New.
gcc/cp/
	* module.c (bytes_{in,out}::align): New.
	(bytes_{in,out}::buf): Use it.

From-SVN: r261625
2018-06-15 12:27:40 +00:00
Nathan Sidwell
be1d228db3 line-map.c (linemap_init): Set default allocator here.
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

From-SVN: r261624
2018-06-15 12:25:49 +00:00
Nathan Sidwell
e8828e4109 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.

From-SVN: r261600
2018-06-14 16:39:35 +00:00
Nathan Sidwell
3a4a4caf81 Fix section alignment.
gcc/cp/
	* module.c (elf_out::grow): Fix padding calc.
	(elf_out::add): Assert aligned.

From-SVN: r261599
2018-06-14 15:39:20 +00:00
Nathan Sidwell
16145d49b4 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.

From-SVN: r261598
2018-06-14 15:29:58 +00:00
Nathan Sidwell
2afb723635 module.c (struct slurping): New, broken out of ...
gcc/cp/
	* module.c (struct slurping): New, broken out of ...
	(struct module_state): ... here.  Move loading data there and
	adjust all users.

From-SVN: r261590
2018-06-14 11:37:17 +00:00
Nathan Sidwell
c9e6b5c24c 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.

From-SVN: r261573
2018-06-13 21:19:00 +00:00
Nathan Sidwell
febab22ba5 Better socket handling.
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.

From-SVN: r261513
2018-06-12 16:51:12 +00:00
Nathan Sidwell
198c62f0a7 configure.ac: Rename HOST_HAS_AF_$FOO to HAVE_AF_$FOO.
gcc/
	* configure.ac: Rename HOST_HAS_AF_$FOO to HAVE_AF_$FOO.
	* configure, config.in: Rebuilt.
	gcc/cp/
	* module.c: Adjust.

From-SVN: r261492
2018-06-12 11:16:35 +00:00
Nathan Sidwell
2c22aece84 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.

From-SVN: r261473
2018-06-12 00:53:34 +00:00
Nathan Sidwell
e13a0f64c3 MMAP writing
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.

From-SVN: r261468
2018-06-11 22:27:57 +00:00
Nathan Sidwell
5995dc71ad 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.

From-SVN: r261437
2018-06-11 16:35:05 +00:00
Nathan Sidwell
3d7733d3be 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.

From-SVN: r261358
2018-06-09 06:19:23 +00:00
Nathan Sidwell
3f927e6544 module.c (elf): Replace FILE *stream with int fd.
gcc/cp/
	* module.c (elf): Replace FILE *stream with int fd.  Update uses.

From-SVN: r261345
2018-06-08 19:12:22 +00:00
Nathan Sidwell
895f037429 module.c (bytes::begin): Add CRC parm.
gcc/cp/
	* module.c (bytes::begin): Add CRC parm.
	(elf_in): Read buffers, adjust.

From-SVN: r261342
2018-06-08 18:54:45 +00:00
Nathan Sidwell
3328b019f5 module.c (elf_out): Track file position directly.
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.

From-SVN: r261341
2018-06-08 17:46:16 +00:00
Nathan Sidwell
594c200a7d module.c (elf): Add hdr member.
gcc/cp/
	* module.c (elf): Add hdr member.
	(elf_in::begin): Adjust.
	(elf_out::{begin,end}): Adjust.

From-SVN: r261334
2018-06-08 15:22:54 +00:00
Nathan Sidwell
8779f0f60c module.c (data::printf): Moved from ...
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.

From-SVN: r261330
2018-06-08 15:06:37 +00:00
Nathan Sidwell
bc7b42f152 module.c (bytes::calc_crc): Take length parm.
gcc/cp/
	* module.c (bytes::calc_crc): Take length parm.  Adjust callers.
	(elf_out::strtab): Reimplement.
	(elf_out::add): Use buffer pos for length.

From-SVN: r261294
2018-06-07 19:41:03 +00:00
Nathan Sidwell
c5b0ec7959 module.c (struct data): Resurrect.
gcc/cp/
	* module.c (struct data): Resurrect.  Move buffer extension here.
	Update users.
	(class bytes): Derive from data.

From-SVN: r261292
2018-06-07 18:48:46 +00:00
Nathan Sidwell
82ed44e186 module.c (struct data): Delete.
gcc/cp/
	* module.c (struct data): Delete.  Move into ...
	(struct bytes): ... here.  Update uses.

From-SVN: r261279
2018-06-07 14:23:32 +00:00
Nathan Sidwell
925d264aec module.c (struct data): Make buffer a pointer.
gcc/cp/
	* module.c (struct data): Make buffer a pointer.  Redo interface.

From-SVN: r261274
2018-06-07 13:48:51 +00:00
Nathan Sidwell
259bd8e666 Change integer on-disk format.
gcc/cp/
	* module.c (bytes_{in,out}::{i,u,wi}): Reimplement.
	(make_bmi_path): Don't prefix absolute paths.

From-SVN: r261271
2018-06-07 11:36:13 +00:00
Nathan Sidwell
88b039a0f9 BMI repo directory
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.

From-SVN: r261265
2018-06-07 08:11:08 +00:00
Nathan Sidwell
08fb292ffb 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.

From-SVN: r261236
2018-06-06 14:50:38 +00:00
Nathan Sidwell
01ea6fd01e module.c (module_mapper::module_mapper): Ignore sigpipe.
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.

From-SVN: r261230
2018-06-06 12:56:04 +00:00
Nathan Sidwell
d567ecd87b invoke.texi (C++ Modules): Clarify and extend.
gcc/
	* doc/invoke.texi (C++ Modules): Clarify and extend.

From-SVN: r261182
2018-06-05 06:19:25 +00:00
Nathan Sidwell
d44d2034f2 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.

From-SVN: r261170
2018-06-04 20:36:00 +00:00
Nathan Sidwell
b612969469 Cookies for mapping files
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.

From-SVN: r261149
2018-06-04 13:58:45 +00:00
Nathan Sidwell
6ec2b0b310 diagnostic.c (diagnostic_report_current_module): Don't claim module was imported.
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.

From-SVN: r261126
2018-06-03 10:36:07 +00:00
Nathan Sidwell
fc427595a4 module.c (module_mapper): Robustify.
gcc/cp/
	* module.c (module_mapper): Robustify.

From-SVN: r261076
2018-06-01 18:21:52 +00:00
Nathan Sidwell
bbd26cb7a5 cpp.c (cb_file_change): Adjust for line map inclusion changes.
gcc/fortran/
	* cpp.c (cb_file_change): Adjust for line map inclusion changes.

From-SVN: r261074
2018-06-01 16:16:47 +00:00
Nathan Sidwell
f7f05e5abb Fix formatting
From-SVN: r261071
2018-06-01 15:05:15 +00:00
Nathan Sidwell
0a1dc4634b fix typo
From-SVN: r261070
2018-06-01 14:52:15 +00:00
Nathan Sidwell
575c78ea5b Module mapping file is back
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.

From-SVN: r261069
2018-06-01 14:49:53 +00:00
Nathan Sidwell
220228d7e5 invoke.texi (C++ Modules): Show mapper cookie.
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.

From-SVN: r261053
2018-06-01 01:12:36 +00:00
Nathan Sidwell
fcfbdfedd6 invoke.texi (C++ Modules): Rename -fmodule-server to -fmodule-mapper.
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.

From-SVN: r261052
2018-06-01 00:58:19 +00:00
Nathan Sidwell
5d4324c792 Merge trunk r261033.
From-SVN: r261035
2018-05-31 19:31:22 +00:00
Nathan Sidwell
bdbddca312 module.c (bytes_in::begin): Add location_t arg.
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.

From-SVN: r261033
2018-05-31 19:15:50 +00:00
Nathan Sidwell
3c4c38e045 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

From-SVN: r261032
2018-05-31 19:01:26 +00:00
Nathan Sidwell
41fa9be2c3 Module location
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.

From-SVN: r260955
2018-05-30 15:17:29 +00:00
Nathan Sidwell
e25c5000e7 module.c (struct module_state): Replace loc with imp_loc & self_loc.
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.

From-SVN: r260953
2018-05-30 11:43:48 +00:00
Nathan Sidwell
46aed83060 Included from index becomes included_at location
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.

From-SVN: r260904
2018-05-29 19:36:39 +00:00
Nathan Sidwell
0b718d65e3 line-map.h (enum lc_reason): Add LC_HWM, LC_CXX_MODULE.
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.

From-SVN: r260898
2018-05-29 15:38:58 +00:00
Nathan Sidwell
fe7ac3b36b cxx-module-server.sh: Add batching and ASYNC support.
gcc/cp/
	* cxx-module-server.sh: Add batching and ASYNC support.
	gcc/
	* doc/invoke.texi (C++ Modules): More protocol explanation

From-SVN: r260897
2018-05-29 14:51:28 +00:00
Nathan Sidwell
f21d10fe75 Server protocol batching
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.

From-SVN: r260779
2018-05-25 20:41:36 +00:00
Nathan Sidwell
9126f24a4e Merge trunk r260753.
From-SVN: r260755
2018-05-25 11:38:00 +00:00
Nathan Sidwell
40e65748e1 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.

From-SVN: r260752
2018-05-25 11:09:08 +00:00
Nathan Sidwell
a77f090960 name-lookup.c (extract_module_decls): Don't strip template of result.
gcc/cp/
	* name-lookup.c (extract_module_decls): Don't strip template of
	result.
	gcc/
	* doc/invoke.texi (C++ Modules): Consider batching.

From-SVN: r260699
2018-05-24 23:37:15 +00:00
Nathan Sidwell
f202f3075e invoke.texi (C++ ModuleS): Update server docs.
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.

From-SVN: r260680
2018-05-24 17:44:45 +00:00
Nathan Sidwell
710c7351f7 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.

From-SVN: r260679
2018-05-24 17:41:46 +00:00
Nathan Sidwell
648ea5e549 diagnostic-code.h (fullname): Delete.
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.

From-SVN: r260611
2018-05-23 14:52:03 +00:00
Nathan Sidwell
3cc90ebb99 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.

From-SVN: r260607
2018-05-23 13:02:12 +00:00
Nathan Sidwell
28cf4b7259 cxx-module-server.sh: Remove --no-default.
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.

From-SVN: r260602
2018-05-23 11:08:56 +00:00
Nathan Sidwell
f0ed9e2769 cxx-module-server.sh: Add --no-compile, --no-default and --mapping options.
gcc/cp/
	* cxx-module-server.sh: Add --no-compile, --no-default and
	--mapping options.

From-SVN: r260557
2018-05-22 20:50:24 +00:00
Nathan Sidwell
6cddd66a51 module.c (depset::defn_key): Add is_def parm.
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.

From-SVN: r260554
2018-05-22 19:51:30 +00:00
Nathan Sidwell
cc76fbdc42 Revert lazy definition patches.
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.

From-SVN: r260545
2018-05-22 18:26:28 +00:00
Nathan Sidwell
0983d83fa9 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.

From-SVN: r260542
2018-05-22 17:46:27 +00:00
Nathan Sidwell
91b1da9c17 module.c (trees_out::seed): Reimplement mechanim.
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.

From-SVN: r260505
2018-05-22 12:44:25 +00:00
Nathan Sidwell
4751aa9760 directives.c (struct if_stack): Add hash_loc field.
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.

From-SVN: r260498
2018-05-22 00:55:05 +00:00
Nathan Sidwell
41be7e117e cp-tree.h (HAS_DECL_MODULE_LAZY_DEFN_P): 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.

From-SVN: r260484
2018-05-21 20:08:21 +00:00
Nathan Sidwell
e32b3703d9 Write lazy decls (no reading yet)
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.

From-SVN: r260473
2018-05-21 15:20:23 +00:00
Nathan Sidwell
b560fccfca internal.h (_cpp_handle_directive): Add HASH_LOC arg.
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.

From-SVN: r260426
2018-05-20 23:05:33 +00:00
Nathan Sidwell
6c09266f2c Import peeking
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.

From-SVN: r260425
2018-05-20 18:52:41 +00:00
Nathan Sidwell
a7cec387e3 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.

From-SVN: r260421
2018-05-20 14:35:16 +00:00
Nathan Sidwell
e73b6e460a Parse after tokenizing
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.

From-SVN: r260403
2018-05-19 20:23:42 +00:00
Nathan Sidwell
d1e670b753 module.c (trees_out::maybe_insert_typeof): New.
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.

From-SVN: r260375
2018-05-18 18:49:36 +00:00
Nathan Sidwell
49bf756d92 module.c (module_state::write_cluster): Break apart unnamed numbering from marking.
gcc/cp/
	* module.c (module_state::write_cluster): Break apart unnamed
	numbering from marking.
	(module_state::write): Break apart cluster sizing from section
	numbering.

From-SVN: r260368
2018-05-18 15:40:40 +00:00
Nathan Sidwell
e961bbec63 module.c (trees_out::mark_node): Lose walk_into parm.
gcc/cp/
	* module.c (trees_out::mark_node): Lose walk_into parm.  Adjust
	all callers.
	(module_state::write_cluster): Assert binding already marked.

From-SVN: r260367
2018-05-18 15:30:36 +00:00
Nathan Sidwell
65313e56cd module.c (module_state::mark_definition): Remove include_decl parm.
gcc/cp/
	* module.c (module_state::mark_definition): Remove include_decl
	parm.
	(module_state::mark_{template,function,var,class,enum}_def): Likewise.

From-SVN: r260366
2018-05-18 14:21:58 +00:00
Nathan Sidwell
e3f06a88ce module.c (trees_in::{preseed,seed}): New.
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.

From-SVN: r260364
2018-05-18 13:19:24 +00:00
Nathan Sidwell
709c63f289 module.c (depset::hash::add_definition): Add DEFERRABLE parm.
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.

From-SVN: r260360
2018-05-18 12:55:41 +00:00
Nathan Sidwell
3553f5c515 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.

From-SVN: r260356
2018-05-18 11:37:09 +00:00
Nathan Sidwell
e5276184e9 cp-tree.h (ovl_op_flags, [...]): Reindent.
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.

From-SVN: r260355
2018-05-18 11:32:36 +00:00
Nathan Sidwell
af817e67f1 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.

From-SVN: r260293
2018-05-16 15:02:48 +00:00
Nathan Sidwell
40de5561b3 Detect cpp directives at end of preamble
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.

From-SVN: r260268
2018-05-15 19:54:23 +00:00
Nathan Sidwell
bacd73bd51 cpplib.h (cpp_in_macro_expansion_p): Declare.
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.

From-SVN: r260267
2018-05-15 17:15:01 +00:00
Nathan Sidwell
ed44286d86 langhooks.h (struct lang_hooks): Adjust preprocess_preamble.
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.

From-SVN: r260265
2018-05-15 16:11:23 +00:00
Nathan Sidwell
7df8a2e301 Make-lang.in: Dont sed server version
gcc/cp/
	* Make-lang.in: Dont sed server version
	* module.c: Use fixed server version.
	* cxx-module-server.sh: Likewise.

From-SVN: r260262
2018-05-15 14:21:53 +00:00
Nathan Sidwell
35e6a6f67a module.c (trees_out::dep_walk_p): Replace with ...
gcc/cp/
	* module.c (trees_out::dep_walk_p): Replace with ...
	(trees_out::{streaming,depending}_p): ... these.  Update callers.

From-SVN: r260261
2018-05-15 14:16:40 +00:00
Nathan Sidwell
bd297aa6f5 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.

From-SVN: r260235
2018-05-14 16:40:30 +00:00
Nathan Sidwell
275c0c3cf0 invoke.texi (C++ Modules): Clarify server docs.
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.

From-SVN: r260225
2018-05-14 11:53:22 +00:00
Nathan Sidwell
82c7c22ebb 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.

From-SVN: r260217
2018-05-13 22:15:45 +00:00
Nathan Sidwell
f8ce9741d2 module.c (module_server): Make pointer to non-const.
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.

From-SVN: r260201
2018-05-12 21:48:50 +00:00
Nathan Sidwell
8c143867bc Rename oracle->server, thanks Richard Smith
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.

From-SVN: r260200
2018-05-12 21:30:52 +00:00
Nathan Sidwell
9d44b6ca29 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.

From-SVN: r260199
2018-05-12 21:13:22 +00:00
Nathan Sidwell
b86f7e4ca6 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.

From-SVN: r260189
2018-05-11 21:38:16 +00:00
Nathan Sidwell
484acf33ea 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.

From-SVN: r260188
2018-05-11 21:16:28 +00:00
Nathan Sidwell
170a5a26a8 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.

From-SVN: r260187
2018-05-11 21:10:54 +00:00
Nathan Sidwell
94f9a05537 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.

From-SVN: r260185
2018-05-11 20:27:04 +00:00
Nathan Sidwell
344cd94c53 Make-lang.in (cxx-module-oracle): Sed version.
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.

From-SVN: r260184
2018-05-11 20:16:15 +00:00
Nathan Sidwell
b517e6bc17 A more conventional protocol
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.

From-SVN: r260183
2018-05-11 19:54:46 +00:00
Nathan Sidwell
1a6bded3c7 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.

From-SVN: r260178
2018-05-11 18:26:27 +00:00
Nathan Sidwell
1f35b25295 config.in: Rebuilt too.
gcc/c
	* config.in: Rebuilt too.

From-SVN: r260177
2018-05-11 18:15:55 +00:00
Nathan Sidwell
9c727609e6 diagnostic-core.h (fullname): Declare.
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.

From-SVN: r260173
2018-05-11 17:43:05 +00:00
Nathan Sidwell
eb99e474b3 configure.ac: Check for AF_UNIX and AF_INET6.
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}.

From-SVN: r260164
2018-05-11 15:36:40 +00:00
Nathan Sidwell
e77f781514 module.c: Include socket headers.
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.

From-SVN: r260152
2018-05-11 04:15:24 +00:00
Nathan Sidwell
f22c96561c module.c (module_prefix): Delete.
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

From-SVN: r260148
2018-05-11 00:42:28 +00:00
Nathan Sidwell
df456c5afd Make-lang.in (cxx-module-oracle): New rule.
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.

From-SVN: r260142
2018-05-11 00:06:22 +00:00
Nathan Sidwell
87ea734144 module.c (module_state::get_module): Add insert arg.
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.

From-SVN: r260098
2018-05-09 21:57:32 +00:00
Nathan Sidwell
e809bac59e Add -EE
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.

From-SVN: r260095
2018-05-09 20:35:30 +00:00
Nathan Sidwell
078aae37b0 parser.c (module_preamble_end_loc): New var.
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.

From-SVN: r260084
2018-05-09 15:49:04 +00:00
Nathan Sidwell
fe8ad2822d parser.c (cp_parser_module_preamble): Check for macros
gcc/cp/
	* parser.c (cp_parser_module_preamble): Check for macros
	gcc/testsuite/
	* g++.dg/modules/atom-preamble-3.C: New.

From-SVN: r260064
2018-05-09 00:27:19 +00:00
Nathan Sidwell
5a055838ea parser.c (cp_parser_module_preamble): 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.

From-SVN: r260059
2018-05-09 00:07:07 +00:00
Nathan Sidwell
54e18b16be module.c (depset): Add is_unnamed and refs_unnamed flags.
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.

From-SVN: r260016
2018-05-07 23:15:33 +00:00
Nathan Sidwell
15b74ca364 module.c (depset::tarjan::connect): Use section==0 for done, not top bit of cluster.
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.

From-SVN: r260014
2018-05-07 21:52:05 +00:00
Nathan Sidwell
c135d18247 module.c (FIXED_LIMIT): Remove.
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.

From-SVN: r259980
2018-05-06 18:52:26 +00:00
Nathan Sidwell
41e56c3c6f module.c (trees_out::maybe_tag_decl_type): New, broken out of ...
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.

From-SVN: r259956
2018-05-04 18:56:42 +00:00
Nathan Sidwell
d6497afa81 ptree.c (cxx_print_decl): Show module.
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.

From-SVN: r259951
2018-05-04 18:04:50 +00:00
Nathan Sidwell
912099f99b module.c (module_state::mark_definition): Add include_decl arg.
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.

From-SVN: r259933
2018-05-04 13:41:42 +00:00
Nathan Sidwell
81dfe8bba3 c-cppbuiltin.c (c_cpp_builtins): Update __cpp_modules value, define __cpp_modules_{ts,atom} as selected.
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.

From-SVN: r259908
2018-05-03 20:03:22 +00:00
Nathan Sidwell
0ae5a0e09d module.c (cluster_size): Delete.
gcc/cp/
	* module.c (cluster_size): Delete.
	(module_state::write_{cluster,namespaces,bindings}): Adjust.
	(module_state::write): Precalculate section numbers.

From-SVN: r259905
2018-05-03 19:53:27 +00:00
Nathan Sidwell
d9fc5786a3 cxx-module-wrapper.sh: Require bash.
gcc/cp/
	* cxx-module-wrapper.sh: Require bash.

From-SVN: r259870
2018-05-02 23:48:38 +00:00
Nathan Sidwell
2c6a0d6fdf 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.

From-SVN: r259869
2018-05-02 23:45:54 +00:00
Nathan Sidwell
0cc4985577 module.c (depset::tarjan): Replace binds, spaces & defs fields with plain result field.
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.

From-SVN: r259841
2018-05-02 14:50:45 +00:00
Nathan Sidwell
185740cd54 module.c (trees_out::tree_{type,decl,ctx}): Separate need_body and owner args.
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.

From-SVN: r259804
2018-05-01 17:50:05 +00:00
Nathan Sidwell
df7dc01b86 module.c (trees_out::tree_decl): Write innermost args.
gcc/cp/
	* module.c (trees_out::tree_decl): Write innermost args.
	gcc/testsuite/
	* g++.dg/modules/indirect-4_[abc].C: New.

From-SVN: r259798
2018-05-01 14:23:02 +00:00
Nathan Sidwell
76d79f2b6d module.c (module_state::occupy): Do not set filename here.
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.

From-SVN: r259794
2018-05-01 13:21:17 +00:00
Nathan Sidwell
70d3357617 Make-lang.in (c++.install-common): Install wrapper into libexecsubdir.
gcc/cp/
	* Make-lang.in (c++.install-common): Install wrapper into
	libexecsubdir.

From-SVN: r259792
2018-05-01 12:25:07 +00:00
Nathan Sidwell
5be54af24b Merge trunk r184995.
From-SVN: r259791
2018-05-01 12:13:25 +00:00
Nathan Sidwell
bb7520fad2 module.c (trees_out::tree_decl): Adjust for member templates.
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.

From-SVN: r259776
2018-04-30 19:37:11 +00:00
Nathan Sidwell
458e983aec Merge trunk r259710.
From-SVN: r259715
2018-04-27 15:41:00 +00:00
Nathan Sidwell
0814464474 cp-tree.h (DECL_TEMPLATE_INFO): Correct comment.
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.

From-SVN: r259673
2018-04-26 12:55:33 +00:00
Nathan Sidwell
0e457bc3e2 module.c (maybe_get_template): Delete.
gcc/cp/
	* module.c (maybe_get_template): Delete.
	(trees_out::tree_decl): Move dependency building into named-decl
	handling.  Don't walk into namespaces.

From-SVN: r259653
2018-04-25 15:19:51 +00:00
Nathan Sidwell
2c97a830e8 module.c (trees_out::tree_node): Reorder.
gcc/cp/
	* module.c (trees_out::tree_node): Reorder.

From-SVN: r259652
2018-04-25 15:09:03 +00:00
Nathan Sidwell
dd2dff5b2a module.c (trees_out::tree_decl): Deal with templated types.
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.

From-SVN: r259618
2018-04-24 21:04:25 +00:00
Nathan Sidwell
6258bc9377 module.c (enum tree_tag): Add tt_template.
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.

From-SVN: r259616
2018-04-24 20:01:18 +00:00
Nathan Sidwell
f3c5a93379 module.c (trees_out::core_vals): Check module of type context.
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.

From-SVN: r259615
2018-04-24 17:55:59 +00:00
Nathan Sidwell
e66221bfb9 indirect-1_[abc].C: Add exported constant.
gcc/testsuite/
	* g++.dg/modules/indirect-1_[abc].C: Add exported constant.

From-SVN: r259583
2018-04-23 21:59:16 +00:00
Nathan Sidwell
53e2feb9c5 name-lookup.c (lookup_by_ident): Look in enumerals.
gcc/cp/
	* name-lookup.c (lookup_by_ident): Look in enumerals.
	gcc/testsuite/
	* g++.dg/modules/indirect-1_[abc].C: Add enum.

From-SVN: r259581
2018-04-23 21:12:53 +00:00
Nathan Sidwell
75fa50ebbe module.c (trees_{in,out}::core_vals): More FUNCTION_DECL fields.
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.

From-SVN: r259573
2018-04-23 20:13:28 +00:00
Nathan Sidwell
a81bad5c89 Fix regexp
From-SVN: r259569
2018-04-23 18:49:59 +00:00
Nathan Sidwell
adfa8fea1b module.c (dumper::pop): Don't print trailing line.
gcc/cp/
	* module.c (dumper::pop): Don't print trailing line.

From-SVN: r259568
2018-04-23 18:47:56 +00:00
Nathan Sidwell
68dcc2e478 module.c (trees_{in,out}::core_vals): Allow NULL-context VAR_DECLS.
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.

From-SVN: r259567
2018-04-23 18:41:11 +00:00
Nathan Sidwell
e46102bcbf module.c (enum tree_tag): Remove tt_namespace.
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.

From-SVN: r259566
2018-04-23 17:53:52 +00:00
Nathan Sidwell
f653d828b5 module.c (module_state::importing): 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.

From-SVN: r259560
2018-04-23 13:28:33 +00:00
Nathan Sidwell
3ad20118db c-lex.c (c_lex_with_flags): Check C_LEX_FILENAME.
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.

From-SVN: r259331
2018-04-11 20:08:08 +00:00
Nathan Sidwell
f20b266ab1 module.c (module_state::lazy_depth): Remove.
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.

From-SVN: r259328
2018-04-11 18:15:49 +00:00
Nathan Sidwell
6928c7acb7 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.

From-SVN: r259297
2018-04-10 19:52:02 +00:00
Nathan Sidwell
b04261be89 parser.c (cp_parser_declaration_seq_opt): Remove ATOM handling here.
gcc/cp/
	* parser.c (cp_parser_declaration_seq_opt): Remove ATOM handling here.

From-SVN: r259295
2018-04-10 18:05:28 +00:00
Nathan Sidwell
56f93b6057 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.

From-SVN: r259293
2018-04-10 17:58:30 +00:00
Nathan Sidwell
fd7e642ed0 parser.c (cp_lexer_new_main): Replace with ...
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.

From-SVN: r259251
2018-04-09 19:35:51 +00:00
Nathan Sidwell
79d33f1627 parser.c (cp_lexer_get_preprocessor_token): Take cpp-flags directly.
gcc/cp/
	* parser.c (cp_lexer_get_preprocessor_token): Take cpp-flags
	directly.
	(cp_lexer_new_main, cp_parser_initial_pragma): Adjust.

From-SVN: r259248
2018-04-09 18:08:53 +00:00
Nathan Sidwell
9b84a0a22b cp-tree.h (modules_p, [...]): New predicates.
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.
	* optmize.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.

From-SVN: r259246
2018-04-09 17:52:15 +00:00
Nathan Sidwell
ebaa09e3d4 module.c (init_module_processing): Disallow PCH.
gcc/cp/
	* module.c (init_module_processing): Disallow PCH.
	gcc/c-family/
	* c-pch.c (c_common_valid_pch): Never valid with modules.

From-SVN: r259245
2018-04-09 17:08:13 +00:00
Nathan Sidwell
2f702c9350 module.c (module_state::{read,write}_config): Check ATOM/TS matches.
gcc/cp/
	* module.c (module_state::{read,write}_config): Check ATOM/TS
	matches.
	gcc/testsuite/
	* g++.dg/modules/atom-check-1_[ab].C: New.

From-SVN: r259243
2018-04-09 16:03:44 +00:00
Nathan Sidwell
d33214adac module.c (module_state::write_readme): 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.

From-SVN: r259242
2018-04-09 15:56:07 +00:00
Nathan Sidwell
7301320baf module.c (module_state::release): Simplify.
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.

From-SVN: r259241
2018-04-09 15:33:37 +00:00
Nathan Sidwell
0456ff13e8 module.c (module_state::read): Allocate elf_in here.
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.

From-SVN: r259235
2018-04-09 14:42:45 +00:00
Nathan Sidwell
7d3acce1a6 module.c (trees_out::tree_node): Avoid uninitialized false positive.
gcc/cp/
	* module.c (trees_out::tree_node): Avoid uninitialized false
	positive.

From-SVN: r259232
2018-04-09 11:27:11 +00:00
Nathan Sidwell
40c28b84f3 Merge trunk r259189.
From-SVN: r259197
2018-04-06 22:38:12 +00:00
Nathan Sidwell
f9a1ba9bab 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.

From-SVN: r259189
2018-04-06 19:37:28 +00:00
Nathan Sidwell
af0db6abc7 module.c (elf::E_BAD_LAZY): New error.
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.

From-SVN: r259180
2018-04-06 17:23:32 +00:00
Nathan Sidwell
166cd09228 module.c (elf_in::keep_sections): New.
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.

From-SVN: r259176
2018-04-06 15:09:56 +00:00
Nathan Sidwell
2a87dcaf24 module.c (trees_{in,out}, depset): Reorder definitions.
gcc/cp/
	* module.c (trees_{in,out}, depset): Reorder definitions.

From-SVN: r259175
2018-04-06 13:53:37 +00:00
Nathan Sidwell
b541938459 module.c (module_state::{read,write}_binfos): Merge loops.
gcc/cp/
	* module.c (module_state::{read,write}_binfos): Merge loops.

From-SVN: r259174
2018-04-06 13:38:36 +00:00
Nathan Sidwell
a85bdfd1dd modules.c (trees_{in,out}::tree_binfo): Delete.
gcc/cp/
	* modules.c (trees_{in,out}::tree_binfo): Delete.
	(module_state::{read,write}_binfos): New.
	(module_state::{read,write}_class_def): Use them.

From-SVN: r259170
2018-04-06 13:18:31 +00:00
Nathan Sidwell
97efb6eb2e invoke.texi (C++ Modules): New section.
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.

From-SVN: r259154
2018-04-05 21:03:34 +00:00
Nathan Sidwell
e90a8fbb38 module.c (module_state::tng_*): Rename.
gcc/cp/
	* module.c (module_state::tng_*): Rename.

From-SVN: r259151
2018-04-05 18:45:51 +00:00
Nathan Sidwell
e49b9c0f23 module.c (enum tree_tag): Delete tt_definition, tt_binding.
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.

From-SVN: r259148
2018-04-05 18:30:55 +00:00
Nathan Sidwell
1e5321ce86 module.c (module_state::write_namespace): Delete.
gcc/cp/
	* module.c (module_state::write_namespace): Delete.
	(module_state::{write_bindings,read_bindings}): Likewise.

From-SVN: r259144
2018-04-05 18:21:25 +00:00
Nathan Sidwell
7e16c39dca module.c (TNG): Delete.
gcc/cp/
	* module.c (TNG): Delete.
	(module_state::{tng_read_bindings,write): Constant fold TNG.
	(trees_out::tree_node, trees_in::finish_type): Likewise.

From-SVN: r259143
2018-04-05 18:16:56 +00:00
Nathan Sidwell
a780f851b7 module.c (refs_tng): Replace with TNG.
gcc/cp/
	* module.c (refs_tng): Replace with TNG.

From-SVN: r259142
2018-04-05 18:12:34 +00:00
Nathan Sidwell
17708cb962 Switch over to new binding scheme.
gcc/cp/
	* module.c (TNG): Enable.

From-SVN: r259141
2018-04-05 17:57:31 +00:00
Nathan Sidwell
1b68817d9a module.c (module_state::{read,write,mark}_template_def): Deal with CLASSTYPE_DECL_LIST.
gcc/cp/
	* module.c (module_state::{read,write,mark}_template_def): Deal
	with CLASSTYPE_DECL_LIST.
	(trees_out::tree_node): Check implicit TEMPLATE_DECLs.

From-SVN: r259139
2018-04-05 17:29:51 +00:00
Nathan Sidwell
71a1a1c825 module.c (trees_out::tree_node): Reorder by-name checks.
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.

From-SVN: r259131
2018-04-05 15:45:50 +00:00
Nathan Sidwell
e39c76629f module.c (module_state::{read,write,mark}_template_def): New.
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.

From-SVN: r259102
2018-04-04 19:39:16 +00:00
Nathan Sidwell
4137ba72a9 module.c (module_state::{read,write}_class_def}): Fixup vptr-containing logic.
gcc/cp/
	* module.c (module_state::{read,write}_class_def}): Fixup
	vptr-containing logic.
	(trees_in::tree_binfo): Forward walk.

From-SVN: r259095
2018-04-04 17:06:51 +00:00
Nathan Sidwell
f9a77777e8 module.c (enum tree_tag): Replace tt_tinfo_pseudo with tt_tinfo_typedef.
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.

From-SVN: r259086
2018-04-04 15:46:01 +00:00
Nathan Sidwell
4a0bf2e4a5 module.c (module_state::read_definition): New.
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.

From-SVN: r259081
2018-04-04 14:12:27 +00:00
Nathan Sidwell
326ccacb78 module.c (module_state::write_var_def): Write definition.
gcc/cp/
	* module.c (module_state::write_var_def): Write definition.

From-SVN: r259079
2018-04-04 14:01:39 +00:00
Nathan Sidwell
c2fa008ce2 module.c (trees_out::mark_node): Allow preseeding.
gcc/cp/
	* module.c (trees_out::mark_node): Allow preseeding.
	(trees_out::tree_node): Fix as_base.

From-SVN: r259078
2018-04-04 13:50:25 +00:00
Nathan Sidwell
3d9cf8d0da module.c (tt_type_name, tt_named): Rename to ...
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.

From-SVN: r259054
2018-04-03 19:38:17 +00:00
Nathan Sidwell
ac376b8485 module.c (bytes_in::{use,i,u,wi,str}): Use set_overrun.
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.

From-SVN: r259045
2018-04-03 17:43:12 +00:00
Nathan Sidwell
82d5d5099b Reorder for better logging
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.

From-SVN: r259035
2018-04-03 15:06:33 +00:00
Nathan Sidwell
427ffd419f Fix enum types, more globals
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.

From-SVN: r259028
2018-04-03 13:21:59 +00:00
Nathan Sidwell
5d819c0f65 Read new .bindings section
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.

From-SVN: r259013
2018-04-02 16:28:21 +00:00
Nathan Sidwell
3349b9f298 Kill old .bindings section
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_namepace): Public namespaces are exported.
	(push_namespace): Adjust.

From-SVN: r259010
2018-04-02 15:08:03 +00:00
Nathan Sidwell
0060a23b3d module.c (trees_{in,out}::define_class): Check refs_tng.
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.

From-SVN: r259008
2018-04-02 12:45:52 +00:00
Nathan Sidwell
d339a79c03 module.c (trees_{in,out}::tree_binfo): Serialize entire path.
gcc/cp/
	* module.c (trees_{in,out}::tree_binfo): Serialize entire path.
	(trees_{in,out}::tree_node): Adjust.
-- This line, and those below, will be ignored--
M    ChangeLog.modules
M    gcc/cp/module.c

From-SVN: r259005
2018-04-02 11:24:40 +00:00
Nathan Sidwell
b2ff215988 module.c (has_definition): VAR_DECLs too.
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.

From-SVN: r258979
2018-03-30 16:03:14 +00:00
Nathan Sidwell
c2a68e6ec4 module.c (maybe_get_template): New.
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.

From-SVN: r258922
2018-03-28 13:47:45 +00:00
Nathan Sidwell
d69bac2c41 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.

From-SVN: r258891
2018-03-27 16:32:44 +00:00
Nathan Sidwell
a866845eba module.c (hash_definition): 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.

From-SVN: r258888
2018-03-27 15:36:59 +00:00
Nathan Sidwell
9df26320f9 module.c (depset::traits): Hash & compare using name too.
gcc/cp/
	* module.c (depset::traits): Hash & compare using name too.

From-SVN: r258880
2018-03-27 13:14:15 +00:00
Nathan Sidwell
4912622649 module.c (refs_tng): Temporary modal hack.
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.

From-SVN: r258878
2018-03-27 12:48:02 +00:00
Nathan Sidwell
359d2b709d module.c (depset::table): Rename to ...
gcc/cp/
	* module.c (depset::table): Rename to ...
	(depset::hash): ... here.
	(trees_out::deps_only): Rename to ...
	(trees_out::dep_walk_p): ... here.

From-SVN: r258863
2018-03-26 19:25:45 +00:00
Nathan Sidwell
9a730f78a0 module.c (depset::table::find_exports): Renamed ...
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.

From-SVN: r258862
2018-03-26 19:08:53 +00:00
Nathan Sidwell
33fe57484e scanlang.exp (scan-lang-dump-not): new.
gcc/testsuite/
	* lib/scanlang.exp (scan-lang-dump-not): new.

From-SVN: r258861
2018-03-26 18:44:50 +00:00
Nathan Sidwell
a7007fa0a1 module.c (depset::visited): Use depset::cluster.
gcc/cp/
	* module.c (depset::visited): Use depset::cluster.  Adjust users.

From-SVN: r258860
2018-03-26 16:59:51 +00:00
Nathan Sidwell
f5222315d7 module.c (elf_out::strtab::named_decl): Cope with TYPE constext.
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.

From-SVN: r258858
2018-03-26 16:03:34 +00:00
Nathan Sidwell
f910de9768 module.c (elf_out::strtab): Add name-by-decl.
gcc/cp/
	* module.c (elf_out::strtab): Add name-by-decl.
	(module_state::write_cluster): Find naming decl, and use it.

From-SVN: r258857
2018-03-26 14:57:08 +00:00
Nathan Sidwell
c0b34001cf module.c (class depset): Make a class, add accessors.
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.

From-SVN: r258855
2018-03-26 14:27:13 +00:00
Nathan Sidwell
bbae241447 Add depset analysis (incomplete)
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.

From-SVN: r258853
2018-03-26 12:03:53 +00:00
Nathan Sidwell
dbe8a375ad Allow dump '-'
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.

From-SVN: r258806
2018-03-23 14:07:22 +00:00
Nathan Sidwell
30fe466fe6 rename tests
From-SVN: r258600
2018-03-16 17:28:21 +00:00
Nathan Sidwell
0e9aad7352 Remove -fmodules, forcing -fmodules-{ts,atom}
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.

From-SVN: r258598
2018-03-16 15:49:15 +00:00
Nathan Sidwell
17ba69c224 missed changelog
From-SVN: r258597
2018-03-16 15:46:24 +00:00
Nathan Sidwell
629e899389 Implement Atom module & import placement
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.

From-SVN: r258573
2018-03-15 19:52:48 +00:00
Nathan Sidwell
6f702e9b9a Implement p0713 - identifiying module source
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.

From-SVN: r258558
2018-03-15 15:22:41 +00:00
Nathan Sidwell
645b78f080 module.c (add_module_mapping): Fix double increment.
gcc/cp/
	* module.c (add_module_mapping): Fix double increment.

From-SVN: r258104
2018-03-01 16:32:43 +00:00
Nathan Sidwell
72038ba204 Merge trunk r258084.
From-SVN: r258088
2018-02-28 21:50:54 +00:00
Nathan Sidwell
37e9408873 Makefile.in (REVISION_c): Don't exec REVISION.
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.

From-SVN: r258084
2018-02-28 21:01:46 +00:00
Nathan Sidwell
1742e520c5 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.

From-SVN: r258083
2018-02-28 20:35:16 +00:00
Nathan Sidwell
dd7641c8e9 Makefile.in: Exec REVISION maybe.
gcc/
	* Makefile.in: Exec REVISION maybe.
	* REVISION: New.
	gcc/cp/
	* Make-lang.in: Directly set MODULE_STAMP.

From-SVN: r258072
2018-02-28 16:14:25 +00:00
Nathan Sidwell
a9964db717 Map tag recognised in and out of comments
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.

From-SVN: r258065
2018-02-28 13:55:56 +00:00
Nathan Sidwell
732173bd94 module.c (version_string): Rename.
gcc/cp/
	* module.c (version_string): Rename.
	(module_state::write_context): Write compiler version.

From-SVN: r258032
2018-02-27 12:50:36 +00:00
Nathan Sidwell
f3a1ebeed0 Use TREE_VISITED
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.

From-SVN: r257749
2018-02-16 17:42:08 +00:00
Nathan Sidwell
f5ca048020 module.c: More commenting.
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.

From-SVN: r257733
2018-02-16 12:41:31 +00:00
Nathan Sidwell
281cbeae77 Module ownership on containers
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.

From-SVN: r257708
2018-02-15 20:28:48 +00:00
Nathan Sidwell
a6c53ec363 module.c (trees_out::tree_node): Reorder.
gcc/cp/
	* module.c (trees_out::tree_node): Reorder.

From-SVN: r257694
2018-02-15 15:59:58 +00:00
Nathan Sidwell
3b3a3633d5 module.c: Commenting and a few cleanups.
gcc/cp/
	* module.c: Commenting and a few cleanups.

From-SVN: r257693
2018-02-15 15:32:53 +00:00
Nathan Sidwell
0c154178c4 module.c (elf): Make more constants private.
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.

From-SVN: r257689
2018-02-15 14:11:39 +00:00
Nathan Sidwell
26de8c61c5 Module map files have more syntax
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.

From-SVN: r257688
2018-02-15 13:26:24 +00:00
Nathan Sidwell
10f44c52f5 Module path is for mapping files.
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.

From-SVN: r257652
2018-02-14 02:51:41 +00:00
Nathan Sidwell
8381951985 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.

From-SVN: r257595
2018-02-12 18:08:35 +00:00
Nathan Sidwell
03ac6da6ef 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.

From-SVN: r257592
2018-02-12 17:36:26 +00:00
Nathan Sidwell
3987b40362 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.

From-SVN: r257589
2018-02-12 16:56:28 +00:00
Nathan Sidwell
224994bdfe 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.

From-SVN: r257570
2018-02-11 21:18:42 +00:00
Nathan Sidwell
e76f8845b1 Keep module-file map in module hash
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.

From-SVN: r257569
2018-02-11 20:09:55 +00:00
Nathan Sidwell
819b67030d 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.

From-SVN: r257561
2018-02-11 15:15:56 +00:00
Nathan Sidwell
999664b4e3 Move module option processing out of c-common.
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.
	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.

From-SVN: r257560
2018-02-11 14:56:19 +00:00
Nathan Sidwell
df267409c3 module.c: Update more comments.
gcc/cp/
	* module.c: Update more comments.

From-SVN: r257532
2018-02-09 17:42:50 +00:00
Nathan Sidwell
2fc50cf0de module.c: Update a lot of comments.
gcc/cp/
	* module.c: Update a lot of comments.

From-SVN: r257530
2018-02-09 16:18:18 +00:00
Nathan Sidwell
6f9d9ad90e module.c (trees_in::tree_node): Absorb ...
gcc/cp/
	* module.c (trees_in::tree_node): Absorb ...
	(trees_in::tree_node_special): ... this.

From-SVN: r257449
2018-02-07 12:29:16 +00:00
Nathan Sidwell
eccd4bfe0b module.c (trees_in::tree_node_special): Deserialize tt_node here ...
gcc/cp/
	* {trees_in::tree_node_special): Deserialize tt_node here ...
	(trees_in::tree_node): ... not here.

From-SVN: r257448
2018-02-07 12:22:56 +00:00
Nathan Sidwell
eed40d4c2d module.c (trees_out::tree_node_special): Move into tree_node.
gcc/cp/
	* module.c (trees_out::tree_node_special): Move into tree_node.

From-SVN: r257428
2018-02-06 19:48:31 +00:00
Nathan Sidwell
d772730223 module.c (trees_{in,out}::core_vals): Serialize decl name & context here.
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.

From-SVN: r257427
2018-02-06 19:17:34 +00:00
Nathan Sidwell
270e68000c Remove old import machinery.
gcc/cp/
	* module.c (trees_in::tree_node_raw): Set module owner.
	(trees_{in,out}::tree_node): Remove importing here.

From-SVN: r257426
2018-02-06 19:04:30 +00:00
Nathan Sidwell
a26fd6b0a6 Imports use special tags
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.

From-SVN: r257425
2018-02-06 18:45:29 +00:00
Nathan Sidwell
d5abe33049 Kill namespace module slot hackery
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.

From-SVN: r257423
2018-02-06 17:43:21 +00:00
Nathan Sidwell
de648a0708 Namespaces use special tags
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.

From-SVN: r257421
2018-02-06 17:16:40 +00:00
Nathan Sidwell
122e39232d Less implicit tree numbering, negative indices for back refs
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.

From-SVN: r257418
2018-02-06 16:33:22 +00:00
Nathan Sidwell
95eaf6bb17 decl2 (c_parse_final_cleanups): Only finish_module if we started it.
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.

From-SVN: r257396
2018-02-05 21:00:38 +00:00
Nathan Sidwell
4103006ce7 Fix bootstrap
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.

From-SVN: r257391
2018-02-05 17:49:47 +00:00
Nathan Sidwell
854d1fafd7 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.

From-SVN: r257381
2018-02-05 03:02:52 +00:00
Nathan Sidwell
fc91e75d38 name-lookup.c (make_namespace_finish): Always create the scope.
gcc/cp/
	* name-lookup.c (make_namespace_finish): Always create the scope.
	(add_imported_namespace): Check namespace inlineness here.

From-SVN: r257380
2018-02-05 02:29:04 +00:00
Nathan Sidwell
bf24b8d6d8 module.c (decl_set_module): Set DECL_MODULE_OWNER.
gcc/cp/
	* module.c (decl_set_module): Set DECL_MODULE_OWNER.
	* rtti.c (tinfo_base_init): Clear DECL_MODULE_OWNER.

From-SVN: r257369
2018-02-04 23:52:07 +00:00
Nathan Sidwell
d9360032bb decl.c (grokfndecl): Protect decl_set_module call.
gcc/cp/
	* decl.c (grokfndecl): Protect decl_set_module call.
	* name-lookup,c (do_pushtag): Likewise.
	* module.c (decl_set_module): Assert namespace context.

From-SVN: r257368
2018-02-04 23:41:37 +00:00
Nathan Sidwell
9169f1c33e cp-tree.h: Adjust comments.
gcc/cp/
	* cp-tree.h: Adjust comments.
	* module.c (module_purview_p, module_interface_p): Adjust.

From-SVN: r257359
2018-02-03 23:37:55 +00:00
Nathan Sidwell
049563cdcb Deserializing uses an array (Nathan is a dumbass)
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.

From-SVN: r257358
2018-02-03 23:13:39 +00:00
Nathan Sidwell
718b488d96 module.c (nodel_ptr_hash): New.
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.

From-SVN: r257352
2018-02-02 22:13:37 +00:00
Nathan Sidwell
aa4d14d760 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.

From-SVN: r257351
2018-02-02 21:39:05 +00:00
Nathan Sidwell
884f5d6c88 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.

From-SVN: r257349
2018-02-02 20:29:11 +00:00
Nathan Sidwell
6b42c381bd 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.

From-SVN: r257347
2018-02-02 19:30:35 +00:00
Nathan Sidwell
35ffb8ac04 Rename MODULE_INDEX->MODULE_OWNER
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.

From-SVN: r257346
2018-02-02 18:43:29 +00:00
Nathan Sidwell
92ed9ea863 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.

From-SVN: r257345
2018-02-02 18:24:50 +00:00
Nathan Sidwell
670e2c615b Fix circularity detection, and other errors
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.

From-SVN: r257332
2018-02-02 14:17:34 +00:00
Nathan Sidwell
8ca150c404 Alloc a slot for global module
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.

From-SVN: r257317
2018-02-01 22:10:19 +00:00
Nathan Sidwell
d4a642ea89 Alloc aslot for global module
Alloc aslot 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.

From-SVN: r257316
2018-02-01 21:34:19 +00:00
Nathan Sidwell
7d6c6d504f Bindings point to decls
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.

From-SVN: r257309
2018-02-01 19:37:41 +00:00
Nathan Sidwell
5fe9df591a 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.

From-SVN: r257306
2018-02-01 18:29:55 +00:00
Nathan Sidwell
0e0b7d01da name-lookup.h (extract_module_decls): Renamed from extract_module_bindings.
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.

From-SVN: r257297
2018-02-01 14:43:13 +00:00
Nathan Sidwell
037887476b Merge trunk r257292.
From-SVN: r257295
2018-02-01 13:11:41 +00:00
Nathan Sidwell
d5c5f1d8ad module.c (cpms_{in,out}): Rename to ...
gcc/cp/
	* module.c (cpms_{in,out}): Rename to ...
	(trees_in, trees_out): ... here.

From-SVN: r257276
2018-01-31 23:53:13 +00:00
Nathan Sidwell
6037ce045c module.c (module_state::global_{trees,vec,crc}): New, moved from ...
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.

From-SVN: r257269
2018-01-31 21:18:02 +00:00
Nathan Sidwell
8750806684 Derive cpm_{in,out} from bytes_{in,out}
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.

From-SVN: r257267
2018-01-31 20:55:06 +00:00
Nathan Sidwell
f047b78c97 Kill cpm_stream.
gcc/cp/
	* module.c (class cpm_stream): Delete.
	(class cpms_{in,out}): Adjust.

From-SVN: r257263
2018-01-31 20:45:40 +00:00
Nathan Sidwell
371a089802 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.

From-SVN: r257261
2018-01-31 20:22:04 +00:00
Nathan Sidwell
c8b562a93b Add module_stat read & write
Add module_stat read & write
	gcc/cp/
	* module.c (module_state::{read,write}): New.
	(cpms_in::read): Adjust.
	(do_import_module, finish_module): Adjust.

From-SVN: r257259
2018-01-31 19:52:55 +00:00
Nathan Sidwell
a9852d55fd module.c: Move cpm_stream, cpms_in, cpms_out earlier.
gcc/cp/
	* module.c: Move cpm_stream, cpms_in, cpms_out earlier.

From-SVN: r257257
2018-01-31 19:43:19 +00:00
Nathan Sidwell
7ea36a9b68 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.

From-SVN: r257256
2018-01-31 19:28:55 +00:00
Nathan Sidwell
740cc1273e 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.

From-SVN: r257255
2018-01-31 19:04:32 +00:00
Nathan Sidwell
27baa1bfe7 Move global tree init.
gcc/cp/
	* module.c (module_state::lazy_init): New, swallow ...
	(cpm_serial::lazy_globals): ... this.   Adjust callers.

From-SVN: r257251
2018-01-31 18:51:05 +00:00
Nathan Sidwell
107828d16f Reorder class declarations
Reorder class declarations
	gcc/cp/
	* module.c (bytes, bytes_in, bytes_out): Move before module_state.

From-SVN: r257246
2018-01-31 18:09:46 +00:00
Nathan Sidwell
283230aba6 Simplify import interface
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.

From-SVN: r257245
2018-01-31 17:50:44 +00:00
Nathan Sidwell
0dfb816e35 Module_state owns elf and elf owns stream
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.

From-SVN: r257244
2018-01-31 17:02:23 +00:00
Nathan Sidwell
03a88b6d1f Commonize module location
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.

From-SVN: r257241
2018-01-31 16:02:36 +00:00
Nathan Sidwell
b57a84551b Staticize instrumentation
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.

From-SVN: r257239
2018-01-31 15:09:57 +00:00
Nathan Sidwell
dfe4e1f8b6 Separate dumper object
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.

From-SVN: r257236
2018-01-31 14:44:47 +00:00
Nathan Sidwell
e2b29f51f7 Start refactoring cpm_serial
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.

From-SVN: r257231
2018-01-31 12:11:57 +00:00
Nathan Sidwell
152e2388c3 module.c (data::release): Return NULL, update users.
gcc/cp/
	* module.c (data::release): Return NULL, update users.
	(cpms_in::{mod_ix,crc}): Delete, adjust users.

From-SVN: r257201
2018-01-30 19:29:31 +00:00
Nathan Sidwell
c7e8d635cb Reorder source
Reorder source
	gcc/cp/
	* module.c (struct data): First.
	(class elf, elf_in & elf_out): Next.

From-SVN: r257200
2018-01-30 19:10:39 +00:00
Nathan Sidwell
eab54b2ad2 module.c (module_state): Remove name_hash, crc_known, set_crc, set_location.
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.

From-SVN: r257198
2018-01-30 19:01:38 +00:00
Nathan Sidwell
00f9ca5209 Push remaps as they happen.
gcc/cp/
	* module.c (cpms_{in,out}::imports): Write in ascending order.

From-SVN: r257197
2018-01-30 18:33:01 +00:00
Nathan Sidwell
9e69db3cd9 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.

From-SVN: r257196
2018-01-30 18:23:52 +00:00
Nathan Sidwell
77fb822160 module.c (bytes_out::end): Create PROGBITS or STRTAB.
gcc/cp/
	* module.c (bytes_out::end): Create PROGBITS or STRTAB.
	(cpms_out::write): README is a STRTAB.

From-SVN: r257192
2018-01-30 17:21:55 +00:00
Nathan Sidwell
97c9bbe2a8 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.

From-SVN: r257191
2018-01-30 16:51:56 +00:00
Nathan Sidwell
936de93203 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.

From-SVN: r257189
2018-01-30 16:47:14 +00:00
Nathan Sidwell
1188296cbe Config in header
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.

From-SVN: r257187
2018-01-30 14:04:36 +00:00
Nathan Sidwell
9f6a5ff969 Globals in header
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.

From-SVN: r257185
2018-01-30 13:42:47 +00:00
Nathan Sidwell
cb214728d2 Import table is separate section
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.

From-SVN: r257162
2018-01-29 20:56:41 +00:00
Nathan Sidwell
678d4e1076 Header is separate section
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): Repimlement.
	(cpms_in::read, cpms_out::write): Adjust.

From-SVN: r257157
2018-01-29 17:07:14 +00:00
Nathan Sidwell
a6716a1a68 Remove string-literal module names :(
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.

From-SVN: r257153
2018-01-29 15:30:53 +00:00
Nathan Sidwell
5252341951 {read,write}_module become member fns
{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.

From-SVN: r257151
2018-01-29 15:12:49 +00:00
Nathan Sidwell
db6e851467 README section
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.

From-SVN: r257148
2018-01-29 14:34:04 +00:00
Nathan Sidwell
d10c4838b4 Fix layering violation
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.

From-SVN: r257140
2018-01-29 12:01:19 +00:00
Nathan Sidwell
09d2950be3 Simplify buffer filling & drainging
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.

From-SVN: r257106
2018-01-26 20:36:49 +00:00
Nathan Sidwell
0fabc76b1e CRC at section level
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).

From-SVN: r257103
2018-01-26 18:40:22 +00:00
Nathan Sidwell
05143ffa2e BMI is ELF
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.

From-SVN: r257099
2018-01-26 16:25:28 +00:00
Nathan Sidwell
bb667da354 comments
From-SVN: r257026
2018-01-24 17:59:50 +00:00
Nathan Sidwell
41d56717cf Global tree via crc
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.

From-SVN: r257024
2018-01-24 16:40:52 +00:00
Nathan Sidwell
50356907cb module.c (module_state): Replace direct_import with imported & exported flags.
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.

From-SVN: r257015
2018-01-24 12:21:44 +00:00
Nathan Sidwell
d2fb4f2cbb Static bindings not visible in imports
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.

From-SVN: r256992
2018-01-23 17:52:53 +00:00
Nathan Sidwell
8919cd65dc tree.c (ovl_insert): No need to sort by USING_P.
gcc/cp/
	* tree.c (ovl_insert): No need to sort by USING_P.
	(ovl_iterator::reveal_node): Likewise.

From-SVN: r256962
2018-01-22 20:45:19 +00:00
Nathan Sidwell
ae3cc5e68d Broken
From-SVN: r256950
2018-01-22 15:11:02 +00:00
Nathan Sidwell
1ac6195f3b Update bug reporting instructions
Update bug reporting instructions
	gcc/
	* configure.ac (ACX_BUGURL): Set new url
	* diagnostic.c (diagnostic_action_after_output): Special ICE
	instructions.
	* configure: Rebuilt.

From-SVN: r256946
2018-01-22 14:48:51 +00:00
Nathan Sidwell
a15e60ea47 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.

From-SVN: r256901
2018-01-19 21:29:20 +00:00
Nathan Sidwell
a743efc3e8 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.

From-SVN: r256900
2018-01-19 21:07:09 +00:00
Nathan Sidwell
8c8388f02f module.c (cpms_{in.out}::tree_node_special): New, broken out of ...
gcc/cp/
	* module.c (cpms_{in.out}::tree_node_special): New, broken out of ...
	(cpms_{in,out}::tree_node): ... here.  Call them.

From-SVN: r256898
2018-01-19 19:50:57 +00:00
Nathan Sidwell
6c66698e0a Merge trunk r256894.
From-SVN: r256897
2018-01-19 18:52:46 +00:00
Nathan Sidwell
9ccd7ea09b Make-lang.in: Set MODULE_STAMP if non-branch experimental.
gcc/cp/
	* Make-lang.in: Set MODULE_STAMP if non-branch experimental.

From-SVN: r256893
2018-01-19 16:06:49 +00:00
Nathan Sidwell
51067667ab Beginnings of global module correctness
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.

From-SVN: r256892
2018-01-19 16:05:49 +00:00
Nathan Sidwell
b7530dc806 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.

From-SVN: r256843
2018-01-18 11:56:45 +00:00
Nathan Sidwell
c96a4298d2 Merge trunk r256078.
From-SVN: r256080
2018-01-02 16:50:44 +00:00
Nathan Sidwell
9f97937f5f decl.c (grokdeclarator): Set typedef's module/export.
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.

From-SVN: r256078
2018-01-02 16:28:38 +00:00
Nathan Sidwell
d57b5c2ab4 tdef-1_[ab].C: New.
gcc/testsuite/
	* g++.dg/modules/tdef-1_[ab].C: New.

From-SVN: r256077
2018-01-02 15:36:43 +00:00
Nathan Sidwell
deee8a1718 decl.c (grokvardecl): Set exporting.
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.

From-SVN: r255903
2017-12-20 21:09:21 +00:00
Nathan Sidwell
588b1919e1 module.c (module_state::set_name): Don't deal with crc.
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.

From-SVN: r255897
2017-12-20 16:44:12 +00:00
Nathan Sidwell
3c16940325 Merge trunk r255836.
From-SVN: r255838
2017-12-19 20:20:10 +00:00
Nathan Sidwell
595f797500 Merge trunk r255166.
From-SVN: r255168
2017-11-27 14:09:37 +00:00
Nathan Sidwell
ed8512b419 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.

From-SVN: r255060
2017-11-22 14:07:31 +00:00
Nathan Sidwell
ebe5a3f87e Member types
Member types
	gcc/testsuite/
	* g++.dg/modules/nested-2_[ab].C: New

From-SVN: r255015
2017-11-21 16:51:06 +00:00
Nathan Sidwell
5477b59fe3 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

From-SVN: r255014
2017-11-21 16:30:00 +00:00
Nathan Sidwell
37479f2394 Merg trunk r254959.
From-SVN: r254962
2017-11-20 18:02:29 +00:00
Nathan Sidwell
328625fc42 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.

From-SVN: r254959
2017-11-20 16:28:38 +00:00
Nathan Sidwell
34f712760a module.c (cpms_out::tree_node): Fix conv-op identifiers.
gcc/cp/
	* module.c (cpms_out::tree_node): Fix conv-op identifiers.
	gcc/testsuite/
	* g++.dg/modules/convop-1_[ab].C: New.

From-SVN: r254891
2017-11-17 18:38:07 +00:00
Nathan Sidwell
01cabaf626 cp-tree.h (check_constexpr_fundef, [...]): Declare.
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.

From-SVN: r254841
2017-11-16 18:44:23 +00:00
Nathan Sidwell
200d92b986 Merge trunk r254823.
From-SVN: r254824
2017-11-16 15:09:10 +00:00
Nathan Sidwell
a7efb6655a Merge trunk r254819.
From-SVN: r254822
2017-11-16 14:47:33 +00:00
Nathan Sidwell
e87c7f0382 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.

From-SVN: r254399
2017-11-03 20:59:40 +00:00
Nathan Sidwell
bcd2f9cb7b module.c (module_state): Add filename & loc.
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.

From-SVN: r254107
2017-10-26 15:37:20 +00:00
Nathan Sidwell
9643841fc6 cxx-module-wrapper.sh: Cleanups.
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

From-SVN: r254048
2017-10-24 15:38:16 +00:00
Nathan Sidwell
163682c195 Wrapper program
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.

From-SVN: r254023
2017-10-23 19:19:38 +00:00
Nathan Sidwell
10504718bb 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.

From-SVN: r253963
2017-10-20 22:28:56 +00:00
Nathan Sidwell
bdc335392e Early CRC not time stamps.
gcc/cp/
	* decl.c (xref_tag_1): Don't decl_set_module here.
	* 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.

From-SVN: r253962
2017-10-20 22:22:34 +00:00
Nathan Sidwell
579d1325de Merge trunk r253954.
From-SVN: r253957
2017-10-20 19:29:31 +00:00
Nathan Sidwell
f6b53630bd tree.h (MARK_TS_TYPE_NON_COMMON): New.
Templates!
	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.

From-SVN: r253722
2017-10-13 11:56:31 +00:00
Nathan Sidwell
bc312c35ae cp-tree.h (TS_CP_BINDING, [...]): Delete.
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++.

From-SVN: r253689
2017-10-12 17:43:13 +00:00
Nathan Sidwell
3e328935bb Module name can be a string const (-fmodules++)
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.

From-SVN: r253683
2017-10-12 15:32:28 +00:00
Nathan Sidwell
96d02bc2b1 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.

From-SVN: r253675
2017-10-12 11:13:15 +00:00
Nathan Sidwell
b6128ea03d Merge trunk r253654.
From-SVN: r253655
2017-10-11 18:46:53 +00:00
Nathan Sidwell
41dce3cc0f restore acceidentally reverted fragment
From-SVN: r253596
2017-10-10 16:56:51 +00:00
Nathan Sidwell
254f64988f Revert unintented partial commit
From-SVN: r253592
2017-10-10 16:43:04 +00:00
Nathan Sidwell
c91bb177e8 Merge trunk r253585.
From-SVN: r253588
2017-10-10 15:58:00 +00:00
Nathan Sidwell
adc3e2d5a8 c_common_handle_option: Handle fmodules++.
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.

From-SVN: r253180
2017-09-25 23:41:24 +00:00
Nathan Sidwell
1361ebf680 Merge trunk 252831.
From-SVN: r252844
2017-09-15 20:11:07 +00:00
Boris Kolpackov
c9d956f552 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.

From-SVN: r250389
2017-07-20 14:26:42 +00:00
Nathan Sidwell
39dd9e4067 Merge trunk r250272.
From-SVN: r250273
2017-07-17 12:19:29 +00:00
Nathan Sidwell
e8ad501a6d Merge trunk r250159.
From-SVN: r250186
2017-07-13 15:18:27 +00:00
Nathan Sidwell
79f74f570d cp-tree.h (CLASSTYPE_CONSTRUCTORS, [...]): Use lookup_fnfields_slot_nolazy.
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.

From-SVN: r249937
2017-07-03 19:29:52 +00:00
Nathan Sidwell
2476f920c9 class.c (type_has_user_declared_move_constructor, [...]): Delete, replace with:
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.

From-SVN: r249936
2017-07-03 18:47:30 +00:00
Nathan Sidwell
d96559a024 class.c (maybe_warn_about_overly_private_class): Ignore copy/move ctors.
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.

From-SVN: r249932
2017-07-03 17:52:03 +00:00
Nathan Sidwell
42cfd553fe module.c (cpms_{out,in}::start): Don't deal with identifiers here.
gcc/cp/
	* module.c (cpms_{out,in}::start): Don't deal with identifiers
	here.
	(cpms_{out,in}::tree_node): Deal with identifiers specially.

From-SVN: r249921
2017-07-03 14:07:20 +00:00
Nathan Sidwell
c41a54ce0f Merge trunk r249852.
From-SVN: r249910
2017-07-03 13:26:06 +00:00
Nathan Sidwell
9f555fc654 Merge trunk r249835.
From-SVN: r249837
2017-06-30 12:17:47 +00:00
Nathan Sidwell
12bdfdeabc Merge trunk r249794.
From-SVN: r249796
2017-06-29 15:24:04 +00:00
Nathan Sidwell
f240af2a4c cp-tree.h (class_method_index_for_fn): Delete.
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.

From-SVN: r249793
2017-06-29 15:13:27 +00:00
Nathan Sidwell
d114f65c55 Merge trunk r249779.
From-SVN: r249781
2017-06-29 11:43:58 +00:00
Nathan Sidwell
5b548b799b class.c (finish_struct): Use OVL_P.
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.

From-SVN: r249779
2017-06-29 11:08:58 +00:00
Nathan Sidwell
b1fa94f301 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.

From-SVN: r249765
2017-06-28 22:37:15 +00:00
Nathan Sidwell
cd98475286 Merge trunk r249746.
From-SVN: r249747
2017-06-28 16:38:09 +00:00
Nathan Sidwell
4d6547528c cp-tree.h (SET_CLASS_TYPE_P): Use RECORD_OR_UNION_CHECK.
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.

From-SVN: r249746
2017-06-28 16:33:11 +00:00
Nathan Sidwell
411ea20f1d 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

From-SVN: r249705
2017-06-27 18:16:07 +00:00
Nathan Sidwell
11692a542d 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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/c-family/c-common.h
M    gcc/c-family/c-common.c
M    gcc/c/c-decl.c
M    gcc/c/c-lang.h
M    gcc/cp/ptree.c
M    gcc/cp/cp-tree.h
M    gcc/cp/name-lookup.c
M    gcc/cp/name-lookup.h
M    gcc/cp/module.c
M    gcc/cp/decl.c
M    gcc/cp/class.c
M    gcc/cp/search.c

From-SVN: r249666
2017-06-26 19:52:37 +00:00
Nathan Sidwell
b42ddf51d9 Start moving class name lookup around
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.
((--This line, and those below, will be ignored--

M    gcc/cp/name-lookup.h
M    gcc/cp/class.c
M    gcc/cp/search.c
M    gcc/cp/cp-tree.h
M    gcc/cp/name-lookup.c
M    ChangeLog.modules

From-SVN: r249661
2017-06-26 17:42:46 +00:00
Nathan Sidwell
a9cf7782f6 Merge trunk r249657.
From-SVN: r249658
2017-06-26 16:51:14 +00:00
Nathan Sidwell
5eb957a398 cp-tree.h (lang_decl_fn): Remove assignment_operator_p field.
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.

From-SVN: r249654
2017-06-26 14:46:43 +00:00
Nathan Sidwell
9491b1d747 delete
From-SVN: r249653
2017-06-26 14:44:54 +00:00
Nathan Sidwell
c966f92798 Makefile.in (MODULE_STAMP): Set here
gcc/
	* Makefile.in (MODULE_STAMP): Set here
	(REVISION, REVISION_c): Override.
	gcc/cp/
	* Make-lang.in (MODULE_STAMP): Not here.

From-SVN: r249652
2017-06-26 14:44:27 +00:00
Nathan Sidwell
1a3e85ce84 missed changelog
From-SVN: r249646
2017-06-26 12:32:10 +00:00
Nathan Sidwell
f8ac9f9c33 cp-tree.h (DECL_COMPLETE_CONSTRUCTOR_P): Directly compare identifier.
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.

From-SVN: r249587
2017-06-23 12:29:19 +00:00
Nathan Sidwell
3dd962a721 Merge trunk r249572.
From-SVN: r249573
2017-06-22 19:02:58 +00:00
Nathan Sidwell
1f0a82ed14 Reorder IDENTIFIER flags
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.

From-SVN: r249570
2017-06-22 17:47:39 +00:00
Nathan Sidwell
ef36381f21 Merge trunk r249464.
From-SVN: r249465
2017-06-21 17:50:30 +00:00
Nathan Sidwell
ece30ddd03 c-ada-spec.c (decl_sloc): Ignore builtin fields.
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.

From-SVN: r249464
2017-06-21 16:54:25 +00:00
Nathan Sidwell
cadc8fe889 Merge trunk r249268.
From-SVN: r249269
2017-06-16 15:55:37 +00:00
Nathan Sidwell
ec1b8da11f Merge trunk r249217.
libcc1/
	* libcp1plugin.c (supplement_binding): Don't call
	maybe_remove_implicit_alias.

From-SVN: r249218
2017-06-15 12:31:24 +00:00
Nathan Sidwell
1bc969cd7a 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.

From-SVN: r249216
2017-06-15 12:02:31 +00:00
Nathan Sidwell
f235906370 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.

From-SVN: r249205
2017-06-14 19:36:49 +00:00
Nathan Sidwell
8f78d25e6c Merge trunk r249076.
From-SVN: r249118
2017-06-12 11:17:23 +00:00
Nathan Sidwell
5d5fd93e59 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.

From-SVN: r249076
2017-06-09 19:36:55 +00:00
Nathan Sidwell
a48e9755dc Typeinfo streaming
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.

From-SVN: r249065
2017-06-09 17:08:40 +00:00
Nathan Sidwell
5745e25416 module.c (cpms_in::read_item, [...]): More diagnostics.
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.

From-SVN: r249021
2017-06-08 15:16:01 +00:00
Nathan Sidwell
1ae7e42233 module.c: Implement dump printf.
gcc/cp/
	* module.c: Implement dump printf.

From-SVN: r249011
2017-06-08 12:50:53 +00:00
Nathan Sidwell
3b331161cc Merge trunk r248972.
From-SVN: r248973
2017-06-07 14:18:47 +00:00
Nathan Sidwell
ffc3321c3e module.c (cpms_{out,in}::core_vals): Stream block vars & abstract origin.
gcc/cp/
	* module.c (cpms_{out,in}::core_vals): Stream block vars &
	abstract origin.

From-SVN: r248972
2017-06-07 13:48:40 +00:00
Nathan Sidwell
47f0631554 Inline ctors/dtors
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.

From-SVN: r248937
2017-06-06 22:31:08 +00:00
Nathan Sidwell
6eb646424c Member functions
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.

From-SVN: r248933
2017-06-06 20:47:22 +00:00
Nathan Sidwell
7bfad527f7 More PoD struct
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.

From-SVN: r248928
2017-06-06 17:58:00 +00:00
Nathan Sidwell
66d5fe8a6b More Pod struct
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.

From-SVN: r248882
2017-06-05 17:31:26 +00:00
Nathan Sidwell
7fcbdccad8 Pod struct
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.

From-SVN: r248840
2017-06-02 16:52:13 +00:00
Nathan Sidwell
310ab7528f Merge r248828.
From-SVN: r248829
2017-06-02 14:16:31 +00:00
Nathan Sidwell
dc311b5ba5 modules.c (cpms_out::core_vals, [...]): Don't stream structure fields etc.
gcc/cp/
	* modules.c (cpms_out::core_vals, cpms_in::core_vals): Don't
	stream structure fields etc.

From-SVN: r248828
2017-06-02 13:29:20 +00:00
Nathan Sidwell
8038f6e12a 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.

From-SVN: r248797
2017-06-01 17:40:46 +00:00
Nathan Sidwell
4167fe4f2d * module.c: Instrumentation.
From-SVN: r248761
2017-05-31 19:14:48 +00:00
Nathan Sidwell
0bd22cf3aa Merge trunk r248748.
From-SVN: r248750
2017-05-31 17:40:32 +00:00
Nathan Sidwell
e5ca94a1ce Merge trunk r248694.
From-SVN: r248697
2017-05-30 19:46:34 +00:00
Nathan Sidwell
1361d1c421 Merge trunk r248694.
From-SVN: r248696
2017-05-30 19:38:29 +00:00
Nathan Sidwell
89e27a4737 module.c (cpms_out::tag_binding, [...]): Mark type too.
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.

From-SVN: r248690
2017-05-30 17:13:53 +00:00
Nathan Sidwell
25c9ee3443 cp-tree.h (lang_decl_base): Lose decomposition_p flag.
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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/decl.c
M    gcc/cp/cp-tree.h
M    gcc/cp/module.c
M    gcc/cp/lex.c

From-SVN: r248689
2017-05-30 15:41:37 +00:00
Nathan Sidwell
e751f7a436 REVISION: Add file.
gcc/
	* REVISION: Add file.
	gcc/c-family/
	* c-cppbuiltin.c (c_cpp_builtins): Update __cpp_modules=201704.

From-SVN: r248682
2017-05-30 11:42:46 +00:00
Nathan Sidwell
70d964ea98 Merge trunk r248578.
From-SVN: r248579
2017-05-29 20:10:47 +00:00
Nathan Sidwell
e624170cb6 Merge trunk r248574.
From-SVN: r248575
2017-05-29 15:35:32 +00:00
Nathan Sidwell
9ee9e034a6 Merge trunk r248571.
From-SVN: r248572
2017-05-29 13:32:27 +00:00
Nathan Sidwell
1de0e4e2ef cp-tree.h: Comment cleanup.
gcc/cp/
	* cp-tree.h: Comment cleanup.
	* name-lookup.c: Likewise.
	* tree.c: Likewise.

From-SVN: r248516
2017-05-26 14:51:38 +00:00
Nathan Sidwell
1ab3c0972e Merge trunk 248485.
gcc/cp/
	* lex.c (maybe_retrofit_lang_decl): Add sel parm.

From-SVN: r248509
2017-05-26 13:09:37 +00:00
Nathan Sidwell
d5c1fa2f56 cp-tree.h (ovl_iterator): Make unduplicatable.
gcc/cp/
	* cp-tree.h (ovl_iterator): Make unduplicatable.
	(ovl_iterator::pop): New.
	(lkp_iterator::operator++): Adjust.

From-SVN: r248459
2017-05-25 14:27:05 +00:00
Nathan Sidwell
cdf1ecb779 Merge trunk r248454.
From-SVN: r248455
2017-05-25 11:09:12 +00:00
Nathan Sidwell
e9425553af Merge trunk r248436.
From-SVN: r248453
2017-05-25 10:59:02 +00:00
Nathan Sidwell
9ec17a4e43 name-lookup.c (lookup_name): Reimplement state preservation and restoration.
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.

From-SVN: r248436
2017-05-24 23:21:25 +00:00
Nathan Sidwell
f9d60b967b Merge trunk r248406.
From-SVN: r248409
2017-05-24 12:33:52 +00:00
Nathan Sidwell
945dff4cfe call.c (build_operator_new_call, [...]): Open code ADL lookup.
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.

From-SVN: r248405
2017-05-24 11:25:52 +00:00
Nathan Sidwell
46050cb1d9 Merge trunk r248389.
From-SVN: r248391
2017-05-23 23:02:53 +00:00
Nathan Sidwell
9c1f94d4d7 name-lookup.c (name_lookup::name_lookup): Lose F parm.
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.

From-SVN: r248389
2017-05-23 21:39:42 +00:00
Nathan Sidwell
39745f2fc7 Merge trunk r248377.
From-SVN: r248378
2017-05-23 17:29:42 +00:00
Nathan Sidwell
fb0ad78e68 Merge trunk r248365.
From-SVN: r248367
2017-05-23 14:12:54 +00:00
Nathan Sidwell
452e24013c 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.

From-SVN: r248340
2017-05-22 16:37:30 +00:00
Nathan Sidwell
9cf247f54b config-lang.in: Update.
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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/name-lookup.c
M    gcc/cp/config-lang.in

From-SVN: r248338
2017-05-22 16:02:39 +00:00
Nathan Sidwell
e4fc10e1c6 Merge trunk r248329.
From-SVN: r248331
2017-05-22 12:15:52 +00:00
Nathan Sidwell
e5aad7415c re PR c++/80830 (ICE in tsubst_copy, at cp/pt.c:14569)
gcc/testsuite/
	PR c++/80830
	* g++.dg/lookup/friend20.C: New testcase.

From-SVN: r248329
2017-05-22 12:05:41 +00:00
Nathan Sidwell
c0d77de7f4 Merge trunk r248295.
From-SVN: r248296
2017-05-19 17:29:54 +00:00
Nathan Sidwell
c043f3de66 cp-tree.h: Misc cleanups.
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.

From-SVN: r248292
2017-05-19 15:37:34 +00:00
Nathan Sidwell
4605ee6961 Merge trunk r248285.
From-SVN: r248286
2017-05-19 14:28:46 +00:00
Nathan Sidwell
4555531fc1 Merge trunk r248271.
From-SVN: r248272
2017-05-19 13:22:09 +00:00
Nathan Sidwell
1fd80386f3 context.h (context::set_passes): New.
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.

From-SVN: r248203
2017-05-18 14:12:48 +00:00
Nathan Sidwell
ea28945915 cp-tree.h (lookup_add, [...]): Swap args.
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.
(--This line, and those below, will be ignored--

M    gcc/cp/tree.c
M    gcc/cp/cp-tree.h
M    gcc/cp/pt.c
M    gcc/cp/name-lookup.c
M    ChangeLog.modules

From-SVN: r248196
2017-05-18 12:32:24 +00:00
Nathan Sidwell
abbf6a30a9 Merge trunk r248192.
From-SVN: r248194
2017-05-18 11:10:48 +00:00
Nathan Sidwell
a9d9f8c660 Merge trunk r248159.
From-SVN: r248162
2017-05-17 17:02:19 +00:00
Nathan Sidwell
384fca9cec Merge trunk r248151.
* cp-tree.h (ovl_insert): Swap first two args.  Update all uses.

From-SVN: r248154
2017-05-17 14:02:12 +00:00
Nathan Sidwell
28731428a1 Merge trunk r248144.
From-SVN: r248145
2017-05-17 11:26:55 +00:00
Nathan Sidwell
c42dff058d Merge trunk r248126.
From-SVN: r248127
2017-05-16 19:41:37 +00:00
Nathan Sidwell
5a933bc12f Merge trunk r248121.
From-SVN: r248126
2017-05-16 19:33:55 +00:00
Nathan Sidwell
69bdfcb892 Merge trunk r248116.
From-SVN: r248118
2017-05-16 16:01:13 +00:00
Nathan Sidwell
d3b7edd474 Merge trunk r248109.
From-SVN: r248116
2017-05-16 15:35:32 +00:00
Nathan Sidwell
530121e5b0 Merge trunk r248059.
From-SVN: r248061
2017-05-15 13:27:06 +00:00
Nathan Sidwell
ebecdad087 module.c (cpms_in::tag_definition): Robustify.
gcc/cp/
	* module.c (cpms_in::tag_definition): Robustify.

From-SVN: r248059
2017-05-15 12:26:34 +00:00
Nathan Sidwell
88023d1c88 module.c (cpms_{in,out}): Rename {read,write}_tree to tree_node.
gcc/cp/
	* module.c (cpms_{in,out}): Rename {read,write}_tree to tree_node.

From-SVN: r247990
2017-05-12 18:46:52 +00:00
Nathan Sidwell
977cb87fce module.c (cpms_{in,out}): Rename read/write fns.
gcc/cp/
	* module.c (cpms_{in,out}): Rename read/write fns.

From-SVN: r247989
2017-05-12 18:44:30 +00:00
Nathan Sidwell
1ab346a40b More inline bodies
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.

From-SVN: r247987
2017-05-12 18:28:02 +00:00
Nathan Sidwell
96beb6a27e Inline function bodies
Inline function bodies
	gcc/cp/
	* module.c (cpms_out::write_tree, cpms_in::read_tree): Read/write
	exprs
	(cpms_in::tag_definition): Insert inline function.
	gcc/testsuite/
	* g++.dg/modules/fn-inline-1_[ab].C: New.

From-SVN: r247983
2017-05-12 17:05:57 +00:00
Nathan Sidwell
64f4de7946 Merge trunk r247968.
From-SVN: r247982
2017-05-12 17:05:27 +00:00
Nathan Sidwell
f66a048a5b module.c (cpm_reader::read_tree): Change interface, adjust callers.
gcc/cp/
	* module.c (cpm_reader::read_tree): Change interface, adjust
	callers.

From-SVN: r247968
2017-05-12 12:53:31 +00:00
Nathan Sidwell
0db20e1273 module.c (cpm_writer): Instrument bool distribution.
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.

From-SVN: r247965
2017-05-12 11:56:29 +00:00
Nathan Sidwell
7c50ce43b2 Merge trunk r247911.
From-SVN: r247912
2017-05-11 15:29:58 +00:00
Nathan Sidwell
9ea9003325 Merge trunk r247864.
From-SVN: r247865
2017-05-10 21:43:22 +00:00
Nathan Sidwell
580f14ba91 Merge trunk r247834.
From-SVN: r247846
2017-05-10 16:56:08 +00:00
Nathan Sidwell
de6dc88a58 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.

From-SVN: r247811
2017-05-09 19:36:13 +00:00
Nathan Sidwell
265a96c8c4 module.c (cpms_in::finish): Merge global decls.
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.

From-SVN: r247809
2017-05-09 17:43:39 +00:00
Nathan Sidwell
9fb501c112 tree.h (TREE_CHECK6, [...]): Delete.
gcc/
	* tree.h (TREE_CHECK6, tree_check6): Delete.

From-SVN: r247802
2017-05-09 15:44:18 +00:00
Nathan Sidwell
e8badd9900 Merge trunk r247787.
gcc/cp/
	* tree.c (type_has_nontrivial_copy_init): Use ovl_iterator.

From-SVN: r247788
2017-05-09 11:51:51 +00:00
Nathan Sidwell
f929e308a3 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.

From-SVN: r247787
2017-05-09 11:35:27 +00:00
Nathan Sidwell
f19e591a7d Merge trunk r247749.
From-SVN: r247751
2017-05-08 17:44:58 +00:00
Nathan Sidwell
4bcf7e8331 Implement 'export module foo;'
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.

From-SVN: r247749
2017-05-08 17:26:06 +00:00
Nathan Sidwell
832e0e7e4e Implement DR2061
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.

From-SVN: r247740
2017-05-08 13:56:14 +00:00
Nathan Sidwell
d3e3dd49ca cp-tree.h, [...]: Rename ovl2_iterator to lkp_iterator.
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.

From-SVN: r247736
2017-05-08 11:11:28 +00:00
Nathan Sidwell
318f1d4246 name-lookup.h (push_namespace): Return int.
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.

From-SVN: r247735
2017-05-08 11:07:06 +00:00
Nathan Sidwell
924e0eb5d9 Merge trunk r247654.
From-SVN: r247656
2017-05-05 20:14:29 +00:00
Nathan Sidwell
402cf7223e Merge trunk r247646.
From-SVN: r247651
2017-05-05 17:46:35 +00:00
Nathan Sidwell
48423d1e63 Merge trunk r247636.
From-SVN: r247637
2017-05-05 15:04:35 +00:00
Nathan Sidwell
1b6eaa318a Indirect import lookup by tagging
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.

From-SVN: r247636
2017-05-05 14:50:44 +00:00
Nathan Sidwell
8b99b4e2a2 Merge trunk r247612.
gcc/testsuite/
	* g++.dg/lookup/using17.C: Adjust error message.

From-SVN: r247616
2017-05-04 18:54:54 +00:00
Nathan Sidwell
046c9c5bd9 Overload bindings
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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/name-lookup.c
M    gcc/cp/name-lookup.h
M    gcc/cp/module.c
M    gcc/testsuite/g++.dg/modules/mod-impl-1_a.C
M    gcc/testsuite/g++.dg/modules/mod-impl-1_b.C
M    gcc/testsuite/g++.dg/modules/mod-impl-1_c.C
M    gcc/testsuite/g++.dg/modules/mod-impl-1_d.C

From-SVN: r247611
2017-05-04 17:59:55 +00:00
Nathan Sidwell
f3917f0de3 Merge trunk r247593.
From-SVN: r247595
2017-05-04 13:05:14 +00:00
Nathan Sidwell
e60010ec61 cp-tree.h (LOOKUP_SEEN_P): Map to TREE_VISITED.
gcc/cp/
	* cp-tree.h (LOOKUP_SEEN_P): Map to TREE_VISITED.
	(LOOKUP_FOUND_P, OVL_LOOKUP_P): Move to lang_flag_4

From-SVN: r247593
2017-05-04 12:44:40 +00:00
Nathan Sidwell
92a0efd3d3 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.

From-SVN: r247568
2017-05-03 20:39:41 +00:00
Nathan Sidwell
4ec0aa9a73 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.
((--This line, and those below, will be ignored--

M    gcc/cp/name-lookup.c
M    gcc/cp/module.c
M    gcc/cp/parser.c
M    gcc/cp/cp-tree.h
M    gcc/testsuite/g++.dg/modules/mod-sym-1.C
M    gcc/testsuite/g++.dg/modules/mod-sym-2.C
M    gcc/testsuite/g++.dg/modules/mod-sym-3.C
M    gcc/testsuite/g++.dg/modules/mod-impl-1_a.C
M    ChangeLog.modules

From-SVN: r247567
2017-05-03 20:30:40 +00:00
Nathan Sidwell
395d5f4405 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.

From-SVN: r247565
2017-05-03 19:29:12 +00:00
Nathan Sidwell
bb051f869d Merge trunk r247550.
From-SVN: r247551
2017-05-03 15:21:21 +00:00
Nathan Sidwell
92e6d5994e 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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/cp-tree.h
M    gcc/cp/name-lookup.c
M    gcc/cp/module.c
M    gcc/cp/tree.c
M    gcc/cp/ptree.c

From-SVN: r247549
2017-05-03 14:02:16 +00:00
Nathan Sidwell
c2fb763c13 cp-tree.h (saved_scope): Add this_module.
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.

From-SVN: r247511
2017-05-02 16:06:00 +00:00
Nathan Sidwell
b47d070228 invoke.texi (-fdump-front-end): Document.
gcc/doc/
	* invoke.texi (-fdump-front-end): Document.

From-SVN: r247500
2017-05-02 14:52:43 +00:00
Nathan Sidwell
3142930726 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 (write_module_namespace): Declare.
	* name-lookup.c (write_module_namespace): New.

From-SVN: r247499
2017-05-02 14:42:05 +00:00
Nathan Sidwell
f8a6f2f19b Read/write direct namespace bindings
Read/write direct namespace bindings
	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.

From-SVN: r247496
2017-05-02 12:45:48 +00:00
Nathan Sidwell
fa5197daa4 augment comment
From-SVN: r247454
2017-05-01 23:35:22 +00:00
Nathan Sidwell
0825e35b2a tree.c (type_hash_default): Adjust ARRAY_TYPE hash.
gcc/
	* tree.c (type_hash_default): Adjust ARRAY_TYPE hash.

From-SVN: r247451
2017-05-01 23:20:47 +00:00
Nathan Sidwell
1e7d43535f Import timestamp & crc
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.

From-SVN: r247442
2017-05-01 17:48:35 +00:00
Nathan Sidwell
ca120352cb 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.

From-SVN: r247437
2017-05-01 13:01:54 +00:00
Nathan Sidwell
f6d09c360e cp-tree.h (struct_lang_base): Add module_index.
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.

From-SVN: r247396
2017-04-28 18:59:12 +00:00
Nathan Sidwell
b3d14ad561 Module indices and separated import/export info
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.
(--This line, and those below, will be ignored--

M    gcc/cp/module.c
M    gcc/cp/parser.c
M    gcc/cp/cp-tree.h
M    gcc/testsuite/g++.dg/modules/mod-decl-5_b.C
M    ChangeLog.modules

From-SVN: r247392
2017-04-28 14:56:52 +00:00
Nathan Sidwell
98c9c55edf Kill rt_import popping madness
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.

From-SVN: r247348
2017-04-27 17:33:18 +00:00
Nathan Sidwell
22e8865ec0 Kill walk_namespaces
Kill walk_namespaces
	gcc/cp/
	* cp-tree.h (walk_namespaces): Delete.
	* decl.c (walk_namespaces_r, walk_namespaces): Delete.

From-SVN: r247345
2017-04-27 15:04:19 +00:00
Nathan Sidwell
f0b7c7bbaf Rework module namespace walking
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.

From-SVN: r247344
2017-04-27 15:02:11 +00:00
Nathan Sidwell
e9187e4200 Refix unhidden extern C Revert 2017-04-26 extern_c_slot patch.
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.

From-SVN: r247336
2017-04-27 13:44:32 +00:00
Nathan Sidwell
8d7efa7ef2 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.

From-SVN: r247325
2017-04-27 12:16:23 +00:00
Nathan Sidwell
2102e57e2d name-lookup.c (extern_c_slot): New.
gcc/cp/
	* name-lookup.c (extern_c_slot): New.
	(check_extern_c_conflict): Use it.
	(unhidden_extern_c): New.
	(do_puhdecl): Call it.

From-SVN: r247280
2017-04-26 16:44:33 +00:00
Nathan Sidwell
d6768188fa 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.

From-SVN: r247278
2017-04-26 14:09:56 +00:00
Nathan Sidwell
fffa8f684c name-lookup.c (find_namespace_binding): Return slot pointer.
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.

From-SVN: r247255
2017-04-25 16:15:41 +00:00
Nathan Sidwell
3476928127 name-lookup.c (extern_c_fns): New hash.
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.

From-SVN: r247245
2017-04-25 14:30:46 +00:00
Nathan Sidwell
a323be85cc Namespace stat hack via special overload
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.
((--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/name-lookup.c

From-SVN: r247185
2017-04-25 11:02:34 +00:00
Nathan Sidwell
f939909286 name-lookup.c (add_local_decl): Delete.
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.

From-SVN: r247112
2017-04-24 20:35:40 +00:00
Nathan Sidwell
7da6084ad9 name-lookup.c (do_nonmember_using_decl): Pass in pointers to value and type nodes.
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.

From-SVN: r247106
2017-04-24 17:03:09 +00:00
Nathan Sidwell
7b72950993 name-lookup.c (diagnose_name_conflict): Check decl context.
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,

From-SVN: r247100
2017-04-24 14:16:34 +00:00
Nathan Sidwell
534f7d8bbc cp-tree.h (SET_IDENTIFIER_GLOBAL_VALUE): Update.
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.

From-SVN: r247096
2017-04-24 13:00:20 +00:00
Nathan Sidwell
6813379fbf cp-tree.h (ovl_lookup_keep, [...]): Rename to ...
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.

From-SVN: r247013
2017-04-20 06:55:21 +00:00
Nathan Sidwell
853ad69d56 Keep overloads correctly ordered
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.

From-SVN: r247012
2017-04-20 06:33:21 +00:00
Nathan Sidwell
761e550abc 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.

From-SVN: r246931
2017-04-14 21:02:39 +00:00
Nathan Sidwell
810dfd85ff backport: name-lookup.c (add_namespace_decl): Delete.
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.

From-SVN: r246928
2017-04-14 11:44:27 +00:00
Nathan Sidwell
5dbb7fbad9 lex.c (unqualified_name_lookup_error): Use pushdecl.
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.

From-SVN: r246920
2017-04-13 20:30:56 +00:00
Nathan Sidwell
4c5bc6f9fc Unify binding push part 7
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.

From-SVN: r246916
2017-04-13 18:58:46 +00:00
Nathan Sidwell
71b63835b7 Cleanup pushdecl interface
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.

From-SVN: r246915
2017-04-13 18:17:59 +00:00
Nathan Sidwell
377d8946dd Some cleanups
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.

From-SVN: r246913
2017-04-13 17:37:50 +00:00
Nathan Sidwell
0dc1f35119 Unifying binding push part 5
Unifying binding push part 5
	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.

From-SVN: r246912
2017-04-13 17:17:17 +00:00
Nathan Sidwell
23bc933bdf Unifying binding push part 5
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.

From-SVN: r246905
2017-04-13 14:17:44 +00:00
Nathan Sidwell
6f5b99c355 Unifying binding push part 4
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.

From-SVN: r246895
2017-04-12 19:26:49 +00:00
Nathan Sidwell
327cbef4e7 Separating namespace bindings part 18
Separating namespace bindings part 18
	gcc/cp/
	* name-lookup.c (create_local_binding) New.
	(do_local_push_overload): Turn into ...
	(local_push_binding): ... this.
	(do_pushdecl): Adjust.

From-SVN: r246878
2017-04-12 15:39:09 +00:00
Nathan Sidwell
4cc4d77d7d Separating namespace bindings part 17
Separating namespace bindings part 17
	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

From-SVN: r246872
2017-04-12 13:23:13 +00:00
Nathan Sidwell
17b2e5f7be Separating namespace bindings part 16
Separating namespace bindings part 16
	gcc/cp/
	* name-lookup.c (do_pusdecl): Skip using decls.  Retain namespace.

From-SVN: r246870
2017-04-12 11:31:10 +00:00
Nathan Sidwell
56c5e38777 Separating namespace bindings part 15
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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/testsuite/g++.dg/parse/ctor9.C
A    gcc/testsuite/g++.dg/lookup/extern-redecl1.C
M    gcc/cp/cp-tree.h
M    gcc/cp/name-lookup.c
M    gcc/cp/lex.c
M    gcc/cp/name-lookup.h

From-SVN: r246852
2017-04-11 17:54:10 +00:00
Nathan Sidwell
1f7da887cf Separating namespace bindings part 14
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.

From-SVN: r246841
2017-04-11 14:36:55 +00:00
Nathan Sidwell
4f3bce8e57 Separating namespace bindings part 12
Separating namespace bindings part 12
	gcc/cp/
	* name-lookup.c (do_pushdecl): Move overload pushing next to
	non-overload pushing.

From-SVN: r246836
2017-04-11 11:17:29 +00:00
Nathan Sidwell
c48a58d497 Separating namespace bindings part 11
Separating namespace bindings part 11
	gcc/cp/
	* name-lookup.c (check_local_shadow): Move lookup code to here ...
	(do_pushdecl): ... from here.

From-SVN: r246822
2017-04-10 20:24:44 +00:00
Nathan Sidwell
be1946ecc8 Separating namespace bindings part 10
Separating namespace bindings part 10
	gcc/cp/
	* name-lookup.c (do_pushdecl): Reorder & delete more obsolete code.

From-SVN: r246821
2017-04-10 20:02:22 +00:00
Nathan Sidwell
5b6b46ea07 Separating namespace bindings part 9
Separating namespace bindings part 9
	gcc/cp/
	* name-lookup.c (do_pushdecl): Delete a tonne of obsolete code.

From-SVN: r246815
2017-04-10 18:00:54 +00:00
Nathan Sidwell
62132f560d Fix bogus scope handling
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.

From-SVN: r246771
2017-04-07 17:57:25 +00:00
Nathan Sidwell
bc22b5b765 Separating namespace bindings part 8
Separating namespace bindings part 8
	gcc/cp/
	* name-lookup.c (do_pushdecl): Kill obsolete C-era code!

From-SVN: r246740
2017-04-06 18:55:26 +00:00
Nathan Sidwell
5a451db8ed Separating namespace bindings part 6
Separating namespace bindings part 6
	gcc/cp/
	* name-lookup.c (check_local_shadow, set_decl_context_in_fn):
	Break
	out and simplify from ...
	(do_pushdecl): ... here.  Call them.

From-SVN: r246736
2017-04-06 17:16:41 +00:00
Nathan Sidwell
e66251710d Separating namespace bindings part 6
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.

From-SVN: r246727
2017-04-06 12:19:24 +00:00
Nathan Sidwell
a44a61a8c3 Separating namespace bindings part 5
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.

From-SVN: r246718
2017-04-05 19:11:34 +00:00
Nathan Sidwell
cb9e3b43ff Separating namespace bindings part 4
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.

From-SVN: r246709
2017-04-05 15:39:48 +00:00
Nathan Sidwell
a08ab803c9 Separating namespace bindings part 3
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.

From-SVN: r246705
2017-04-05 14:47:32 +00:00
Nathan Sidwell
20436d4091 Separating namespace bindings part 2
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.

From-SVN: r246704
2017-04-05 14:26:23 +00:00
Nathan Sidwell
4f4e53d0dd name-lookup.h (get_global_value_if_present) is_typename_at_global_scope): Delete.
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.

From-SVN: r246692
2017-04-04 18:56:47 +00:00
Nathan Sidwell
efc9fd75f9 cp-tree.h (CPTI_INIT_LIST_IDENTIFIER, [...]): New.
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.

From-SVN: r246687
2017-04-04 17:53:59 +00:00
Nathan Sidwell
3864609ddb Separating namespace bindings part 1
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.

From-SVN: r246685
2017-04-04 17:24:32 +00:00
Nathan Sidwell
1395cb732a 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.

From-SVN: r246649
2017-04-03 15:39:39 +00:00
Nathan Sidwell
6e529924ba 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.
((--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/decl.c
M    gcc/cp/tree.c
M    gcc/cp/cp-tree.h
M    gcc/cp/name-lookup.c
M    gcc/cp/name-lookup.h

From-SVN: r246647
2017-04-03 11:23:16 +00:00
Nathan Sidwell
811cb44e3e Reimplement unqualified namespace lookup
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.
((--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/name-lookup.c
A    gcc/testsuite/g++.dg/lookup/lambda1.C

From-SVN: r246623
2017-03-31 18:49:12 +00:00
Nathan Sidwell
49e67a014c name-lookup.c (name_lookup::scopes): Make static.
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.

From-SVN: r246615
2017-03-31 12:49:23 +00:00
Nathan Sidwell
be149ec9e5 dump.c (cp_dump_tree): Allow nested overloads.
gcc/cp/
	* dump.c (cp_dump_tree): Allow nested overloads.

From-SVN: r246593
2017-03-30 17:57:42 +00:00
Nathan Sidwell
66596af6a4 Add SCOPE_DEPTH
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.

From-SVN: r246592
2017-03-30 17:57:17 +00:00
Nathan Sidwell
ab7d9531a8 Reimplement qualified namespace lookup
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.

From-SVN: r246591
2017-03-30 15:25:26 +00:00
Nathan Sidwell
1c074986ac pt.c (determine_specialization): Use 2-d iterator
gcc/cp/
	* pt.c (determine_specialization): Use 2-d iterator

From-SVN: r246590
2017-03-30 15:24:43 +00:00
Nathan Sidwell
8627712c3d cp-tree.h (LOOKUP_MARKED_P, [...]): Rename to ...
gcc/cp/
	* cp-tree.h (LOOKUP_MARKED_P, RECORD_MARKED_P): Rename to ...
	(LOOKUP_SEEN_P, LOOKUP_FOUND_P): ... here.  Update everywhere.

From-SVN: r246571
2017-03-29 14:44:48 +00:00
Nathan Sidwell
39aad24534 name-lookup.c (arg_assoc::assoc_expr): Refactor.
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.

From-SVN: r246568
2017-03-29 12:57:02 +00:00
Nathan Sidwell
1278c39cde Kill DECL_NAMESPACE_ASSOCATIONS
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.

From-SVN: r246565
2017-03-29 12:01:27 +00:00
Nathan Sidwell
764954a3eb lambda.c (maybe_add_lambda_conv_op): Use namespace_bindings_p.
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.

From-SVN: r246564
2017-03-29 10:36:40 +00:00
Nathan Sidwell
3af6140de8 name-lookup.h (finish_namespace_using_directive): Rename from ...
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.

From-SVN: r246562
2017-03-29 10:21:12 +00:00
Nathan Sidwell
a4aea4c7c6 Cleanup pushdecl_top_level
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.
(--This line, and those below, will be ignored--

M    gcc/cp/name-lookup.h
M    gcc/cp/pt.c
M    gcc/cp/cp-tree.h
M    gcc/cp/decl.c
M    gcc/cp/rtti.c
M    gcc/cp/name-lookup.c
M    gcc/cp/decl2.c
M    ChangeLog.modules

From-SVN: r246552
2017-03-28 19:16:21 +00:00
Nathan Sidwell
4203e66ad5 Cleanup pushdecl
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.

From-SVN: r246551
2017-03-28 18:47:14 +00:00
Nathan Sidwell
c47cda83ac Cleanup namespace push/pop part 2
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.

From-SVN: r246544
2017-03-28 16:52:42 +00:00
Nathan Sidwell
88434e14d1 Cleanup namespace push/pop
Cleanup namespace push/pop
	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.
((((--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/name-lookup.h
M    gcc/cp/cp-tree.h
M    gcc/cp/decl.c
M    gcc/cp/name-lookup.c

From-SVN: r246539
2017-03-28 15:24:20 +00:00
Nathan Sidwell
cddc4035a9 Cleanup using-directives
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.
(--This line, and those below, will be ignored--

M    gcc/testsuite/g++.dg/lookup/strong-using-6.C
M    gcc/cp/tree.c
M    gcc/cp/cp-tree.h
M    gcc/cp/pt.c
M    gcc/cp/name-lookup.c
M    gcc/cp/name-lookup.h
M    gcc/cp/parser.c
M    ChangeLog.modules

From-SVN: r246535
2017-03-28 14:17:06 +00:00
Nathan Sidwell
d5716a7681 Kill strong using
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.

From-SVN: r246531
2017-03-28 11:53:51 +00:00
Nathan Sidwell
2d2dab31cd Simplify ADL part 2
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.

From-SVN: r246501
2017-03-27 14:01:01 +00:00
Nathan Sidwell
9d61795051 tree.h (TREE_CHECK6): New.
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.

From-SVN: r246466
2017-03-24 17:46:11 +00:00
Nathan Sidwell
51565f2112 cp-tree.h (ovl2_iterator::operator++): Tweak.
gcc/cp/
	* cp-tree.h (ovl2_iterator::operator++): Tweak.

From-SVN: r246465
2017-03-24 16:58:44 +00:00
Nathan Sidwell
0b4796777d Tweak
From-SVN: r246464
2017-03-24 16:46:15 +00:00
Nathan Sidwell
08fa8ee703 Simplify ADL part 1
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.

From-SVN: r246463
2017-03-24 16:45:05 +00:00
Nathan Sidwell
d74e0ac93d Fixup transient_p bug
Fixup transient_p bug
	gcc/cp/
	* tree.c (ovl_add): Set TRANSIENT_P here.
	(ovl_add_transient): Not here.

From-SVN: r246432
2017-03-24 02:10:16 +00:00
Nathan Sidwell
f1f91f036b cp-tree.h (type_unknown_p): Make inline.
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.

From-SVN: r246427
2017-03-23 20:23:21 +00:00
Nathan Sidwell
f066562ac5 cp-tree.h (OVL_P, [...]): New.
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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/cp-tree.h
M    gcc/cp/name-lookup.c

From-SVN: r246421
2017-03-23 17:18:12 +00:00
Nathan Sidwell
ebd076f807 Two dimensional OVERLOADs
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.

From-SVN: r246420
2017-03-23 16:47:17 +00:00
Nathan Sidwell
744509bac9 add comment
From-SVN: r246393
2017-03-22 17:30:57 +00:00
Nathan Sidwell
ada2f51267 name-lookup.c (lookup_qualified_name): Unwrap singleton overload.
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.

From-SVN: r246390
2017-03-22 16:29:00 +00:00
Nathan Sidwell
29524cc00a name-lookup.c (lookup_name_real_1): Don's skip hidden here.
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.

From-SVN: r246344
2017-03-22 02:41:37 +00:00
Nathan Sidwell
c49455c0c2 Refactor lookup part 1
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.

From-SVN: r246338
2017-03-21 23:58:56 +00:00
Nathan Sidwell
3d134dc800 Keep hidden overloads at start of list
Keep hidden overloads at start of 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.
(--This line, and those below, will be ignored--

A    gcc/testsuite/g++.dg/lookup/friend19.C
A    gcc/testsuite/g++.dg/lookup/using56.C
M    gcc/cp/pt.c
M    gcc/cp/cp-tree.h
M    gcc/cp/decl.c
M    gcc/cp/name-lookup.c
M    gcc/cp/tree.c

From-SVN: r246332
2017-03-21 18:37:35 +00:00
Nathan Sidwell
be271c2922 New OVERLOAD representation part 6
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.

From-SVN: r246198
2017-03-16 14:40:26 +00:00
Nathan Sidwell
14e655206c New OVERLOAD representation part 5
New OVERLOAD representation part 5
	gcc/cp/
	* cp-tree.h (OVL_NEXT): Delete. Update uses.
	(OVL_CHAIN): Check for overload.

From-SVN: r246195
2017-03-16 13:57:17 +00:00
Nathan Sidwell
3e775337d3 New OVERLOAD representation part 4
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.

From-SVN: r246194
2017-03-16 13:31:42 +00:00
Nathan Sidwell
65369f7a1e New OVERLOAD representation part 3
New OVERLOAD representation part 3
	gcc/cp/
	* cp-tree.h: Remove OVLNEW pieces.
	* tree.c: Likewise.

From-SVN: r246193
2017-03-16 13:05:45 +00:00
Nathan Sidwell
9121170048 New OVERLOAD representation part 2
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.

From-SVN: r246192
2017-03-16 12:50:55 +00:00
Nathan Sidwell
87e9483105 New OVERLOAD representation part 1
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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/tree.c
M    gcc/cp/cp-tree.h

From-SVN: r246172
2017-03-15 19:38:07 +00:00
Nathan Sidwell
f061d25698 Vectorize OVERLOAD part 9
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.

From-SVN: r246171
2017-03-15 18:40:14 +00:00
Nathan Sidwell
2a3c375552 Vectorize OVERLOAD part 8
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.

From-SVN: r246169
2017-03-15 17:13:38 +00:00
Nathan Sidwell
715d46e75b Vectorize OVERLOAD part 7
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.

From-SVN: r246164
2017-03-15 14:35:02 +00:00
Nathan Sidwell
bd628b05a9 Vectorize OVERLOAD part 6
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.

From-SVN: r246159
2017-03-15 12:47:37 +00:00
Nathan Sidwell
774664816a Add OVERLOAD iterator part 8
Add OVERLOAD iterator part 8
	gcc/cp/
	* name-lookup.c (do_nonmember_using_decl): Use iterators

From-SVN: r246158
2017-03-15 12:01:48 +00:00
Nathan Sidwell
16a74d2d8c Add OVERLOAD iterator part 6
Add OVERLOAD iterator part 6
	gcc/cp/
	* name-lookup.c (pushdecl_maybe_friend_1): Use OVL_FIRST.
	(push_overloaded_decl_1): Use iterators.
	(consider_binding_level): Use OVL_FIRST.

From-SVN: r246157
2017-03-15 11:35:15 +00:00
Nathan Sidwell
8e03e2876d Add OVERLOAD iterator part 6
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.

From-SVN: r246141
2017-03-14 20:33:37 +00:00
Nathan Sidwell
3a1ebda2c2 Vectorize OVERLOAD part 5
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.

From-SVN: r246140
2017-03-14 19:50:31 +00:00
Nathan Sidwell
3b2cfc7e53 Vectorize OVERLOAD part 5
Vectorize OVERLOAD part 5
	* 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.

From-SVN: r246139
2017-03-14 17:57:25 +00:00
Nathan Sidwell
0a12cc87c9 Add OVERLOAD iterator part 5
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.

From-SVN: r246136
2017-03-14 16:15:58 +00:00
Nathan Sidwell
2703163e54 Change add_method signature
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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/semantics.c
M    gcc/cp/lambda.c
M    gcc/cp/cp-tree.h
M    gcc/cp/class.c
M    gcc/cp/method.c

From-SVN: r246123
2017-03-14 13:36:43 +00:00
Nathan Sidwell
ed16a4f609 Kill get_first_fn part 3
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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/tree.c
M    gcc/cp/typeck.c
M    gcc/cp/pt.c
M    gcc/cp/cp-tree.h

From-SVN: r246104
2017-03-13 18:24:18 +00:00
Nathan Sidwell
2474ff1496 Kill get_first_fn part 2
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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/lambda.c
M    gcc/cp/semantics.c
M    gcc/cp/name-lookup.c
M    gcc/cp/tree.c
M    gcc/cp/mangle.c
M    gcc/cp/search.c
M    gcc/cp/typeck2.c
M    gcc/cp/constexpr.c
M    gcc/cp/error.c
M    gcc/cp/parser.c
M    gcc/cp/cp-tree.h

From-SVN: r246102
2017-03-13 17:52:38 +00:00
Nathan Sidwell
e635900fff Kill get_first_fn part 1
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.

From-SVN: r246099
2017-03-13 16:30:24 +00:00
Nathan Sidwell
03becee564 Kill get_fns
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.

From-SVN: r246097
2017-03-13 15:22:08 +00:00
Nathan Sidwell
d1567b5046 Kill ovl_cons
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.

From-SVN: r246095
2017-03-13 14:43:52 +00:00
Nathan Sidwell
e363f1042d Kill build_overload
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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/cp-tree.h
M    gcc/cp/name-lookup.c
M    gcc/cp/class.c
M    gcc/cp/tree.c
M    gcc/cp/pt.c
M    gcc/cp/constraint.cc

From-SVN: r246094
2017-03-13 14:19:37 +00:00
Nathan Sidwell
9152fd207f Rename OVL_USED
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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/class.c
M    gcc/cp/tree.c
M    gcc/cp/cp-tree.h
M    gcc/cp/search.c
M    gcc/cp/name-lookup.c

From-SVN: r246093
2017-03-13 13:42:00 +00:00
Nathan Sidwell
3384344885 Add OVERLOAD iterator part 4
Add OVERLOAD iterator part 4
	gcc/cp/
	* tree.c (cp_tree_equal): Use ovl_iterator.

From-SVN: r246092
2017-03-13 13:20:10 +00:00
Nathan Sidwell
0c118822f5 Vectorize OVERLOAD part 4
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.

From-SVN: r246086
2017-03-13 12:51:48 +00:00
Nathan Sidwell
160e6d485f Add OVERLOAD iterator part 6
Add OVERLOAD iterator part 6
	gcc/cp/
	* search.c (lookup_field_fuzzy_info::fuzzy_lookup_fn)
	lookup_conversion_operator, lookup_fnfields_idx_nolazy,
	lookup_conversions_r): Use new accessors.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/search.c

From-SVN: r246057
2017-03-10 20:44:02 +00:00
Nathan Sidwell
d723447607 Add OVERLOAD iterator part 5
Add OVERLOAD iterator part 5
	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.
((--This line, and those below, will be ignored--

M    gcc/cp/parser.c
M    gcc/cp/ptree.c
M    gcc/cp/error.c
M    gcc/cp/dump.c
M    gcc/cp/decl2.c
M    gcc/cp/init.c
M    gcc/cp/pt.c
M    ChangeLog.modules

From-SVN: r246056
2017-03-10 20:31:46 +00:00
Nathan Sidwell
ef4e9096ea Add OVERLOAD iterator part 4
Add OVERLOAD iterator part 4
	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.
(((--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/mangle.c
M    gcc/cp/cp-tree.h
M    gcc/cp/typeck.c
M    gcc/cp/class.c
M    gcc/cp/decl.c
M    gcc/cp/method.c
M    gcc/cp/cxx-pretty-print.c
M    gcc/cp/parser.c
M    gcc/cp/call.c

From-SVN: r246050
2017-03-10 19:29:25 +00:00
Nathan Sidwell
e3a5c1af37 Makefile-supplied timestamp.
gcc/cp
	* Make-lang.in: Provide MODULE_STAMP.
	* module.c (cpm_stream::version): Use MODULE_STAMP, not __DATE__ &
	__TIME__.

From-SVN: r246048
2017-03-10 19:23:36 +00:00
Nathan Sidwell
5e2a84cd17 Add OVERLOAD iterator part 3
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.
((--This line, and those below, will be ignored--

M    gcc/cp/pt.c
M    gcc/cp/name-lookup.c
M    ChangeLog.modules

From-SVN: r246041
2017-03-10 16:28:56 +00:00
Nathan Sidwell
2705f9bd91 Add OVERLOAD iterator part 2
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.
(--This line, and those below, will be ignored--

M    gcc/cp/typeck.c
M    gcc/cp/class.c
M    gcc/cp/semantics.c
M    gcc/cp/decl2.c
M    gcc/cp/parser.c
M    ChangeLog.modules

From-SVN: r246033
2017-03-10 15:25:34 +00:00
Nathan Sidwell
c4482ae71e Add OVERLOAD iterator, part 1 Add MAYBE_BASELINK_FUNCTIONS
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.
((((--This line, and those below, will be ignored--

M    gcc/cp/parser.c
M    gcc/cp/cp-tree.h
M    gcc/cp/lambda.c
M    gcc/cp/semantics.c
M    gcc/cp/name-lookup.c
M    gcc/cp/tree.c
M    gcc/cp/search.c
M    gcc/cp/typeck.c
M    gcc/cp/call.c
M    gcc/cp/method.c
M    ChangeLog.modules

From-SVN: r246031
2017-03-10 14:37:21 +00:00
Nathan Sidwell
b6b84b649e cp-tree.h (NAMESPACE_CHECK): Delete.
gcc/cp/
	* gcc/cp/cp-tree.h (NAMESPACE_CHECK): Delete.
	(MODULE_NAMESPACE_P, GLOBAL_MODULE_NAMESPACE)
	NAMESPACE_INLINE_P): Adjust.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/cp-tree.h

From-SVN: r246030
2017-03-10 14:32:56 +00:00
Nathan Sidwell
4416f027e4 modules.exp: Protect DEFAULT_CXXFLAGS.
gcc/testsuite/
	* g++.dg/modules/modules.exp: Protect DEFAULT_CXXFLAGS.

From-SVN: r246028
2017-03-10 14:25:09 +00:00
Nathan Sidwell
887d73bb72 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.

From-SVN: r245920
2017-03-06 13:14:42 +00:00
Nathan Sidwell
20589ff6be Optimize crc.
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.

From-SVN: r245902
2017-03-05 17:22:30 +00:00
Nathan Sidwell
603a379c42 Redo bool read/write
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.

From-SVN: r245899
2017-03-05 02:03:34 +00:00
Nathan Sidwell
ab634a905a 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.

From-SVN: r245898
2017-03-05 01:56:42 +00:00
Nathan Sidwell
8dd29152f7 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.

From-SVN: r245884
2017-03-03 20:11:45 +00:00
Nathan Sidwell
f5d82a3eaf Renaming stuff.
gcc/cp/
	* module.c: Remove anon namespace, rename seriator, reader,
	writer, streamer, in & out.

From-SVN: r245881
2017-03-03 17:05:36 +00:00
Nathan Sidwell
7a1e9ceaf0 Black triangle achieved
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.

From-SVN: r245829
2017-03-02 04:08:48 +00:00
Nathan Sidwell
fbc745958b module.c (in::finish_type): New.
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.

From-SVN: r245551
2017-02-17 20:38:55 +00:00
Nathan Sidwell
6b0c005087 Canonicalize canonical type hashing
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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/c-family/c-common.c
M    gcc/tree.c
M    gcc/tree.h

From-SVN: r245550
2017-02-17 20:31:08 +00:00
Nathan Sidwell
35a9915049 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.

From-SVN: r245519
2017-02-16 20:59:42 +00:00
Nathan Sidwell
93f99ba8f1 Some actual tree writing & reading
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.

From-SVN: r245512
2017-02-16 16:51:03 +00:00
Nathan Sidwell
4301521a67 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.

From-SVN: r245506
2017-02-16 12:59:03 +00:00
Nathan Sidwell
037c4bb6a7 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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
A    gcc/testsuite/g++.dg/modules/mod-exp-1_a.C
A    gcc/testsuite/g++.dg/modules/mod-exp-1_b.C
M    gcc/testsuite/g++.dg/modules/mod-sym-1.C
M    gcc/cp/cp-tree.h
M    gcc/cp/module.c
M    gcc/cp/parser.c

From-SVN: r245487
2017-02-15 16:56:41 +00:00
Nathan Sidwell
c97a03f7a6 Make-lang.in (CFLAGS-cp/module.o): New var.
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

From-SVN: r245433
2017-02-14 15:38:35 +00:00
Nathan Sidwell
670ace869f Start actually writing & reading module files.
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.

From-SVN: r245347
2017-02-10 21:11:41 +00:00
Nathan Sidwell
e86b6262fe gengtype-lex.l (<in_struct>): Add '/'.
gcc/
	* gengtype-lex.l (<in_struct>): Add '/'.

From-SVN: r245346
2017-02-10 21:07:43 +00:00
Nathan Sidwell
92ddc50544 Dump file
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.

From-SVN: r245313
2017-02-09 19:28:41 +00:00
Nathan Sidwell
60811f7a8f cp-tree.h (DECL_CHECK): New.
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.

From-SVN: r245308
2017-02-09 16:02:45 +00:00
Nathan Sidwell
c51761ad72 name-lookup.c (is_ancestor): Pop from module namespace root.
gcc/cp/
	* name-lookup.c (is_ancestor): Pop from module namespace root.
	gcc/testsuite/
	* g++.dg/modules/mod-sym-3.C: New.

From-SVN: r245283
2017-02-08 19:48:29 +00:00
Nathan Sidwell
0238e4b100 Module namespaces
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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/cp-tree.h
M    gcc/cp/module.c
M    gcc/cp/parser.c
M    gcc/testsuite/g++.dg/modules/mod-decl-1.C
A    gcc/testsuite/g++.dg/modules/mod-sym-1.C
A    gcc/testsuite/g++.dg/modules/mod-sym-2.C

From-SVN: r245282
2017-02-08 18:51:31 +00:00
Nathan Sidwell
2c7be4a684 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.

From-SVN: r245281
2017-02-08 18:20:04 +00:00
Nathan Sidwell
6f44c46971 PR c++/79369 inline namespaces
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.

From-SVN: r245252
2017-02-07 18:02:05 +00:00
Nathan Sidwell
4cba0e0761 Module files open/closed.
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
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/testsuite/g++.dg/modules/mod-decl-0.C
M    gcc/testsuite/g++.dg/modules/modules.exp
M    gcc/testsuite/g++.dg/modules/mod-decl-1.C
M    gcc/testsuite/g++.dg/modules/mod-decl-2_a.C
D    gcc/testsuite/g++.dg/modules/mod-decl-3_a.C
M    gcc/testsuite/g++.dg/modules/proclaim-1.C
A  + gcc/testsuite/g++.dg/modules/mod-decl-3.C
D    gcc/testsuite/g++.dg/modules/mod-decl-3_b.C
D    gcc/testsuite/g++.dg/modules/mod-decl-4.C
M    gcc/testsuite/g++.dg/modules/mod-decl-5_a.C
M    gcc/testsuite/g++.dg/modules/mod-decl-5_b.C
M    gcc/cp/module.c

From-SVN: r245163
2017-02-03 19:05:25 +00:00
Nathan Sidwell
e7e77c41b4 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.

From-SVN: r245150
2017-02-03 12:55:45 +00:00
Nathan Sidwell
d8f7cc0bd2 cp-tree.h: Adjust module interface fns.
[[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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/testsuite/g++.dg/modules/mod-decl-2_a.C
M    gcc/testsuite/g++.dg/modules/mod-decl-3_a.C
M    gcc/testsuite/g++.dg/modules/proclaim-1.C
A    gcc/testsuite/g++.dg/modules/mod-decl-4.C
M    gcc/cp/cp-tree.h
M    gcc/cp/module.c
M    gcc/cp/parser.c

From-SVN: r245133
2017-02-02 17:42:11 +00:00
Nathan Sidwell
ce007f1016 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.

From-SVN: r244994
2017-01-27 20:04:07 +00:00
Nathan Sidwell
87738c6872 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.
(--This line, and those below, will be ignored--

M    ChangeLog.modules
M    gcc/cp/cp-tree.h
M    gcc/cp/module.c
M    gcc/cp/parser.c
M    gcc/testsuite/g++.dg/dg.exp
A    gcc/testsuite/g++.dg/modules/modules.exp
A    gcc/testsuite/g++.dg/modules/mod-decl-2_a.C
A    gcc/testsuite/g++.dg/modules/mod-decl-2_b.C
A    gcc/testsuite/g++.dg/modules/mod-decl-3_a.C
A    gcc/testsuite/g++.dg/modules/mod-decl-3_b.C

From-SVN: r244992
2017-01-27 18:50:06 +00:00
Nathan Sidwell
02ac5dbe0f 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.

From-SVN: r244906
2017-01-25 17:51:53 +00:00
Nathan Sidwell
3ddaae627a New flag & keywords, etc
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.

From-SVN: r244899
2017-01-25 14:39:49 +00:00
Nathan Sidwell
7d57a2193a 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.

From-SVN: r244883
2017-01-24 19:37:45 +00:00
Nathan Sidwell
e913cbc601 Branch creation.
From-SVN: r244829
2017-01-23 19:35:58 +00:00
29 changed files with 18107 additions and 40 deletions

17852
ChangeLog.modules Normal file

File diff suppressed because it is too large Load Diff

1
gcc/REVISION Normal file
View File

@@ -0,0 +1 @@
[c++-modules]

View File

@@ -477,6 +477,10 @@ c_common_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value,
cpp_opts->extended_identifiers = value;
break;
case OPT_fheader_guard_opt:
cpp_opts->no_header_guard_opt = !value;
break;
case OPT_fmax_include_depth_:
cpp_opts->max_include_depth = value;
break;

View File

@@ -1660,6 +1660,10 @@ C++ ObjC++ WarnRemoved
fhandle-exceptions
C++ ObjC++ Optimization Alias(fexceptions) Warn({%<-fhandle-exceptions%> has been renamed %<-fexceptions%> (and is now on by default)})
fheader-guard-opt
C ObjC C++ ObjC++
Enable header file include guard optimization.
fhonor-std
C++ ObjC++ WarnRemoved

4
gcc/configure vendored
View File

@@ -7883,6 +7883,8 @@ fi
# ACX_BUGURL([https://gcc.gnu.org/bugs/])
# '\#' needed to escape hash to Make
# Check whether --with-bugurl was given.
@@ -7895,7 +7897,7 @@ if test "${with_bugurl+set}" = set; then :
;;
esac
else
BUGURL="https://gcc.gnu.org/bugs/"
BUGURL="https://gcc.gnu.org/wiki/cxx-modules\#Bugs"
fi

View File

@@ -1013,7 +1013,9 @@ AC_ARG_WITH(specs,
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,

View File

@@ -64,6 +64,17 @@ ifneq ($(DEVPHASE_c),)
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

View File

@@ -4966,21 +4966,6 @@ push_throw_library_fn (tree name, tree type)
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

View File

@@ -19144,22 +19144,28 @@ maybe_translate_include (cpp_reader *reader, line_maps *lmaps, location_t loc,
size_t len = strlen (path);
path = canonicalize_header_name (NULL, loc, true, path, len);
auto packet = mapper->IncludeTranslate (path, Cody::Flags::None, len);
int xlate = false;
if (packet.GetCode () == Cody::Client::PC_BOOL)
xlate = -int (packet.GetInteger ());
else if (packet.GetCode () == Cody::Client::PC_PATHNAME)
{
/* Record the CMI name for when we do the import. */
module_state *import = get_module (build_string (len, path));
import->set_filename (packet);
xlate = +1;
}
auto name_str = build_string (len, path);
if (get_module_slot (name_str, nullptr, false, false))
/* We've already met this header. */
xlate = +1;
else
{
gcc_checking_assert (packet.GetCode () == Cody::Client::PC_ERROR);
error_at (loc, "cannot determine %<#include%> translation of %s: %s",
path, packet.GetString ().c_str ());
auto packet = mapper->IncludeTranslate (path, Cody::Flags::None, len);
if (packet.GetCode () == Cody::Client::PC_BOOL)
xlate = -int (packet.GetInteger ());
else if (packet.GetCode () == Cody::Client::PC_PATHNAME)
{
/* Record the CMI name for when we do the import. */
get_module (name_str)->set_filename (packet);
xlate = +1;
}
else
{
gcc_checking_assert (packet.GetCode () == Cody::Client::PC_ERROR);
error_at (loc, "cannot determine %<#include%> translation of %s: %s",
path, packet.GetString ().c_str ());
}
}
bool note = false;

View File

@@ -643,6 +643,15 @@ diagnostic_action_after_output (diagnostic_context *context,
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 @@ diagnostic_action_after_output (diagnostic_context *context,
("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 @@ diagnostic_action_after_output (diagnostic_context *context,
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:

View File

@@ -266,6 +266,20 @@ standard versions) and C++.
@opindex fno-canonical-system-headers
When preprocessing, do not shorten system header paths with canonicalization.
@item -fno-header-guard-opt
@opindex fno-header-guard-opt
This disables the preprocessor's optimization of header files that
have a macro header-guard. Usually such files are do not appear at
all in the preprocessed output on their second and subsequent
inclusion. This disables that optimization such that they will appear
in the @code{#} line directive output, but of course their contents
will be elided by the controlling @code{#if} directive. This also
covers C++ 20 include-translated header-unit imports, those will be
subject to multiple include translations. This option is useful to
discover the complete #include graph of a translation unit. It does
not apply to idempotent headerfiles marked with @code{#pragma once},
nor to headers read with @code{#import}.
@item -fmax-include-depth=@var{depth}
@opindex fmax-include-depth
Set the maximum depth of the nested #include. The default is 200.

View File

@@ -3397,6 +3397,35 @@ execute (void)
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 @@ execute (void)
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 @@ driver::maybe_print_and_exit () const
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 @@ driver::final_actions () const
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);
}
}

View File

@@ -333,6 +333,10 @@ b fancy_abort
# 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.

View File

@@ -0,0 +1,8 @@
/* { dg-do preprocess } */
/* Check header guards are optimized. */
#include "noheaderguard-b.h"
#include "noheaderguard-b.h"
#include "noheaderguard-a.h"
/* { dg-final { scan-file headerguard.i {# [0-9]* "[^\n]*headerguard.c"\n\n*# [0-9]* "[^\n]*headerguard-b.h" 1\n\n*# [0-9]* "[^\n]*headerguard-a.h" 1\n\n*# [0-9]* "[^\n]*headerguard-b.h" 2\n\n*# [0-9]* "[^\n]*headerguard.c" 2\n} } } */

View File

@@ -0,0 +1,3 @@
#ifndef INNER
#define INNER
#endif

View File

@@ -0,0 +1,4 @@
#ifndef OUTER
#define OUTER
#include "noheaderguard-a.h"
#endif

View File

@@ -0,0 +1,9 @@
/* { dg-do preprocess } */
/* { dg-additional-options -fno-header-guard-opt } */
/* Check header guard optimization is disabled. */
#include "noheaderguard-b.h"
#include "noheaderguard-b.h"
#include "noheaderguard-a.h"
/* { dg-final { scan-file noheaderguard.i {# [0-9]* "[^\n]*noheaderguard.c"\n\n*# [0-9]* "[^\n]*noheaderguard-b.h" 1\n\n*# [0-9]* "[^\n]*noheaderguard-a.h" 1\n\n*# [0-9]* "[^\n]*noheaderguard-b.h" 2\n\n*# [0-9]* "[^\n]*noheaderguard.c" 2\n\n*# [0-9]* "[^\n]*noheaderguard-b.h" 1\n\n*# [0-9]* "[^\n]*noheaderguard.c" 2\n\n*# [0-9]* "[^\n]*noheaderguard-a.h" 1\n\n*# [0-9]* "[^\n]*noheaderguard.c" 2\n} } } */

View File

@@ -0,0 +1,5 @@
// { dg-additional-options -fmodule-header }
#ifndef OUTER
#define OUTER
#endif

View File

@@ -0,0 +1,7 @@
// { dg-do preprocess }
// { dg-additional-options {-fmodules-ts -fno-header-guard-opt} }
#include "noheaderguard-1_a.H"
#include "noheaderguard-1_a.H"
// { dg-final { scan-file noheaderguard-1_b.i {# [0-9]* "[^\n]*noheaderguard-1_b.C"\n\n*import "[^\n]*noheaderguard-1_a.H" \[\[__translated\]\];\nimport "[^\n]*noheaderguard-1_a.H" \[\[__translated\]\];\n} } }

View File

@@ -0,0 +1,7 @@
// { dg-do preprocess }
// { dg-additional-options {-fmodules-ts -fno-header-guard-opt} }
import "noheaderguard-1_a.H";
#include "noheaderguard-1_a.H"
// { dg-final { scan-file noheaderguard-1_c.i {# [0-9]* "[^\n]*noheaderguard-1_c.C"\n\n*import "[^\n]*noheaderguard-1_a.H";\nimport "[^\n]*noheaderguard-1_a.H" \[\[__translated\]\];\n} } }

View File

@@ -48,6 +48,7 @@ proc prune_gcc_output { text } {
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

View File

@@ -1004,9 +1004,6 @@ plugin_add_using_decl (cc1_plugin::connection *,
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 @@ plugin_build_call_expr (cc1_plugin::connection *self,
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)

View File

@@ -284,6 +284,18 @@ knowledge.
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

View File

@@ -29,6 +29,7 @@ static Packet (*const responseTable[Detail::RC_HWM])
&PathnameResponse,
&OKResponse,
&IncludeTranslateResponse,
&OKResponse,
};
Client::Client ()
@@ -253,6 +254,19 @@ Packet PathnameResponse (std::vector<std::string> &words)
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)
{

View File

@@ -198,6 +198,7 @@ enum RequestCode
RC_MODULE_IMPORT,
RC_MODULE_COMPILED,
RC_INCLUDE_TRANSLATE,
RC_INVOKE,
RC_HWM
};
@@ -467,6 +468,17 @@ public:
agent.size (), ident.size ());
}
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
@@ -624,6 +636,10 @@ public:
std::string &module);
virtual int IncludeTranslateRequest (Server *s, Flags flags,
std::string &include);
public:
virtual int InvokeSubProcessRequest (Server *s,
std::vector<std::string> &args);
};

View File

@@ -203,6 +203,12 @@ int Resolver::IncludeTranslateRequest (Server *s, Flags, std::string &include)
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);

View File

@@ -28,6 +28,8 @@ static int ModuleCompiledRequest (Server *, Resolver *,
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 @@ static RequestPair
RequestPair {u8"MODULE-IMPORT", ModuleImportRequest},
RequestPair {u8"MODULE-COMPILED", ModuleCompiledRequest},
RequestPair {u8"INCLUDE-TRANSLATE", IncludeTranslateRequest},
RequestPair {u8"INVOKE", InvokeSubProcessRequest},
};
}
@@ -262,6 +265,15 @@ int IncludeTranslateRequest (Server *s, Resolver *r,
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 ();

View File

@@ -803,7 +803,9 @@ is_known_idempotent_file (cpp_reader *pfile, _cpp_file *file, bool import)
/* Skip if the file had a header guard and the macro is defined.
PCH relies on this appearing before the PCH handler below. */
if (file->cmacro && cpp_macro_p (file->cmacro))
if (file->cmacro && cpp_macro_p (file->cmacro)
/* Ignore if the idempotency optimization is disabled. */
&& (file->pchname || !CPP_OPTION (pfile, no_header_guard_opt)))
return true;
/* Handle PCH files immediately; don't stack them. */
@@ -819,6 +821,18 @@ is_known_idempotent_file (cpp_reader *pfile, _cpp_file *file, bool import)
return false;
}
/* Mark FILE as a header_unit, if we're spotting idempotency. */
static void
maybe_mark_header_unit (cpp_reader *pfile, _cpp_file *file)
{
if (!CPP_OPTION (pfile, no_header_guard_opt))
{
file->header_unit = +1;
_cpp_mark_file_once_only (pfile, file);
}
}
/* Return TRUE if file has unique contents, so we should read process
it. The file's contents must already have been read. */
@@ -927,8 +941,7 @@ _cpp_stack_file (cpp_reader *pfile, _cpp_file *file, include_type type,
strlen (buf), true);
buffer->to_free = buffer->buf;
file->header_unit = +1;
_cpp_mark_file_once_only (pfile, file);
maybe_mark_header_unit (pfile, file);
}
else
{
@@ -983,7 +996,7 @@ _cpp_stack_file (cpp_reader *pfile, _cpp_file *file, include_type type,
if (decrement)
pfile->line_table->highest_location--;
if (file->header_unit <= 0)
if (!buf)
/* Add line map and do callbacks. */
_cpp_do_file_change (pfile, LC_ENTER, file->path,
/* With preamble injection, start on line zero,
@@ -1126,8 +1139,8 @@ cpp_find_header_unit (cpp_reader *pfile, const char *name, bool angle,
file->fd = 0;
}
file->header_unit = +1;
_cpp_mark_file_once_only (pfile, file);
maybe_mark_header_unit (pfile, file);
return file->path;
}

View File

@@ -528,6 +528,9 @@ struct cpp_options
/* True if warn about differences between C++98 and C++11. */
bool cpp_warn_cxx11_compat;
/* True if header file idempotency should not be optimized. */
bool no_header_guard_opt;
/* Dependency generation. */
struct
{