blob: 5b69a8733abe7324805de64a942c8333dc8e4b00 [file] [log] [blame]
2021-01-04 Nathan Sidwell <nathan@acm.org>
Th, th, th, that's all folks!
There are a couple of cleanups it might be worth retrying in stage
1.
gcc/cp/decl.c (fixup_anonymous_aggr): I don't think we set these
bits prematurely anymore?
gcc/gcc.c (process_command): We just seem to be doing the same @
processing ass add_infile?
Merge trunk a5469584f61
Merge trunk 6288183377a
2020-12-21 Nathan Sidwell <nathan@acm.org>
Merge trunk e798f081925
gcc/cp/
* module.cc (has_definition): Check VAR_DECL's LANG_SPECIFIC.
gcc/testsuite/
* g++.dg/modules/gvar_[ab].C: New.
2020-12-18 Nathan Sidwell <nathan@acm.org>
Merge trunk 35b8d268746
2020-12-15 Nathan Sidwell <nathan@acm.org>
Merge trunk 433703843b3
Merge trunk 0feb237657c
2020-12-14 Nathan Sidwell <nathan@acm.org>
gcc/
* diagnostic-core.h (progname): Remove comment.
Merge trunk 62c5ea52288
preprocessor: Deferred macro support
Named pipe support
gcc/cp
* mapper-client.cc (module_client::open_module): Allow named pipes.
gcc/
* doc/invoke.texi (C++ Module Mapper): Document.
libcpp/
* include/cpplib.h (struct cpp_macro): Rename imported field.
(struct cpp_hashnode): Update deferred doc.
* macro.c (_cpp_new_macro): Adjust.
(cpp_get_deferred_macro, get_deferred_or_lazy_macro): Assert more.
gcc/cp/
* module.cc (module_state::read_define): Adjust.
(module_state::install_macros): Likewise.
2020-12-11 Nathan Sidwell <nathan@acm.org>
Merge trunk 9324f7a25c7
c++: Avoid considering some conversion ops
gcc/cp/
* decl2.c (c_parse_final_cleanups): Refactor.
Merge trunk 1c6b86b50d4
c++: module test harness
2020-12-10 Nathan Sidwell <nathan@acm.org>
Merge trunk e6e4b20de33
c++: name lookup API for modules
Merge trunk 4f1d8bd5096
c++: modules & using-decls
Merge trunk afc14c8d0a9
c++: modularize spelling suggestions
2020-12-09 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (member_vec_dedup): Remove gratuitous chaining.
(check_local_shadow): No need to check for clone.
Merge trunk e4c3ec980fa
c++: Module-specific error and tree dumping
gcc/cp/
* module.cc (maybe_attach_decl): Use modules_p.
(module_preprocess_options): Likewise.
* pt.c (lookup_template_class_1)
(instantiate_template_specializations): Likewise.
* parser.c (cp_lexer_new_main): Rename confusing variable.
Merge trunk cf97b970fe5
c++: Decl module-specific semantic processing
2020-12-08 Nathan Sidwell <nathan@acm.org>
Merge trunk 570c312c03e
c++: Originating and instantiating module
Merge trunk dded5f78ccb
c++: template and clone fns for modules
Merge trunk 0bd4fecbea3
c++: Fix MODULE_VERSION breakage
2020-12-07 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (comparing_typenames): Replace with ...
(map_context_from, map_context_to): ... this.
* typeck.c (structural_comptypes): Adjust.
* pt.c (comparing_typenames): Delete.
(spec_hasher::equal): Adjust.
* tree.c (cp_tree_equal): Check map_context_from & to for failed
parameter context.
* module.cc (map_context_from, map_context_to): Define.
(check_mergeable_decl): Set & unset map_context vars.
(trees_in::is_matching_decl): Likewise.
(module_state::read_cluster): Set & unset
comparing_specializations, not comparing_typenames.
Merge trunk ffb268ffcf9
c++: Adjust array type construction
2020-12-04 Nathan Sidwell <nathan@acm.org>
Merge trunk 5a26d4a204c
c++: Revert dependent-array changes
Merge trunk 97eaf8c92f9
c++: Module API declarations
2020-12-03 Nathan Sidwell <nathan@acm.org>
Merge trunk 62fb1b9e0da
c++: Fix array type dependency [PR 98107]
c++tools/
* configure.ac: Need ACX_NONCANONICAL_TARGET
* configure: Rebuilt.
c++tools/
* Makefile.in (libexecdir): Fix typo.
2020-12-02 Nathan Sidwell <nathan@acm.org>
gcc/
* doc/invoke.texi (C++ Modules): Add CMI section.
gcc/cp/
* cp-tree.h (DECL_MODULE_PURVIEW_P, DECL_MODULE_IMPORT_P)
(DECL_MODULE_ENTITY_P): New.
(DECL_MODULE_PENDING_SPECIALIZATIONS_P): New.
(DECL_MODULE_PENDING_MEMBERS_P): New.
(DECL_MODULE_ATTACHMENTS_P): New.
(DECL_MODULE_EXPORT_P): New.
(struct lang_decl_base): Shrink sel field. Add new
module-specific fields.
gcc/cp/
* cp-tree.h (DECL_MODULE_PENDING_SPECIALIZATIONS_P)
(DECL_MODULE_PENDING_MEMBERS_P): Use same module_pending_p field.
(DECL_ATTACHED_DECLS_P): Rename to ...
(DECL_MODULE_ATTACHEMENTS_P): ... this. Use module_pending_p
field.
(struct lang_decl_base): Replace module_pending_specializations_p,
module_pending_members_p, attached_decls_p fields with single
module_pending_p field.
* module.cc (trees_{in,out}::lang_decl_bools): Only stream
module_pending_p for vars & fns.
(trees_{in,out}::decl_value): Adjust DECL_MODULE_ATTACHMENTS_P
changes.
(trees_out::get_merge_kind): Likewise.
(trees_in::key_mergeable, maybe_attach_decl): Likewise.
* lex.c (cxx_dup_lang_specific_decl): Directly clear some module flags.
Merge trunk 05f7a2afe8f
C++ Module Binding Vector
Merge trunk 41676a36a04
C++ Module keywords
gcc/cp/
* name-lookup.h: Rename MODULE_VECTOR and associated structs &
macros to BINDING_VECTOR.
* cp-tree.h: Adjust.
* cp-tree.def: Adjust.
* decl.c: Adjust.
* module.cc: Adjust.
* name-lookup.c: Adjust.
* ptree.c: Adjust.
* decl.c: Adjust.
gcc/cp/
* cp-tree.h (struct tree_module_vec): Move to ...
* name-lookup.h (struct tree_module_vec): ... here.
gcc/cp/
* lex.c (struct token_coro): Rename to ...
(struct module_token_filter): ... here. Adjust through out.
2020-12-01 Nathan Sidwell <nathan@acm.org>
libcody/
Update from upstream, removing deprecated functions.
Merge trunk 855bb43f6d0
Merge trunk eae68c434f2
testsuite: Adjust pruning
Merge trunk 83a1beee276
libstdc++: Add C++2a synchronization support
gcc/cp/
* module.cc (trees_{in,out}::decl_container): Stream template as
well as container. Do not strip (no nudity!)
gcc/testsuite/
* g++.dg/modules/noexcept-1{.h,_[ab].[HC]}: New.
2020-11-30 Nathan Sidwell <nathan@acm.org>
gcc/
* doc/invoke.texi: Updates from review.
2020-11-24 Nathan Sidwell <nathan@acm.org>
Merge trunk 89d9c634dc5
2020-11-23 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* Make-lang.in: Don't depend VERSION on src dir.
* module.cc: Note some potential issues.
gcc/
* doc/invoke.texi (-flang-include-translate-not): Document.
gcc/cp/
* module.cc (maybe_translate_include): Add not-translate noting.
gcc/c-family/
* c.opt (flang-include-translate-not): New.
libcody/
Update from upstream, INCLUDE_TRANSLATE response meaning change
2020-11-20 Nathan Sidwell <nathan@acm.org>
gcc/
* doc/invoke.texi: Fixes.
libcody/
Update from upstream.
gcc/
* doc/invoke.texi: Update
* doc/cppopts.texi: Update
gcc/cp/
* cp-tree.h (match_mergeable_specialization): Take a spec_entry.
* pt.c (match_mergeable_specialization): Likewise.
* module.cc (trees_in::decl_value): Adjust.
(trees_{in,out}::key_mergeable): Adjust.
(specialization_add): Adjust.
gcc/
* doc/invoke.texi: Update
* doc/cppopts.texi: Update
Merge trunk 5bba2215c23
c++: Template hash access (
Merge trunk bf425849f1d
preprocessor: main-file cleanup
2020-11-18 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-lang.c (LANG_HOOKS_PREPROCESS_UNDEF): Do not override here.
* cp-tree.h (module_cpp_undef): Do not declare.
* module.cc (module_cpp_undef): Delete.
(handle_module_option): Store cpp_main_search code in flag_header_unit.
(module_preprocess_options): Set main_search option here.
Conditionally set preprocess_undef lang hook here.
libcpp/
* include/cpplib.h (enum cpp_main_search): Add CMS_header value.
* internal.h (cpp_in_system_header): Rename to ...
(_cpp_in_system_header): ... here.
(cpp_in_primary_file): Rename to ...
(_cpp_in_main_source_file): ... here. Compare main_file equality
and check main_search value.
* lex.c (maybe_va_opt_error, _cpp_lex_direct): Adjust.
* macro.c (_cpp_builtin_macro_text): Adjust.
(replace_args): Likewise.
* directives.c (do_include_next): Adjust.
(do_pragma_once, do_pragma_system_header): Likewise.
* files.c (struct _cpp_file): Delete main_file field.
(pch_open): Check pfile->main_file equality.
(make_cpp_file): Drop cpp_reader parm, don't set main_file.
(_cpp_find_file): Adjust.
(_cpp_stack_file): Check pfile->main_file equality. Drop
main_file clearing.
(struct report_missing_guard_data): Add cpp_reader field.
(report_missing_guard): Check pfile->main_file equality.
(_cpp_report_missing_guards): Adjust.
Merge trunk 92648faa1cb
08-cpp-mkdeps.diff
05-cpp-files.diff
04a-cpp-lexer.diff
32-aix-fixincl.diff
Merge trunk d3ae802402b
01-langhooks.diff
02-cpp-line-maps.diff
03-cpp-callbacks.diff
19-global-trees.diff
21a-int-cst.diff
2020-11-16 Nathan Sidwell <nathan@acm.org>
Adjust lang hooks
gcc/c-family/
* c-opts.c (c_common_init): Drop preprocess_undef
gcc/cp/
* cp-lang.c (LANG_HOOKS_PREPROCESS_DEFERRED_MACRO): Delete.
* cp-tree.h (module_cpp_deferred_macro): Do not declare.
* module.cc (module_cpp_deferred_macro): Delete.
(module_preprocess_options): Set deferred macro and undef
callbacks here.
gcc/
* langhooks-def.h (LANG_HOOKS_PREPROCESS_UNDEF): Delete.
* langhooks.h (struct lang_hooks): Delete
preprocess_deferred_macro.
Constrained partial variable templates
gcc/cp/
* module.cc (trees_{in,out}::key_mergeable): Variable templates
can be partially specialized and constrained.
(finish_module_processing): Point at module decl, so ICEs blame
that.
gcc/testsuite/
* g++.dg/modules/var-tpl-concept-1{.h,_[ab].C}: New.
Merge trunk 63496cbea58
using enum support
gcc/cp/
* module.cc (trees_out::mark_class_def): Mark cloned enum consts
gcc/testsuite/
* g++.dd/modules/using-enum-1_[ab].[HC]: New.
2020-11-13 Nathan Sidwell <nathan@acm.org>
Merge trunk d50310408f5
c++: Implement C++20 'using enum'.
Merge trunk e3b3b59683c
Fix libiberty linking
* g++tools/Makefile.in (LIBIBERTY): New.
Merge trunk 5fa821bba73
2020-11-12 Nathan Sidwell <nathan@acm.org>
Merge trunk 7f851c33411
libstdc++: Fix __numeric_traits_integer<__int20> [PR 97798]
Enum dedup ODR check fix
gcc/cp/
* tree.c (cp_tree_equal): Allow NON_LVALUE_EXPR &
VIEW_CONVERT_EXPR with NULL types.
gcc/testsuite/
* g++.dg/modules/loc-wrapper-1{.h,_a.H,_b.C}: New.
* Makefile.def: Fix g++ check implications.
* Makefile.in: Rebuilt.
gcc/
* config.in: Rebuilt.
* configure: Rebuilt.
* configure.ac: Remove unneeded checks
gcc/cp/
Merge trunk 3c3beb1a813
2020-11-11 Nathan Sidwell <nathan@acm.org>
c++tools/
* resolver.h (module_resolver): Update to new API.
* resolver.cc (module_resolver): Likewise.
2020-11-10 Nathan Sidwell <nathan@acm.org>
Adjust c++tools
* Makefile.def (c++tools): Depends on gcc
* Makefile.in: Rebuilt
c++tools/
* mapper.h: Rename to ...
* resolver.h: ... here. Move mapper-client to
gcc/cp/mapper-client.h
* resolver.cc: Adjust.
* configure.ac: Fix extraneous ]
* configure: Rebuilt.
gcc/cp/
* mapper-client.h: New, split from c++tools/mapper.h.
* mapper-client.cc: Adjust.
* mapper-resolver.cc: Adjust.
* module.cc: Adjust.
c++tools/
* mapper.h (class mapper_client): Add flag support.
gcc/cp/
* mapper-client: Likewise.
* module.cc (maybe_translate_include): Likewise.
(preprocessed_module): Likewise.
libcody/
Rebase on upstream -- $flag support.
Create c++tools dir
* Makefile.def: Add c++tools
* Makefile.tpl: Likewise.
* configure.ac: Likewise.
* Makefile.in: Regenerated.
* configure: Regenerated.
c++tools/
* Makefile.in: New.
* configure.ac: New.
* config.h.in: Generated
* configure: Generated
* mapper.h: Moved from gcc/cp.
* resolver.cc: Moved from gcc/cp/mapper-resolver.cc
* server.cc: Moved from gcc/cp/mapper-server.cc
gcc/
* configure.ac: Remove mapper-server-specific checks
* config.in: Rebuilt.
* configure: Rebuilt.
gcc/cp/
* Make-lang.in: Remove mapper-server.
* mapper-client.cc: Adjusted.
* mapper-resolver.cc: Moved to c++tools/resolver.cc, replaced with
stub here.
* mapper.h: Moved to c++tools, replaced with stub here.
* module.cc: Adjust.
gcc/testsuite/
* g++.dg/modules/extern-tpl-1_b.C: Adjust invocation.
* g++.dg/modules/inc-xlate-1_e.C: Likewise.
* g++.dg/modules/legacy-2_b.H: Likewise.
* g++.dg/modules/legacy-6_c.C: Likewise.
* g++.dg/modules/legacy-6_d.C: Likewise.
2020-11-09 Nathan Sidwell <nathan@acm.org>
Merge trunk e38cd64ac6c
c++: ADL refactor
Address review comments
libcpp/
* lex.c (cpp_maybe_module_directive): Add asserts and comments
about initial and final state. Remove __builtin_expects.
(_cpp_lex_token): Remove __builtin_expect.
2020-11-06 Nathan Sidwell <nathan@acm.org>
Merge trunk 4b5f564a5d9
libcpp: Provide date routine
gcc/
* tree.c (cache_integer_cst): Document API.
gcc/cp/
* Make-lang.in: Drop git hash collection.
gcc/
* REVISION: New.
gcc/cp/
* parser.c (cp_parser_diagnose_invalid_type_name): Revert local
changes.
libcpp/
* include/cpplib.h (enum CPP_time_kind): New.
(cpp_get_date): Declare.
* internal.h (struct cpp_reader): Replace source_date_epoch with
time_stamp and time_stamp_kind.
* init.c (cpp_create_reader): Initialize them.
* macro.c (_cpp_builtin_macro_text): Use cpp_get_date.
(cpp_get_date): Broken out from _cpp_builtin_macro_text and
genericize.
gcc/cp/
* module.cc (module_state_write_readme): Use new libcpp API.
2020-11-05 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_state::write_Readme): Add cpp_reader parm, use
cb_get_source_date_epoch to see if the time is locked.
gcc/cp/
* module.cc (enum merge_kind): Minor remapping.
(merge_kind_name): Adjust.
gcc/cp/
* module.cc (depset::fini_partial_redirect): Delete.
(depset::hash::add_partial_redirect): Delete.
(depset::hash::init_partial_redirect): Delete.
(enum merge_kind): Delete MK_tmpl_partial_mask,
MK_type_partial_spec.
(trees_out::get_merge_kind): Adjust.
(trees_{in,out}::key_mergeable): Delete tmpl_partial case.
(depset::hash::make_dependency): Directly create the redirect here.
(depset::hash::add_specializations): Do not detect partial
specializations here.
gcc/cp/
* module.cc (enum depset::entity_kind): Add EK_PARTIAL,
EK_DIRECT_HWM.
(enum depset::disc_bits): Delete DB_PARTIAL_BIT.
(depset::is_partial): Delete.
(depset::fini_partial_redirect): Assert EK_PARTIAL.
(depset::entity_kind_name): Add EK_PARTIAL.
(trees_out::decl_node): Adjust redirect asserts.
(trees_out::get_merge_kind): No partial template.
(depset::hash::make_dependency): Partials create EK_PARTIAL.
(depset::hash::add_partial_entities): Adjust,
(depset::hash::add_specializations): Adjust.
(depset::hash::add_mergeable): Adjust.
(sort_cluster, module_state::write_cluster): Likewise.
(module_state::write_{entities,pendings}): Adjust.
gcc/testsuite/
* g++.dg/modules/tpl-spec-5_a.C: Adjust scan.
gcc/cp/
* module.cc (depset::hash::add_partial_redirect): Break out
helpers ...
(depset::fini_partial_redirect): ... this and ...
(depset::hash::init_partial_redirect): ... this. Call them.
(partial_specializations): New vector.
(depset::hash::make_dependency): Deal with partial
specializations.
(depset::hash::add_partial_entities): New.
(deset::hash::add_specializations): We may have added a partial.
(module_state::write_cluster): Count partials.
(module_state::write_pendings): Likewise.
(module_state::write): Add partials.
(set_defining_module): Append explicit specializations.
gcc/testsuite/
* g++.dg/modules/constrained-partial-1_[ab].C: New.
gcc/cp/
* mapper-client.cc (spawn_mapper_program): Use @ to indicate
looking in install dir.
gcc/
* doc/invoke.texi (fmodule-mapper): Document behaviour.
gcc/testsuite/
* g++.dg/modules/extern-tpl-1_b.C: Adjust options.
* g++.dg/modules/inc-xlate-1_e.C: Adjust options.
* g++.dg/modules/legacy-2_b.H: Adjust options.
* g++.dg/modules/legacy-6_[cdef].C: Adjust options.
2020-11-04 Nathan Sidwell <nathan@acm.org>
gcc/testsuite/
* g++.dg/modules/builtin-3_[ab].C: Adjust for i686
gcc/cp/
* mapper-resolved.cc: define INCLUDE_ALGORITHM.
2020-11-03 Nathan Sidwell <nathan@acm.org>
Merge trunk a52bf016433
c++: using-decl instantiation
Cleanup unnecessary or stale changes.
gcc/cp/
* class.c (clone_cdtor): Fix erroneous comment.
* decl.c (finish_enum_value_list): Revert local change.
gcc/
* doc/cppopts.texi (EE): Delete stale info.
libcpp.
* files.c (cpp_main_controlling_macro): Delete.
* include/cpplibc.h (cpp_main_controlling_macro): Delete.
* mkdeps.c: Rename bmi->cmi
Merge trunk 444655b6f02
c++: cp_tree_equal cleanups
2020-11-02 Nathan Sidwell <nathan@acm.org>
libcpp/
* include/cpplib.h (cpp_enable_filename_token): Delete.
* macro.c (cpp_enable_filename_token): Delete.
Merge trunk b2a31e2c341
gcc/cp/
* module.cc (module_state::write_elf): Remove obsolete FIXME.
2020-10-30 Nathan Sidwell <nathan@acm.org>
Add DECL_ACCESS support
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Stream using_decl decls.
(trees_out::lang_decl_vals): Do not stream DECL_ACCESS that is
actually an access alterer.
(trees_in::read_class_def): Reconstruct DECL_ACCESS.
gcc/testsuite/
* g++.dg/modules/access-1_[abc].C: New.
gcc/cp/
* module.cc: Address more FIXMES.
gcc/cp/
* cp-tree.h (maybe_check_all_macros): Declare.
* module.cc (slurping::release_macros): New.
(slurping::~slurping): Use it.
(module_state::maybe_completed_reading): Use it.
(maybe_check_all_macros): New, broken out of ...
(finish_module_processing): ... here. DO NOT CALL.
* parser.c (cp_lexer_new_main): Call it here.
Cache Path Of Instantiation
gcc/cp/
* cp-tree.h (struct tinst_level): Add path and visible bitmaps.
* module.cc (path_of_instantiation): New recursive helper broken
out of ...
(module_visible_instantiation): ... here. Call it.
* pt.c (push_tinst_level_loc): Nullify path and visible bitmaps.
2020-10-29 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc: Address a bunch of FIXMEs.
Prague anon-enum keying by underlying type
gcc/cp/
* module.cc (trees_{in,out}::key_mergeable): Stream MK_enum
underlying type decl.
(check_mergeable_decl): The enum itself is on the ovl list.
* name-lookup.c (init_global_partition): Copy the enum for the
first member of an anonymous enum.
gcc/testsuite/
* g++.dg/modules/enum-8_[abcd].[CH]: New.
gcc/cp/
* module.cc (trees_out::get_merge_kind): Resolve FIXMEs.
(trees_out::key_mergeable): Likewise.
gcc/cp/
* module.cc (trees_out::get_merge_kind): Only function-scope
entities we meet are implicit TYPE_DECLs.
Merge trunk 9703b8d98c1
c++: Stop (most) function-scope entities having a template header
Merge trunk bafcf452c79
opts: Sanity check for param names.
gcc/
* params.opt: Fixup lazy-load parm name.
gcc/testsuite/
* g++.dg/modules/freeze-1_d.C: Adjust.
* g++.dg/modules/nest-1_c.C: Adjust.
Merge trunk 53dede0f04b
CSE conversions within sincos [Alexandre Oliva]
2020-10-28 Nathan Sidwell <nathan@acm.org>
Merge trunk 4289e488ddd
c++: Make OMP UDR DECL_LOCAL_DECL_P earlier
Merge trunk 7d5f38e49e5
c++: Refactor push_template_decl
gcc/cp/
* module.cc: More FIXME addressing.
(trees_out::get_merge_kind): Assert function-scope entities are
not unexpected.
gcc/cp/
* module.cc: More FIXME fixing.
gcc/cp/
* lang-specs.h: Fix -xc++-{,user-,system-}header.
2020-10-27 Nathan Sidwell <nathan@acm.org>
No special anon-namespace naming
gcc/cp/
* name-lookup.h (add_imported_namespace): Drop anon name parm.
* name-lookup.c (anon_name): Delete.
(make_namespace): Nothing special for anonymous namespace.
(add_imported_namespace): Likewise.
* module.cc (module_state::{read,write}_namespaces): Anon
namepspace does not need naming.
gcc/testsuite/
* g++.dg/modules/xtreme-tr1{.h,_a.H,_b.C}: New.
gcc/cp/
* module.cc (trees_out::vec_chained_decls): Detect anonymous
struct with typedef name.
(trees_{in,out}::add_indirect): Assert TYPE_DECL is typedef or
type's TYPE_NAME.
(trees_{in,out}::{read,write}_class_def): Cope with anon-structs
with typedef names.
gcc/testsuite/
* g++.dg/modules/tdef-8_[ab].C: New.
gcc/cp/
* module.cc (depset_cmp): Decide strcmp question.
(module_state::write_prepare_maps): Document pruning question.
gcc/cp/
* module.cc (trees_{in,out}::{read,write}_class_def): Remove
nested udt FIXMEs. They are no longer a thing.
Merge trunk 54380d42e6f
c++: Kill nested_udts
2020-10-26 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_{in,out{::type_node): Stream attribs.
gcc/cp/
* module.cc (trees_out::type_node): Stream alignment.
(trees_in::type_node): Alignment is a log.
gcc/testsuite/
* g++.dg/modules/align-type-1_[ab].C: New.
gcc/cp/
* module.cc (trees_{in,out}::tree_list): Address more Fixmes,
either by obsoleting them, or coding around their confusion.
libcody/
Rebase on upstream, robustify enable-checking.
gcc/cp/
* module.cc (trees_{in,out}::tree_list): New streamers.
(trees_{in,out}::{read,write}_class_def): Use them.
gcc/cp/
* module.cc: Remove or clarify more now-obsolete FIXMEs.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Document
middle-endy/debugy BLOCK fields. Document OPTIMIZATION_NODE &
TARGET_OPTION_NODE issue.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): RESULT_DECL is like PARM_DECL.
libcody/
Rebase on upstream, fix enable-checking & bootstrap
gcc/cp/
* module.cc (trees_in::chained_decls): Chain should always be null.
libcody/
Rebase on upstream, collect new autoconf bits.
2020-10-23 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc: Address 3 now-irrelevant FIXMES.
gcc/cp/
* module.cc (enum merge_kind): Reorder.
(merge_kind_name): Likewise.
Merge trunk cd8b7d7b24c
Link with the configured net lib on vxworks7
Merge trunk e957b86ca26
libstdc++: Rebase include/pstl to current upstream
gcc/testsuite/
PR 97549 workaround
* g++.dg/modules/xtream-header{,-2}.h: Don't include <exception>.
Merge trunk 310fe80babe
Fortran: class.c - update vtable comment
gcc/cp/
* mapper-server.cc: Disable networking when not available.
2020-10-22 Nathan Sidwell <nathan@acm.org>
libcody/ 9e71a7c Avoid fstatat when unavailable
gcc/
* configure.ac: Check for fstatat & O_CLOEXEC.
* configure: Regenerated.
* config.in: Regenerated.
gcc/cp/
* mapper-resolver.cc: Include config.h, system.h. Cope with lack
of fstatat.
* module.cc: Workaround lack of O_CLOEXEC.
Block-scope structures, like wow, why worked so far?
gcc/cp/
* module.cc (trees_{in,out}::decl_value): Stream local struct
definitions.
gcc/testsuite/
* g++.dg/modules/local-struct-1_[ab].C: New.
gcc/cp/
* module.cc (trees_in::is_matching_decl): Add builtin data
copying.
(trees_in::read_function_def): Recontextualize parms.
* decl.c (duplicate_decls): Refactor builtin copying.
gcc/testsuite/
* g++.dg/modules/builtin-7_[ab].[HC]: New.
libcody/
* fatal.cc: noexcept fix from Iain Sandoe.
gcc/cp/
* gcc/cp/decl.c (duplicate_decls_): Return error_mark_node for
extern "C" collision.
* gcc/cp/module.cc (check_mergeable_decl): Check extern "C"-ness.
(trees_in::is_matching_decl): Check extern "C" builtin mismatch.
Propagate flags on smashing a builtin.
gcc/testsuite/
* g++.dg/modules/builtin-6_[ab].[HC]: New.
gcc/cp/
* mapper-client.cc: Enable networking only when CODY_NETWORKING
* mapper-server.cc: Likewise.
libcody/
Rebase b26a54f | Enable networking only on known-good systems
2020-10-21 Nathan Sidwell <nathan@acm.org>
* Makefile.def: Don't build libcody for build. Do not install it
either.
* Makefile.in: Rebuilt.
gcc/testsuite/
* g++.dg/modules/builtin-3_[ab].C: Scans for darwin, thanks Iain
AIX fixinclude
fixincludes/
* inclhack.def (aix_physadr_t): New.
* fixincl.x: Regenerated.
Vector bools
gcc/cp/
* module.cc (trees_{in,out}::type_node): Deal with non-standard bools.
gcc/testsuite/
* g++.dg/modules/bool-1{,_[abc]}.[CHh]: New.
AIX test fix
gcc/testsuite/
* g++.dg/modules/literals-1_[ab].C: Add -Wno-psabi
2020-10-20 Nathan Sidwell <nathan@acm.org>
gcc/
* Makefile.in (INCLUDES): Add $(CODYINC).
gcc/cp/
* Make-lang.in (GIT_INFO): Support stricter seds.
Local-extern fix
gcc/cp
* name-lookup.c (push_local_extern_decl_alias): Fix default arg bug.
Local-extern fix
gcc/cp
* name-lookup.c (push_local_extern_decl_alias): Recontextualize
alias' parms, drop any default args.
gcc/testsuite/
* g++.dg/modules/local-extern-2.H: New.
Libcody by value
* Makefile.def: Add libcody as a component library.
* Makefile.in: Change libcody from an external library to a
component.
* Makfile.tpl: Likewise.
* configure.ac: Likewise.
* configure: Regenerated.
gcc/
* Makefile.in: Likewise.
* configure.ac: Likewise.
* configure: Regenerated.
* libcody/: Import by value.
gcc/cp/
* module.cc (elf_in::begin): Fix madvise on AIX.
2020-10-19 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc: Add testing for non-mmapped access.
(elf_out::grow): Assert aligned at start.
(elf_out::write): Align afterwards.
gcc/testsuite/
* g++.dg/modules/sym-subst-3_a.C: Some assemblers say .global.
gcc/cp/
* module.cc (module_state::write_macro_locs): Macro loc count is a
count.
(module_state::read_prepare_maps): Adjust.
gcc/testsuite/
* g++.dg/modules/macloc-2_[ab].[HC]: New.
2020-10-16 Nathan Sidwell <nathan@acm.org>
Merge trunk ccb4f20cbee
gcc/cp/
* name-lookup.c (do_nonmember_using_decl): Fix duplication case.
2020-10-14 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.h (enum WMB_Flags): New.
(walk_module_binding): Adjust.
* name-lookup.c (walk_module_binding): Replace callbacks, bool
args by single flags arg.
* module.cc (depset::hash::add_binding): Replace bool args by
flags.
gcc/cp/
* module.cc (trees_out::core_bools): Adjust initialized var
handling.
(has_definition): Likewise.
(trees_{in,out}::{read,write}_var_def): Likewise.
(module_state::{read,write}_inits): Just stream the decls.
gcc/testsuite/
* g++.dg/modules/hdr-init-1_[abc].[HC]: New.
gcc/cp/
* module.cc (depset::hash::finalize_dependencies): Remove
pre-p2003 kludge.
p2003 internal linkage & header units
gcc/cp/
* name-lookup.c (get_fixed_binding_slot): Promote internal GM
entities to global slot.
* module.cc (has_definition): Add internal linkage fns/vars in GM.
(depset::hash::make_dependency): Internal linkage in GM is ok.
gcc/cp/
* pt.c (lookup_template_class_1): Delete erroneous fixme.
(tsubst_template_decl): Delete questioning fixme, problem, if any,
is on trunk.
(get_mergeable_specialization_flags): Optimize specialization scan.
Merge trunk 068644a1497
c++: DECL_FRIEND_P cleanup
Merge trunk 06bec55e80d
gcc/cp/
* decl.c (duplicate_decls): Remove obsolete FIXME.
* pt.c (push_template_decl): Remove about-to-be obsolete FIXME.
gcc/cp/
* decl.c (xref_tag_1): Refactor module handling. Push imported
decl into TU's slot
* name-lookup.c (lookup_elaborated_type_1): Fixme fixed.
* module.cc (set_instantiating_module): Accept template_decls.
gcc/testsuite/
* g++.dg/modules/part-7_[abc].C: New.
* g++.dg/modules/hdr-1_[abc].[HC]: New.
2020-10-09 Nathan Sidwell <nathan@acm.org>
libcpp/
* lex.c (do_peek_module): Update plan for unicode.
gcc/cp/
* decl.c (grokmethod): Remove comment about -fmodule-implicit-inline.
Block-scope externs disallowed
gcc/cp/
* decl.c (start_decl): Reject block-scope extern in module
purview.
gcc/testsuite/
* g++.dg/modules/local-extern-1.C: New.
Remove unused code
gcc/cp/
* friend.c (add_friend): Remove #if'd out code
Cleanup name-lookup interface
gcc/cp/
* name-lookup.h (get_field_ident, lookup_field_ident): Don't
declare.
(mergeable_class_entities): Rename to ...
(lookup_class_binding): ... here.
* name-lookup.c (mergeable_class_entities): Rename to ...
(lookup_class_binding): ... here.
(get_field_ident, lookup_field_ident): Move to module.cc
* module.cc (get_field_ident, lookup_field_ident): Moved here.
Only deal with anon fields.
(trees_{in,out}::tree_node): Adjust.
(trees_in::key_mergeable): Adjust.
Remove unneeded decls
gcc/cp/
* name-lookup.c (lookup_class_member, void set_class_bindings)
(tree lookup_all_conversions): Delete unused decls.
(insert_late_enum_def_bindings): Delete duplicate decl.
Clean up mangling documentation
gcc/cp/
* mangle.c (write_module): Update grammar description.
* module.cc (module_state::mangle): Clarify why partitions might
be significant.
Clean up some c-family pieces
gcc/
* langhooks.h (struct lang_hooks): Replace
preprocess_translate_include with preprocess_options.
* langhooks-def.h: Replace LANG_HOOKS_PREPROCESS_INCLUDE_TRANSLATE
with LANG_HOOKS_PREPROCESS_OPTIONS.
gcc/c-family/
* c-cppbuiltins.c (c_cpp_builtins): Comment __cpp_modules.
* c-opts.c (c_common_post_options): Replace include_translate hook
with more general preprocess_options hook.
gcc/cp/
* cp-lang.c: Replace LANG_HOOKS_PREPROCESS_TRANSLATE_INCLUDE with
LANG_HOOKS_PREPROCESS_OPTIONS.
* cp-tree.h (module_translate_include): Don't declare.
(module_preprocess_options): Declare.
* module.cc (module_translate_include): Rename to ..
(maybe_translate_include): ... here. Make static.
(module_preprocess_options): New.
2020-10-08 Nathan Sidwell <nathan@acm.org>
Merge trunk d1c566d72d9
Undeclared builtin merging
gcc/cp/
* module.cc (trees_in::is_matching_decl): Merge into undeclared
builtin.
* name-lookup.cc (check_module_override): Rename is_friend parm.
(do_pushdecl): Ignore hidden imports.
gcc/testsuite/
* g++.dg/modules/builtin-5_[ab].[HC]: New.
2020-10-07 Nathan Sidwell <nathan@acm.org>
Streamed classes always have a member vector.
gcc/cp/
* module.cc (trees_out::decl_value): Assert no pmfs.
(trees_in::decl_value): Ensure existing duplicate class has member
vector.
(tree_out::write_class_def): Ensure there's a method vector.
* name-lookup.c (set_class_bindings): Extra can be negative,
meaning always. Return the member vector.
(mergeable_class_entities): Simplify.
(lookup_field_ident): Simplify.
gcc/cp/
* module.cc (module_state::read_prepare_maps): Only inform of
location shortage once.
Fix -save-temps & header units
gcc/cp/
* module.cc (loc_spans::maybe_init): New.
(loc_spans::init): Allow NULL map.
(preprocess_module, preprocessed_module): Call maybe_init.
gcc/libcpp/
* internal.h (enum include_type): Rename IT_MAIN_INJECT to IT_PRE_MAIN.
* init.c (cpp_read_main): Adjust _cpp_stack_file call. Adjust
first line marker if no preprocessed marker found.
(read_original_filename): Peek characters in buffer, not token.
(read_original_directory): Likewise.
* files.c (_cpp_stack_file): Adjst.
gcc/testsuite/
* g++.dg/modules/preproc-2_[ab].[HC]: New.
Merge trunk 4e62aca0e05
c++: block-scope externs get an alias [PR95677,PR31775,PR95677]
Merge trunk e089e43365f
Merge trunk 255aa06d40d
Merge trunk bf490f06360
2020-10-05 Nathan Sidwell <nathan@acm.org>
Pick 255aa06d40d (c++: Make spell corrections consistent)
2020-10-02 Nathan Sidwell <nathan@acm.org>
Merge trunk 679dbc9dcec
c++: Kill DECL_ANTICIPATED
Merge trunk 7ee1c0413e2
c++: Hash table iteration for namespace-member spelling
gcc/cp/
* name-lookup.c (consider_binding): New, broken out of ...
(consider_binding_level): ... here. Use it, add MODULE_VECTOR
support.
Merge trunk 9340d1c97b8
c++: cleanup ctor_omit_inherited_parms
gcc/cp/
* module.cc (trees_out::decl_value): Adjust for new ctor_omit API.
Merge trunk 31584824665
Merge trunk dfaa24c974b
c++: Kill DECL_HIDDEN_P
gcc/cp/
* name-lookup.c (walk_module_binding): Update for new HIDDEN markers.
Merge trunk c2978b34058
2020-10-01 Nathan Sidwell <nathan@acm.org>
Merge trunk c2978b34058
Merge trunk 734eed68537
c++: Kill DECL_HIDDEN_FRIEND_P
Merge trunk 65167982efa
Merge trunk 7cbfe0894de
Merge trunk adcf8a11c77
Merge trunk cc61827b55e
2020-09-30 Nathan Sidwell <nathan@acm.org>
Merge trunk 39a27bb01aa
Merge trunk c74e6f7cfd7
Apply trunk 7cbfe0894de
c++: Hiddenness is a property of the symbol table
Apply trunk adcf8a11c77
c++: Name lookup simplifications
Apply trunk cc61827b55e
c++: Identifier type value should not update binding
Apply trunk c74e6f7cfd7
c++: Adjust pushdecl/duplicate_decls API
gcc/cp/
* tree.h (ovl_insert): Make usingness unsigned.
* tree.c (ovl_insert): Make usingness unsigned, change semantics.
* name-lookup.c (do_nonmember_using_decl): Adjust ovl_insert call.
Merge trunk 00aaae03db2
c++: Replace tag_scope with TAG_how
Merge trunk 0d8f3f612d6
2020-09-24 Nathan Sidwell <nathan@acm.org>
Merge trunk d13c0ae859f
2020-09-14 Nathan Sidwell <nathan@acm.org>
Merge trunk cd6743e9c41
gcc/cp/
* module.cc (trees_out::get_merge_kind): Add asserts & FIXMEs.
gcc/cp/
* pt.c (primary_template_specialization_p): Use
VAR_OR_FUNCTION_DECL_P.
(push_template_decl_real): Likewise.
* module.cc (trees_out::chained_decls): Use
VAR_OR_FUNCTION_DECL_P.
(trees_out::get_merge_kind, trees_in::is_matching_decl)
(depset::hash::make_dependency, depset::hash::add_binding_entity)
(specialization_add): Likewise.
Merge trunk d106029c2aa
Merge trunk 10f51543bb8
libstdc++: Add compile-time checks to__glibcxx_assert [PR 71960]
2020-09-11 Nathan Sidwell <nathan@acm.org>
Concepts and local externs
gcc/cp/
* decl.c (grokfndecl): Don't attach to local extern.
gcc/testsuite/
* concepts/local-extern.C: New.
Local extern fns do not get template header
gcc/cp/
* module.cc (trees_out::chained_decls): Also mark local fns for
by-value walking.
(trees_out::decl_node): Assert we don't meet a local var or fn.
(trees_out::get_merge_kind): Local fns are also unique.
* pt.c (push_template_decl_real): Local fns also lack a header.
(tsubst_function_decl): Cope with local fns.
(tsubst_decl): Adjust VAR_DECL tsubsting.
gcc/testsuite/
* g++.dg/modules/tpl-extern-{var,fn}-1_{a.H,b.C}: New.
2020-09-09 Nathan Sidwell <nathan@acm.org>
Local extern vars do not get template header
gcc/cp/
* cp-tree.h (TINFO_VAR_DECLARED_CONSTINIT): Replace with ...
(DECL_DECLARED_CONSTINIT_P): ... here, decl_lang_flag 7.
* decl.c (start_decl): Set DECL_DECLARED_CONSTINIT_P as necessary.
(cp_finish_decl): Likewise.
* pt.c (push_template_decl_real): Don't add a header for
DECL_LOCAL_DECL_P VAR_DECLS.
(tsubst_decl): Check for VAR_DECLS lacking template info are
local. No need to handle TINFO_VAR_DECLARED_CONSTINIT specially.
(tsubst_expr): Likewise.
(instantiate_decl): Likewise.
DECL_LOCAL_DECL_P
gcc/cp/
* cp-tree.h (DECL_LOCAL_FUNCTION_P): Rename to ...
(DECL_LOCAL_DECL_P): ... here. Apply to VAR_DECLS too.
* decl.c (start_decl): Set DECL_LOCAL_DECL_P as approriate.
(start_decl_1): Reformat.
(omp_declare_variant_finalize_one): Use DECL_LOCAL_DECL_P.
(local_variable_p): Simplify.
* module.cc (trees_out::chained_decls): Stream DECL_LOCAL_DECL_P
by value.
(trees_out::get_merge_kind): DECL_LOCAL_DECL_P decls are unique.
* name-lookup.c (set_decl_context_in_fn): Assert DECL_LOCAL_DECL_P
as expected, don't set it here.
(do_pushdecl): Don't call it for friends or dependent types.
(is_local_extern): Simplify.
* parser.c (cp_parser_postfix_expression): Use DECL_LOCAL_DECL_P.
(cp_parser_omp_declare_reduction): Set DECL_LOCAL_DECL_P.
Refactor.
* pt.c (check_default_tmpl_args): Use DECL_LOCAL_DECL_P.
(tsubst_expr): Adjust omp reduction case.
(tsubst_omp_udr): Add comments.
(type_dependent_expression_p): Adjust.
* call.c (equal_functions): Adjust.
* semantics.c (finish_call_expr): Adjust.
libcc1/
* libcp1plugin.cc (plugin_build_call_expr): Use DECL_LOCAL_DECL_P.
2020-09-08 Nathan Sidwell <nathan@acm.org>
Change cxx_int_tree_map to cxx_decl_tree_map.
gcc/cp/
* cp-tree.h (struct cxx_int_tree_map): Rename to ...
(struct cxx_decl_tree_map): ... here.
* cp-gimplify.c (cxx_int_tree_map_hasher): Rename to ...
(cxx_decl_tree_map_hasher): ... here. Update member fns
(cp_genericize_r): Adjust extern_decl_map lookup.
* name-lookup.c (set_local_extern_decl_linkage): Adjust
extern_decl_map insertion.
2020-09-12 Nathan Sidwell <nathan@acm.org>
FLAG DAY! Mapper reponse format change in LibCody
gcc/cp/
* mapper-client.cc (module_client::open_module_client): Use
Client::PC_PATHNAME.
* mapper-resolver.cc (module_resolver::ModuleRepoRequest): Use
PathnameResponse.
(module_resolver::cmi_response): Likewise.
(module_resolver::IncludeTranslateRequest): Use BoolResponse and
PathnameResponse.
* module.cc (module_state::set_filename): Use Client::PC_PATHNAME.
(module_translate_include): Use Client::PC_BOOL and
Client::PC_PATHNAME.
2020-09-03 Nathan Sidwell <nathan@acm.org>
Merge trunk 8bc0f24d7a2.
Instantiation after extern instantiation.
gcc/cp/
* module.cc (trees_in::read_class_def): Maybe set
CLASSTYPE_INTERFACE.
gcc/testsuite/
* g++.dg/modules/extern-tpl-2_[abc].[CH]: New.
2020-09-02 Nathan Sidwell <nathan@acm.org>
libcpp/
* files.c (_cpp_stack_file): Don't try and xlate include-next.
Extern instantiations.
gcc/cp/
* module.cc (trees_{in,out}::core_bools): Drop duplicate comdat
flag.
(trees_in::is_matching_decl): Don't propagate not-really-extern
here.
(trees_{in,out}::{read,write}_function_def): Stream
not-really-extern here.
gcc/testsuite/
* g++.dg/modules/extern-tpl-1_[abc].[CH]: New.
Rename -fnote-include-translate to -flang-info-include-translate.
gcc/cp/
* (module_translate_include): Check if matches trailing part of
header name.
(handle_module_option): Adjust.
gcc/c-family/
* c.opt (-fnote-include-translate{,=}): Rename to ...
(-flang-info-include-translate{,=}): ... here.
(-fnote-include-translate=query): Delete.
gcc/
* doc/invoke.texi: Update documentation.
2020-08-31 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* lang-specs.h: c++headers always do directives-only preprocessing
in modules mode.
Deal with running out of locations.
gcc/cp/
* module.cc (module_state::read_prepare_maps): New.
(module_state::write_{ordinary,macro}_maps): Adjust.
(struct module_state_config): Record number of locations needed.
(module_state::read_location): Deal with lack of locations.
(module_state::{read,write}_config): Adjust.
(module_state::read_initial): Adjust.
gcc/cp/
* mapper.h (module_resolver): Default to no xlation.
* mapper-resolver.cc (module_resolver::read_tuple_file): Don't
fail on zero-length files.
Add control for default header translation rules.
gcc/cp/
* mapper-client.cc (module_client::open_module_client): Better
error reporting.
* mapper-resolver.cc (module_resolver::module_resolver): Specify
default translate behavior.
(module_resolver::IncludeTranslateRequest): Check it.
* mapper-server.cc (flag_xlate): New.
(process_args): Rename -f->-m add -t
(main): Adjust.
* mapper.h (module_resolver): Add default_xlate field.
gcc/testsuite/
* g++.dg/modules/inc-xlate-1_e.C: Adjust.
* g++.dg/modules/legacy-2_b.H: Adjust.
* g++.dg/modules/legacy-6.map: Adjust.
* g++.dg/modules/legacy-6_[cd].C: Adjust.
* g++.dg/modules/map-2.C: Adjust.
gcc/cp/
* name-lookup.c (get_fixed_binding_slot): Don't stat-hack a
namespace.
* module.cc (trees_in::assert_definition): Header units are
module_purview, but ok.
gcc/testsuite/
* g++.dg/modules/ns-dup-1_[ab].C: New.
2020-08-28 Nathan Sidwell <nathan@acm.org>
Fix pushing imported namespaces.
gcc/cp/
* module.cc (depset::hash_add_namespace): Don't mark bindings
special.
(struct add_binding_data): Record finding a namespace.
(depset::hash::add_binding_entity): Make namespaces idempotent.
(depset::hash::add_namespace_entities): Clear met_namespace.
(module_state::write): Zap partitions bitmap if empty.
* name-lookup.c (push_namespace): Ensure namespace is in
MODULE_SLOT_CURRENT.
* ptree.c (cxx_print_xnode): Show more detail on MODULE_VECTOR.
gcc/testsuite/
* g++.dg/modules/ns-imp-1_[abc].C: New.
* g++.dg/modules/ns-part-1_[abc].C: New.
gcc/testsuite/
* lib/prune.exp (prune_ices): Adjust regexp.
Merge trunk cb3c3d63315.
Whee, all up to date!
Merge trunk f1612b8ae8a.
c++: Check satisfaction before non-dep convs. [CWG2369]
gcc/testsuite/
* g++.dg/modules/concept-[13]_b.C: Adjust.
Merge trunk e6e01618e83.
2020-08-27 Nathan Sidwell <nathan@acm.org>
Stream MEM_REFs, who knew?
gcc/cp/
* module.cc (trees_{in,out}::start): Permit MEM_REFs.
(trees_{in,out}::core_bools): Likewise.
gcc/testsuite/
* g++.dg/modules/memref-1_[ab].C: New.
2020-08-27 Nathan Sidwell <nathan@acm.org>
Jeff Chapman II <jchapman@lock3software.com>
Fix hash table breakage.
gcc/cp/
* name-lookup.c (push_namespace): Do not create slot on first
lookup.
gcc/testsuite/
* g++.dg/modules/string-view1.C: New test.
* g++.dg/modules/string-view2.C: Ditto.
2020-08-27 Nathan Sidwell <nathan@acm.org>
Merge trunk 708b3600d04.
2020-08-26 Nathan Sidwell <nathan@acm.org>
Merge trunk 17abcc77341.
libstdc++: Replace operator>>(istream&, char*) [LWG 2499]
Fix type lang specific changing.
gcc/cp/
* lex.c (copy_lang_type): Split allocation & assignment to be
conditional-breakpoint friendly.
* module.cc (trees_in::read_class_def): Update variants if we
alter TYPE_LANG_SPECIFIC.
* name-lookup.c (maybe_lazily_declare): Look at main variant's
decl.
gcc/testsuite/
* g++.dg/modules/tdef-inst-1{.h,_[ab].C}: New.
Fix int_cst caching
gcc/
* tree.c (cache_integer_cst): Fix pointer type indices.
Cherry pick 794275711bd.
gcc/cp/
* name-lookup.c (op_unqualified_lookup): Don't check if matches
global lookup.
gcc/testsuite/
* g++.dg/lookup/operator-[12].C: New.
2020-08-25 Nathan Sidwell <nathan@acm.org>
Operator function lookups in templates
gcc/cp/
* decl.c (poplevel): A local-binding tree list holds the name in
TREE_PURPOSE.
* name-lookup.c (update_local_overload): Add id to TREE_PURPOSE.
(lookup_name_1): Deal with local-binding error_mark_node marker.
(op_unqualified_lookup): Return error_mark_node for 'nothing
found'. Do other short circuiting here.
(maybe_save_operator_binding): Reimplement to always cache a
result.
(push_operator_bindings): Deal with 'ignore' marker.
gcc/testsuite/
* g++.dg/modules/operator-1_[ab].C: New.
2020-08-20 Nathan Sidwell <nathan@acm.org>
Friend specialization overhaul part 1
gcc/cp/
* module.cc
gcc/testsuite/
* g++.dg/modules/tpl-friend-[12]_a.C: Adjust scan.
* g++.dg/modules/tpl-friend-merge-1*: New.
Do not stream hidden_friend_p.
gcc/cp/
* module.cc (trees_{in,out}::lang_decl_bools): Do not stream
anticipated_p or hidden_friend_p.
* name-lookup.c (name_lookup::adl_class_fns): DECL_ANTICIPATED is
not informative.
Reimplement module binding extraction.
gcc/cp/
* module.cc (depset::clear_hidden_binding): New.
(depset::hash::add_binding): Delete.
(struct add_binding_data): New.
(depset::hash::add_binding_entity): New.
(writable_cmp): Delete.
(depset::hash::add_namespace_entities): Reimplement.
(module_state::write_cluster): Adjust for unscoped enums.
* name-lookup.h (extract_module_binding): Replace with ...
(walk_module_binding): ... this.
* name-lookup.c (STAT_TYPE_HIDDEN): New.
(extract_module_binding): Replace with ...
(walk_module_binding): ... this.
2020-08-19 Nathan Sidwell <nathan@acm.org>
ODR-check enums!
gcc/cp/
* module.cc (trees_in::maybe_duplicate): New.
(trees_in::read_enum_def): ODR check duplicate.
gcc/testsuite/
* g++.dg/modules/enum-bad-1_[ab].[HC]: New.
2020-08-18 Nathan Sidwell <nathan@acm.org>
Cherry pick 634046d1a81.
gcc/cp/
* name-lookup.c (qualify_lookup): Drop lambda checking here.
Reorder namespace & type checking.
(lookup_name_1): Do hidden lambda checking here.
Fix -save-temps issue.
libcpp/
* lex.c (cpp_maybe_module_directive): Increment prevent_expansion
if not expanding.
2020-08-17 Nathan Sidwell <nathan@acm.org>
gcc/
* doc/invoke.texi (C++ Module Mapper): Update documentation.
Fix disable checking build.
gcc/cp
* module.cc (note_def_cache_hasher): GTY needs this even when
unused.
(not_defs_table_t, note_defs): Likewise.
gcc/
* gcc.c (driver::maybe_print_and_exit): Warn about disable-checking.
2020-08-14 Nathan Sidwell <nathan@acm.org>
Cherry pick e97201385a9.
gcc/cp/
* name-lookup.h (lookup_name_real, lookup_name_nonclass): Rename
to ...
(lookup_name): ... these new overloads.
* name-lookup.c (identifier_type_value_1): Rename lookup_name_real
call.
(lookup_name_real_1): Rename to ...
(lookup_name_1): ... here.
(lookup_name_real): Rename to ...
(lookup_name): ... here. Rename lookup_name_real_1 call.
(lookup_name_nonclass): Delete.
* call.c (build_operator_new_call): Rename lookup_name_real call.
(add_operator_candidates): Likewise.
(build_op_delete_call): Rename lookup_name_nonclass call.
* parser.c (cp_parser_lookup_name): Likewise.
* pt.c (tsubst_friend_class, lookup_init_capture_pack): Likewise.
(tsubst_expr): Likewise.
* semantics.c (capture_decltype): Likewise.
libcc1/
* libcp1plugin.cc (plugin_build_dependent_expr): Rename
lookup_name_real call.
Cherry pick db1c2a89db0.
gcc/cp/
* cp-tree.h (LOOKUP_HIDDEN): Delete.
(LOOKUP_PREFER_RVALUE): Adjust initializer.
* name-lookup.h (enum class LOOK_want): Add HIDDEN_FRIEND and
HIDDEN_LAMBDA flags.
(lookup_name_real): Drop flags parm.
(lookup_qualified_name): Drop find_hidden parm.
* name-lookup.c (class name_lookup): Drop hidden field, adjust
ctors.
(name_lookup::add_overload): Check want for hiddenness.
(name_lookup::process_binding): Likewise.
(name_lookup::search_unqualified): Likewise.
(identifier_type_value_1): Adjust lookup_name_real call.
(set_decl_namespace): Adjust name_lookup ctor.
(qualify_lookup): Drop flags parm, use want for hiddenness.
(lookup_qualified_name): Drop find_hidden parm.
(lookup_name_real_1): Drop flags parm, adjust qualify_lookup
calls.
(lookup_name_real): Drop flags parm.
(lookup_name_nonclass, lookup_name): Adjust lookup_name_real
calls.
(lookup_type_scope_1): Adjust qualify_lookup calls.
* call.c (build_operator_new_call): Adjust lookup_name_real call.
(add_operator_candidates): Likewise.
* coroutines.cc (morph_fn_to_coro): Adjust lookup_qualified_name
call.
* parser.c (cp_parser_lookup_name): Adjust lookup_name_real calls.
* pt.c (check_explicit_specialization): Adjust
lookup_qualified_name call.
(deduction_guides_for): Likewise.
(tsubst_friend_class): Adjust lookup_name_real call.
(lookup_init_capture_pack): Likewise.
(tsubst_expr): Likewise, don't look in namespaces.
* semantics.c (capture_decltype): Adjust lookup_name_real. Don't
look in namespaces.
libcc1/
* libcp1plugin.cc (plugin_build_dependent_exp): Adjust
lookup_name_real call.
Cherry pick c38f8785205.
gcc/cp/
* cp-tree.h (LOOKUP_PREFER_TYPES, LOOKUP_PREFER_NAMESPACES)
(LOOKUP_NAMESPACES_ONLY, LOOKUP_TYPES_ONLY)
(LOOKUP_QUALIFIERS_ONL): Delete.
(LOOKUP_HIDDEN): Adjust.
* name-lookup.h (enum class LOOK_want): New.
(operator|, operator&): Overloads for it.
(lookup_name_real): Replace prefer_type & namespaces_only with
LOOK_want parm.
(lookup_qualified_name): Replace prefer_type with LOOK_want.
(lookup_name_prefer_type): Replace with ...
(lookup_name): ... this. New overload with LOOK_want parm.
* name-lookup.c (struct name_lookup): Replace flags with want and
hidden fields. Adjust constructors.
(name_lookyp::add_overload): Correct hidden stripping test. Update
for new LOOK_want type.
(name_lookup::process_binding): Likewise.
(name_lookup::search_unqualified): Use hidden flag.
(identifier_type_value_1): Adjust lookup_name_real call.
(set_decl_namespace): Adjust name_lookup ctor.
(lookup_flags): Delete.
(qualify_lookup): Add LOOK_want parm, adjust.
(lookup_qualified_name): Replace prefer_type parm with LOOK_want.
(lookup_name_real_1): Replace prefer_type and namespaces_only with
LOOK_want parm.
(lookup_name_real): Likewise.
(lookup_name_nonclass, lookup_name): Adjust lookup_name_real call.
(lookup_name_prefer_type): Rename to ...
(lookup_name): ... here. New overload with LOOK_want parm.
(lookup_type_scope_1): Adjust qualify_lookup calls.
* call.c (build_operator_new_call)
(add_operator_candidates): Adjust lookup_name_real calls.
* coroutines.cc (find_coro_traits_template_decl)
(find_coro_handle_template_decl, morph_fn_to_coro): Adjust
lookup_qualified_name calls.
* cp-objcp-common.c (identifier_global_tag): Likewise.
* decl.c (get_tuple_size, get_tuple_decomp_init): Likewise.
(lookup_and_check_tag): Use lookup_name overload.
* parser.c (cp_parser_userdef_numeric_literal): Adjust
lookup_qualified_name call.
(prefer_arg_type): Drop template_mem_access parm, return LOOK_want
value.
(cp_parser_lookup_name): Adjust lookup_member, lookup_name_real
calls.
* pt.c (check_explicit_specialization): Adjust lookup_qualified_name
call.
(tsubst_copy_and_build, tsubst_qualified_name): Likewise
(deduction_guides_for): Likewise.
(tsubst_friend_class): Adjust lookup_name_real call.
(lookup_init_capture, tsubst_expr): Likewise.
* rtti.c (emit_support_tinfos): Adjust lookup_qualified_name call.
* semantics.c (omp_reduction_lookup): Likewise.
(capture_decltype): Adjust lookup_name_real call.
libcc1/
* libcp1plugin.cc (plugin_build_dependent_expr): Adjust
lookup_name_real & lookup_qualified_name calls.
2020-08-13 Nathan Sidwell <nathan@acm.org>
Cherry pick 0c5f6bbfe2e
gcc/cp/
* name-lookup.h (enum class LOOK_where): New.
(operator|, operator&): Overloads for it.
(lookup_name_real): Replace NONCLASS & BLOCK_P parms with WHERE.
* name-lookup.c (identifier_type_value_w): Adjust
lookup_name_real call.
(lookup_name_real_1): Replace NONCLASS and BLOCK_P parameters
with WHERE bitmask. Don't search namespaces if not asked to.
(lookup_name_real): Adjust lookup_name_real_1 call.
(lookup_name_nonclass, lookup_name)
(lookup_name_prefer_type): Likewise.
* call.c (build_operator_new_call)
(add_operator_candidates): Adjust lookup_name_real calls.
* parser.c (cp_parser_lookup_name): Likewise.
* pt.c (tsubst_friend_class, lookup_init_capture_pack)
(tsubst_expr): Likewise.
* semantics.c (capture_decltype): Likewise.
libcc1/
* libcp1plugin.cc (plugin_build_dependent_expr): Likewise.
2020-08-07 Nathan Sidwell <nathan@acm.org>
Merge trunk d21252de6c8.
Address 2 FIXMEs.
gcc/cp/
* name-lookup.c (finish_nonmember_using_decl): Here.
(lookup_type_scope_1): Here.
Global decls.
gcc/cp/
* name-lookup.c (get_fixed_binding_slot): Skip internal decls when
creating vector.
(record_mergeable_decl): Replace with ...
(maybe_record_mergeable_decl): Skip internal decls.
(do_pushdecl): Adjust.
* decl.c (start_decl): Templated vars are not
internal. (Incomplete fix of PR 96523)
Shadowed type.
gcc/cp/
* name-lookup.c (check_module_override): No need to deal with
shadowed type here.
gcc/testsuite/
* g++.dg/modules/shadowed-1_[ab].C: New.
Simplify binding extraction.
gcc/cp/
* name-lookup.h (extract_module_binding): Drop NS arg.
* name-lookup.c (extract_module_binding): Reimplement.
* module.cc (depset::hash::add_namespace_entities): Adjust.
2020-08-06 Nathan Sidwell <nathan@acm.org>
Remove now-unneeded dedup bits.
gcc/cp/
* module.cc (module_state::read_cluster): Don't set dedup for
partition or header unit.
Determine deduplication via slot flags.
gcc/cp/
* module.cc (module_state::read_cluster): Disable dedup here.
* name-lookup.cc (get_fixed_binding_slot): Set
MODULE_BINDING_GLOBAL_P if necessary.
(name_lookup::search_bitmap_only): Inspect MODULE_BINDING_$foo_P.
(name_lookup::adl_namespace_fns): Likewise.
(set_module_binding): Always stat hack if mod_glob.
gcc/cp/
* module.cc (module_state::read_cluster): Pay attention to hidden
decls even in same module.
* name-lookup.c (name_lookup:adl_namespace_fns): Drop unused parm.
2020-08-05 Nathan Sidwell <nathan@acm.org>
Note binding slot origin.
gcc/cp/
* cp-tree.h (MODULE_BINDING_{GLOBAL,PARTITION}_P): New.
* module_cc (module_state::read_cluster): Adjust
set_module_binding call.
* name-lookup.c (set_module_binding): Replace inter_p with
mod_glob parm. Adjust and set origin.
* name-lookup.h (set_module_binding): Adjust prototype.
Note duplicates on symbol vector.
gcc/cp/
* cp-tree.h (MODULE_VECTOR_{GLOBAL,PARTITION}_DUPS_P): New.
* name-lookup.h (mergeable_namespace_entities): Replace with ...
(mergeable_namespace_slots): ... this.
* module.cc (trees_in::key_mergeable): Set dups flag when alread
existing.
* name-lookup.c (mergeable_namespace_entities): Replace with ...
(mergeable_namespace_slots): ... this. Return the vector too.
2020-08-04 Nathan Sidwell <nathan@acm.org>
Fix alias templates.
gcc/cp/
* pt.c (lookup_template_class_1): Fix alias resetting of
ti_template.
gcc/testsuite/
* g++.dg/template/pr95263.C: Re-enable.
Merge trunk 1790d13dc8f.
2020-08-03 Nathan Sidwell <nathan@acm.org>
Revert local paranoid change.
gcc/cp/
* cp-tree.h (build_cdtor_clones, clone_cdtor): Drop via_using parm.
* class.c (build_cdtor_clones): Drop via_using parm.
(clone_cdtor): Likewise.
(clone_constructors_and_destructors): Adjust.
* module.cc (trees_in::decl_value): Adjust build_cdtor_clones parms.
Add private module fragment parsing (only).
gcc/cp/
* parser.c (enum module_preamble): Replace with ...
(enum module_parse): Update all uses. Add PMF values.
(cp_parser_module_declaration): Add private-module-fragment grammar.
gcc/testsuite/
* g++.dg/modules/pmp-[123]{,_[ab]}.C: New.
Fix save-temps & header-units
gcc/cp/
* lang-specs.h (@c++-{,system-,user-}header): Directives-only
preprocessing for saving temps with modules.
Merge trunk d1773f58f3a.
Add c++-user-header c++-system-header languages.
gcc/cp/
* lang-specs.h (@c++-header): Map -fmodules-ts to -fmodule-header,
inhibit PCH.
(@c++-user-header, @c++-system-header): New.
gcc/
* doc/invoke.texi (C++ Modules): Document.
2020-07-31 Nathan Sidwell <nathan@acm.org>
Preserve reserved locations.
gcc/cp/
* module.cc (enum loc_kind): Add LK_RESERVED.
(module_state::{read,write}_location): Preserve reserved
locations.
(module_State::{read,write}_macro_maps): Default to
UNKNOWN_LOCATION.
gcc/testsuite/
* g++.dg/modules/part-mac-1_[abc].[CH]: New.
Fix location of imports of partitions.
* module.cc (loc_spans::maybe_propagate): New.
(module_state::read_{ordinary,macro}_maps): Use it.
gcc/testsuite/
* g++.dg/modules/part-hdr-1_[abc].[CH]: New.
Fix import location reparenting.
gcc/cp/
* module.cc (preprocess_module): Reparent here, if we're already
imported.
gcc/testsuite/
* g++.dg/modules/reparent-1_[abc].C: New.
2020-07-30 Nathan Sidwell <nathan@acm.org>
Unspellable module control-line tokens.
libcpp/
* internal.h (struct spec_nodes): Add M__IMPORT.
* init.c (post_options): Adjust module token spelling.
* lex.c (cpp_maybe_module_directive): Adjust.
* macro.c (cpp_get_token_1): Reset to zero.
gcc/c-family/
* c-common.c (c_common_reswords): Adjust module token spelling.
gcc/testsuite/
* g++.dg/modules/dir-recovery.C: New.
* g++.dg/modules/cpp-[25]_c.C: Adjust.
* g++.dg/modules/dep-2.C: Adjust.
* g++.dg/modules/dir-only-[234]{,_b}.C: Adjust.
* g++.dg/modules/inc-xlate-1_b.H: Adjust.
* g++.dg/modules/legacy-[36]_[bcd].[HC]: Adjust.
Fix implicit fns from modules.
gcc/cp/
* cp-tree.h (build_cdtor_clones): Add parms.
* class.c (build_cdtor_clones): Swallow clone_cdtor's member insertion.
(clone_cdtor): Move member insertion to build_cdtor_clones.
* module.cc (trees_in::decl_value): Insert clones, if there's
already a member vec.
gcc/testsuite/
* g++.dg/modules/sv-1{.h,_[ab].C}: New.
2020-07-28 Nathan Sidwell <nathan@acm.org>
Merge trunk f3665bd1111.
gcc/cp/
* class.c (layout_class_type): Restore trunk for unnamed classes.
* cp-tree.h (lang_tree_node): Retore trunk GTY.
(cp_tree_node_structure): Restore trunk API.
* decl.c (cp_tree_node_structure): Restore trunk API.
* diagnostic.c (progname): Restore trunk comment.
gcc/
* doc/invoke.texi (Precompiled Headers): Restore trunk index
capitalization.
(C++ Modules): Adjust to match.
Merge trunk 134051f16bd.
libcpp/
* directives.c (_cpp_do_file_change): Check we're moving to line
zero of the same file.
2020-07-22 Nathan Sidwell <nathan@acm.org>
gcc/c-family/
* c-ada-spec.c (decl_sloc): Revert to trunk.
Merge trunk 6e1e0decc9e.
Unbreak Ada
gcc/
* gcc.c (execute): Disable argv[0] munging.
2020-07-21 Nathan Sidwell <nathan@acm.org>
Sadly Ada still broken :(
gcc/c-family/
* c-ada-spec.c (decl_sloc): Actually return the field's loc.
2020-07-20 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* rtti.c (init_rtti_processing): Unbreak bootstrap.
Merge trunk a926eeedf43.
2020-07-17 Nathan Sidwell <nathan@acm.org>
libcpp/
* files.c (_cpp_stack_file): Remove FIXME.
* include/cpplib.h (cpp_main_loc): Declare.
* init.c (cpp_read_main_file): Set main loc.
(cpp_main_loc): New.
* internal.h (struct cpp_reader): Add main_loc.
gcc/cp/
* module.cc (main_source_loc): Delete.
(module_translate_include): Use cpp_main_loc.
(begin_header_unit, preprocess_module, preprocessed_module)
(init_modules, finish_module_processing): Likewise.
(fini_modules): Adjust.
2020-07-16 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_may_redeclare): Deal with declaring a builtin
in a header unit.
* rtti.c (init_rtti_processing): The type is not exported.
libcpp/
* directives.c (do_include_common): Drop FIXME question.
* lex.c (cpp_maybe_module_directive): C++ keywords are not a thing
here.
(cpp_directive_only_process): Add assert.
libcpp/
* include/cpplib.h (struct cpp_callbacks): Adjust
translate_include's return type.
* files.c (_cpp_stack_file): Push the buffer returned by the hook.
* lex.c (_cpp_clean_line): Fix buffer overrun.
gcc/
* langhooks.h (struct lang_hooks): Change
preprocess_translate_include's return type.
gcc/cp/
* cp-tree.h (module_translate_include): Change return type.
* module.cc (module_translate_include): Return a buffer, don't
push it.
libcpp/
* include/cpplib.h (enum cpp_main_search): New.
(struct cpp_options): Adjust.
* init.c (cpp_read_main_file): Adjust.
* macro.c (cpp_get_token_1): Remove FIXME.
gcc/cp/
* module.cc (handle_module_option): Adjust.
gcc/cp/
* pt.c (tsubst_expr): Do not process using decls again.
gcc/testsuite/
* g++.dg/modules/using-6_a.C: Enable elided code.
* g++.dg/modules/using-8_[ab].C: New.
2020-07-15 Nathan Sidwell <nathan@acm.org>
Merge trunk 765fbbf9bb3.
2020-07-14 Nathan Sidwell <nathan@acm.org>
Merge trunk 5f809982e8e.
2020-07-13 Nathan Sidwell <nathan@acm.org>
Delete now-unused new pieces.
gcc/
* toplev.h (original_argc, original_argv): Delete.
* toplev.c (original_argc, original_argv): Delete.
gcc/cp/
* cp-tree.h (DECL_CHECK): Delete.
gcc/c-family
* c-pragma.h (C_LEX_STRING_IS_HEADER): Delete.
gcc/cp/
* module.cc (module_state::set_filename): New.
(module_state::do_import): Drop fname arg.
(module_state::read_imports): Set filename here.
(module_state::write_locations): Drop duplicate FIXME.
(module_state::read_macros): Drop out of date FIXME.
(direct_import): Adjust.
(module_translate): Set filename if we're told it.
(preprocess_module): Copy if filename already known.
(preprocessed_module, init_modules): Adjust.
gcc/cp/
* module.cc (module_state::read_cluster): Add FIXME about
unnecessary deduping.
* name-lookup.c (name_lookup::process_module_binding): Remove
FIXME.
(name_lookup::adl_namespace_fns): Likewise.
(name_lookup::search_adl): Likewise.
(do_push_nested_namespace): Likewise.
gcc/testsuite/
* lib/scanlang.exp (scan-lang-dump-not): Fix 3-arg case.
* g++.dg/modules/builtin-3_a.C: Remove unnecessary bracing.
Merge trunk a1faa8e2470.
Fix polymorphic type info emission and key-function confusion
gcc/cp/
* module.cc (trees_out::core_bools): Calculate externalness from
POV of importer.
(trees_{in,out{::lang_decl_bools): Do not stream
not_really_extern.
(trees_in::read_{var,function}_def): Recalculate
not_really_extern.
(trees_in::read_class_def): The key_method might become non-key.
gcc/testsuite/
* g++.dg/modules/sym-subst-3_a.C: Adjust regexp.
* g++.dg/modules/virt-1_[ab].C: Adjust.
* g++.dg/modules/virt-2_[abc].C: New.
2020-07-09 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* modules.cc (trees_out::type_node [VECTOR_TYPE]): poly_int's
to_constant already does the checking we need.
gcc/testsuite/
* g++.dg/modules/sym-subst-3_a.C: Adjust scan for other ABIs
gcc/testuite/
* g++.dg/modules/builtin-3_[ab].C: Add va_list scans for
aarch64 and powerpc ABIs.
2020-07-08 Nathan Sidwell <nathan@acm.org>
gcc/testsuite/
* g++.dg/modules/module.exp: Remove tcl 8.6ism
Merge trunk 6bf2ff0d52a.
2020-07-03 Nathan Sidwell <nathan@acm.org>
Merge trunk ce0f842492c
2020-07-03 Iain Sandoe <iain@sandoe.co.uk>
gcc/cp/
* name-lookup.c (name_lookup::adl_namespace_fns): Last param is
unused, and bootstrap complains :( [Nathan left it like that so
he'd be reminded to remove it if it really turned out not needed]
2020-07-02 Nathan Sidwell <nathan@acm.org>
p1779 ABI isolation
gcc/cp/
* cp-tree.h (named_module_purview_p): New.
* decl.c (grokmethod): Don't always implicitly inline.
* module.cc (module_state_config::get_dialect): Add
module_implicit_inline.
gcc/
* doc/invoke.texi (fmodule-implicit-inline): Document.
gcc/c-family/
* c.opt (-fmodule-implicit-inline): New.
gcc/testsuite/
* g++.dg/modules/imp-member-[12]_b.C: Add some inlines.
* g++.dg/modules/vmort-1_a.C: Likewise.
* g++.dg/modules/imp-inline-1_[ab].C: New.
2020-07-01 Nathan Sidwell <nathan@acm.org>
GMF entities are not findable by name
gcc/cp/
* modules.cc (enum depset::disc_bits): Remove DB_GLOBAL_BIT.
(depset::is_global): Delete
(depset::hash::make_dependency): Drop reachable GMF binding
insertion.
gcc/testsuite/
* g++.dg/modules/builtin-[13]_[ab].C: Adjust scans.
* g++.dg/modules/mod-sym-2.C: Adjust scans.
Implement FR039 -- dependent ADL and friend fns
gcc/cp/
* name-lookup.c (name_lookup::adl_namespace): Instantiation path
is not important here.
(name_lookup::search_adl): Reimplement dependent adl for modules.
gcc/testsuite/
* g++.dg/modules/adl-[12]_b.C: export.
* g++.dg/modules/adl-[45]_[abcd].C: New.
2020-06-30 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* class.c (copyfndecl_with_name): Drop inadvertent
DECL_CLONED_FUNCTION setting. Pass 0 for top_level to
rest_of_decl_compiulation.
gcc/cp/
* class.c (copy_fndecl_with_name): Add tree code parm. Adjust
callers.
libcc1/
* libcp1plugin.cc (plugin_build_decl): Adjust.
Unify copy_fndecl_with_name and clone_decls.
gcc/cp/
* class.c (DECL_NEEDS_VTT_PARM_P): Delete.
(copy_fndecl_with_name): Add ctor booleans, use them. Make static.
(copy_operator_fn): New wrapper.
(build_clone): Adjust to use copy_fndecl_with_name.
(build_clones): Rename to ...
(build_cdtor_clones): ... here.
(clone_function_decl): Rename to ...
(clone_cdtor): ... here.
(clone_constructors_and_destructors): Adjust.
* cp-tree.h (build_clones): Rename to build_cdtor_clones.
(clone_function_decl): Rename to clone_cdtor.
(copy_fndecl_with_name): Rename to copy_operator_fn. Change arg
type.
* method.c (implicitly_declare_fn): Adjust.
(lazily_declare_fn): Likewise.
* module.c (trees_in::decl_value): Adjust.
* pt.c (tsubst_function_Decl, instantiate_template_1): Adjust.
2020-06-29 Nathan Sidwell <nathan@acm.org>
Merge master 9a33c41fe42
Merge master 44492e248cb
c++: implicit operator== adjustments from P2002. [Jason Merrill]
gcc/cp/
* class.c (build_clone): Retain old version for the moment.
(DECL_NEETS_VTT_PARM_P): Resurrect, before we kill it again.
2020-06-25 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* mapper-server.cc (process_server): We should Write when writing.
(server): Fix off-by-one error.
Merge master 68df8e8c343
Merge master 502d63b6d61
Lower VEC_COND_EXPR into internal functions. [Martin Liska]
Apply d11c9841d54 Add missing check for gassign. [Martin Liska]
Apply 9435fb9668e Fix typo in tree-ssa-reassoc.c. [Martin Liska]
Merge master 2021af0c23a
Merge master 668ef28fbb4
c++: Clean up previous change [PR41437] [Patrick Palka]
gcc/cp/
* module.cc (trees_{in,out}::code_vals [TEMPLATE_INFO]): Adjust
access checking streaming.
Merge master 92bed036098
c++: Improve access checking inside templates [PR41437] [Patrick Palka]
Merge master a97e49a89d1
2020-06-24 Nathan Sidwell <nathan@acm.org>
Merge master f2242ec0d3f
Over the hump!
Constrained partial specializations
gcc/cp/
* module.cc (depset::hash::add_partial_redirect): Add slot parm.
(enum merge_kind): Add MK_partial.
(merge_kind_name): Likewise.
(trees_out::decl_node): A redirect may be for an EK_DECL.
(trees_out::get_merge_kind): Determine MK_partial.
(trees_{in,out}::key_mergeable): Deal with MK_partial.
(depset::hash::make_dependency): Deal with discovering a partial
specialization.
* pt.c (maybe_new_partial_specialization): Add module bits to the
new typedef.
(tsubst_template_decl): Relax module import assert.
(tsubst_template_decl): Refactor, add fixme to check.
gcc/testsuite/
* g++.dg/modules/nested-constr-1.h: New.
* g++.dg/modules/nested-constr-1_a.H: New.
* g++.dg/modules/nested-constr-1_b.C: New.
* g++.dg/modules/nested-constr-2_a.C: New.
* g++.dg/modules/nested-constr-2_b.C: New.
* g++.dg/modules/nested-constr-2_c.C: New.
* g++.dg/modules/tmpl-part-req-1.h: New.
* g++.dg/modules/tmpl-part-req-1_a.H: New.
* g++.dg/modules/tmpl-part-req-1_b.C: New.
* g++.dg/modules/tmpl-part-req-2.h: New.
* g++.dg/modules/tmpl-part-req-2_a.H: New.
* g++.dg/modules/tmpl-part-req-2_b.C: New.
2020-06-11 Nathan Sidwell <nathan@acm.org>
Merge master b825a228907
2020-06-10 Nathan Sidwell <nathan@acm.org>
Merge master ac9face8d26
PR c++/95263
gcc/cp/
* pt.c (lookup_template_class_1): Do not apply reversion
gcc/testsuite/
* g++.dg/template/pr95263.C: New (XFAIL)
Merge master 6c8e16aea85
2020-06-10 Iain Sandoe <iain@sandoe.co.uk>
Fixes for darwin
gcc/cp/
* mapper-server.cc: Reorder includes.
(server): Block scope potentially empty if clause.
* module.cc (get_mapper): Don't use C++14.
gcc/testsuite/
* g++.dg/modules/bad-mapper-3: Adjust error.
2020-06-05 Nathan Sidwell <nathan@acm.org>
Install V1 module protocol goop
gcc/cp/
* Make-lang.in: Remove mapper-server2 hack.
* mapper-client.cc: Add additional mechanisms to get a server.
* mapper-client.h: Delete.
* mapper-resolver.cc: Fix file reading bugs
* mapper-server.cc: Original deleted.
* mapper-server2.cc: Renamed to mapper-server.cc.
* mapper.h: Adjust.
* module.cc: Adjust.
gcc/testsuite/
* g++.dg/modules/bad-mapper-1.C: Adjust expected errors.
* g++.dg/modules/bad-mapper-2.C: Likewise.
* g++.dg/modules/bad-mapper-3.C: Likewise.
* g++.dg/modules/map-2.C: Likewise.
Add libcody as an external library
* libcody: Delete
* Makefile.def: Revert.
* configure.ac: Revert. Add --with-libcody.
* Makefile.tpl: Add CODYLIB, CODYLIBINC, HOST_CODYLIB, HOST_CODYLIBINC.
* Makefile.in: Rebuilt.
* configure: Rebuilt.
gcc/
* Makefile.in: Revert. Add CODYLIB, CODYLIBINC.
* configure.ac: Add CODYLIB, CODYLIBINC.
* configure: Rebuilt.
gcc/cp
* Make-lang.in: Revert.
2020-06-02 Nathan Sidwell <nathan@acm.org>
Add libcody with stub users
* libcody: New. Currently a symlink to cody repo.
* Makefile.def: Add libcody.
* configure.ac: Add libcody.
* Makefile.in: Rebuilt.
* configure: Rebuilt.
gcc/
* Makefile.in: Add libcody.
gcc/cp/
* Make-lang.in: Add libcody
* mapper.h: New stub/
* mapper-resolver.cc: New stub.
* mapper-server2.cc: New stub.
2020-05-21 Nathan Sidwell <nathan@acm.org>
FR39 ...
Merge master 149c8c7c27a
Premerging Patrick's c++/95223 fix.
gcc/cp/
* cp-tree.h (comparing_typenames): Declare.
(module_streaming): Delete.
* modules.cc (module_streaming): Delete.
(module_state::read_cluster): Increment comparing_typenames, not
module_streaming.
* pt.c (comparing_typenames): Define.
(spec_hasher::equal): Increment it.
* typeck.c (structural_comptypes): Check it here for typedefs.
libcpp/
* files.c, init.c, internal.h: Adjust file_find_kind names from trunk.
libcpp/
* line-map.c (linemap_add): Set range and column bits to zero.
gcc/c-family/
* c-opts.c (c_common_post_options): Add comment.
(c_finish_options): Call linemap_line_start to start line.
2020-05-20 Nathan Sidwell <nathan@acm.org>
libcpp/
* include/cpplib.h (cpp_read_main): Document preamble arg.
* internal.h (IT_MAIN_{ZERO,REAL}): Rename to ...
(IT_MAIN_PREAMBLE, IT_MAIN): ... these.
* files.c (_cpp_stack_file): Adjust.
* init.c (cpp_read_main_file): Adjust.
libcpp/
* directives.c (_cpp_do_file_change): Optimize rewinding one line
to line zero.
gcc/c-family/
* c-opts.c (c_finish_options): Set locations to zero.
* c-ppoutput.c (cb_define): Always advance line number.
libcpp/
* files.c (cpp_push_include): Pass highest_line for loc.
(cpp_push_default): Likewise.
* line-map.c (linemap_add): Set range and column bits to what we
used to figure start location.
2020-05-19 Nathan Sidwell <nathan@acm.org>
libcpp/
* internal.h (enum _find_file_kind): New.
(_cpp_find_file): Use it, not 3 bools.
* files.c (_cpp_find_file): Use _find_file_kind enum, not bools.
(_cpp_stack_include, cpp_find_header_unit, _cpp_fake_include)
(_cpp_do_file_change, _cpp_compare_file_date): Adjust.
* init.c (cpp_read_main): Adjust _cpp_find_file call.
2020-05-18 Iain Sandoe <iain@sandoe.co.uk>
gcc/testsuite/
* g++.dg/modules/sym-subst-3_a.C: Adjust scan asm for Darwin.
* g++.dg/modules/init-2_b.C: Adjust scan-asms for Darwin.
* g++.dg/modules/init-2_c.C: Likewise.
gcc/cp/
* mapper-client.cc: Move fallback typedef for sighandler_t
from here ...
* mapper-client.h: ... to here.
2020-05-19 Nathan Sidwell <nathan@acm.org>
Merge master ed63c387aa0
gcc/cp/
* name-lookup.c (add_imported_namespace): Clarify
inline/non-inline error message.
libcpp/
* lex.c (do_peek_module): Permit non-ascii char sets.
2020-05-15 Nathan Sidwell <nathan@acm.org>
Enumerate load states.
gcc/cp/
* module.cc (enum module_loadedness): New.
(module_state::load_state): Rename to ..
(module_state::loadedness): ... this, change type.
(module_state::read_{imports,preprocessor,language}): Adjust,
(module_State::{load_section,do_mport}): Likewise,
(direct_import, {import,declare,preprocess}_module): Likewise.
Remove {,purview_,partition_}direct_p flags.
gcc/cp/
* module.cc (module_state::{,purview_,partition_}_direct_p):
Remove flags.
(module_state::is{,purview_,partition_}direct_p}): Adjust.
(module_state::{read,write}_imports): Remove direct flag handling.
(module_state::write): Likewise.
(direct_import, process_module): Likewise.
Duplicate {,purview_,partition_}direct_p flags in an enum.
gcc/cp/
* module.cc (enum module_directness): New.
(module_state): Add it.
(module_state::is{,purview_,partition_}direct_p}): Consistency
asserts.
(module_state::{read,write}_imports): Adjust and add Consistency
asserts.
(module_state::write): Likewise.
(direct_import, preprocess_module): Likewise.
2020-05-14 Nathan Sidwell <nathan@acm.org>
Stop GMF leakage from interface to implementation
gcc/cp/
* cp-tree.h (preprocess_module): Add in_purview param.
* lex.c (token_coro::resume): Adjust.
* module.cc (module_state::purview_direct_p): New flag.
(module_state::{read,write}_imports): Pay attention to it for
invisible imports.
(begin_header_unit): Adjust preprocess_module call.
(preprocess_module): Set purview_direct_p as appropriate.
gcc/testsuite/
* g++.dg/modules/gmf-2_[abcd].[CH]: New.
Merge master f497e36ae56
2020-05-13 Nathan Sidwell <nathan@acm.org>
Implement P1874 Dynamic Initialization Order
gcc/cp/
* cp-tree.h (module_initializer_kind)
(module_add_import_initializers): Declare.
(mangle_module): Add include_partition parm.
(init_module_processing): Rename to init_modules.
(fini_modules): Declare.
(mangle_identifier): Add prefix char.
(mangle_module_global_init): Declare.
* decl.c (cxx_init_decl_processing): Adjust for module init
rename.
* decl2.c (start_objects): Maybe mangle module initializer name.
Add module initializers.
(generate_ctor_or_dtor_function): Add module init support.
(c_parse_final_cleanups): Likewise, adjust for module fini
addition.
* mangle.c (mangle_identifier): Add prefix char.
(write_module): New, broken out of ...
(maybe_write_module): ... here. Call it.
(mangle_module_global_init): New.
* module.cc (module_state): Add call_init_p flag.
(num_init_calls_needed): New global.
(module_state::mangle): Add include_partition parm.
(mangle_module): Likewise.
(module_initializer_kind): New.
(module_add_import_initializers): New.
(init_module_processing): Rename to ...
(init_modules): ... here.
(finish_module_processing): Calculate call_init_p.
(fini_modules): New, broken out of finish_module_processing.
gcc/testsuite/
* g++.dg/modules/init-[12]_[abc].C: New.
2020-05-12 Nathan Sidwell <nathan@acm.org>
Merge master 2a0225e4786.
2020-05-08 Nathan Sidwell <nathan@acm.org>
Merge master b224c3763e0.
EOF has a location
gcc/cp/
* parser.c (cp_lexer_set_source_position_from_token): Don't
special-case EOF.
gcc/testsuite/
* c-c++-common/raw-string-6.c: Adjust expected locations:
* g++.dg/cpp0x/decltype63.C: Likewise.
* g++.dg/cpp0x/gen-attrs-64.C
* g++.dg/cpp0x/pr68726.C: Likewise.
* g++.dg/cpp0x/pr78341.C: Likewise.
* g++.dg/cpp1y/pr65202.C: Likewise.
* g++.dg/cpp1z/class-deduction44.C: Likewise.
* g++.dg/diagnostic/unclosed-extern-c.C: Likewise.
* g++.dg/diagnostic/unclosed-function.C: Likewise.
* g++.dg/diagnostic/unclosed-namespace.C: Likewise.
* g++.dg/diagnostic/unclosed-struct.C: Likewise.
* g++.dg/ext/pr84598.C: Likewise.
* g++.dg/other/switch4.C: Likewise.
* g++.dg/parse/crash10.C: Likewise.
* g++.dg/parse/crash18.C: Likewise.
* g++.dg/parse/crash35.C: Likewise.
* g++.dg/parse/crash59.C: Likewise.
* g++.dg/parse/crash61.C: Likewise.
* g++.dg/parse/crash67.C: Likewise.
* g++.dg/parse/ctor3.C: Likewise.
* g++.dg/parse/error14.C: Likewise.
* g++.dg/parse/error5.C: Likewise.
* g++.dg/parse/error56.C: Likewise.
* g++.dg/parse/invalid1.C: Likewise.
* g++.dg/parse/parameter-declaration-1.C: Likewise.
* g++.dg/parse/parser-pr28152-2.C: Likewise.
* g++.dg/parse/parser-pr28152.C: Likewise.
* g++.dg/parse/pr68722.C: Likewise.
* g++.dg/pr46852.C: Likewise.
* g++.dg/pr46868.C: Likewise.
* g++.dg/template/crash115.C: Likewise.
* g++.dg/template/crash43.C: Likewise.
* g++.dg/template/error-recovery1.C: Likewise.
* g++.dg/template/error57.C: Likewise.
* g++.old-deja/g++.other/crash31.C: Likewise.
2020-05-07 Nathan Sidwell <nathan@acm.org>
Merge master ab2952c77d0
2020-05-05 Nathan Sidwell <nathan@acm.org>
Just push the eh decls.
gcc/cp/
* except.c (declare_library_fn_1): Don't look at current binding.
Just make the decl and push it.
* name-lookup.h (get_global_module_decls): Delete decl.
* name-lookup.c (get_global_module_decls): Delete defn.
Fix eh specs
gcc/testsuite/
* g++.dg/eh/builtin{5,7,9,10,11}.C: Fix eh specs on __cxa fn decls.
Fix libitm's decls
libitm/
* eh_cpp.cc (__cxa_allocate_exception, __cxa_free_exception)
(__cxa_begin_catch, __cxa_tm_cleanup, __cxa_eh_globals): Fix
exception specification.
(_ITM_cxa_allocate_exception, _ITM_cxa_free_exception)
(_ITM_cxa_begin_catch): Likewise.
* libitm.h (_ITM_NOTHROW): New define.
(_ITM_cxa_allocate_exception, _ITM_cxa_free_exception)
(_ITM_cxa_begin_catch): Use it.
* testsuite/lib/libitm.exp (libitm_init): Add
-fdiagnostics-color=never.
2020-05-04 Nathan Sidwell <nathan@acm.org>
Simplify except fn helper pushing part 1
gcc/cp/
* decl.c (push_library_fn): Return the decl pushdecl_toplevel returns.
* except.c (verify_library_fn): Replace with ...
(declare_library_fn_1): ... this fn.
(declare_library_fn): Call it.
(build_throw): Call declare_library_fn_1.
* name-lookup.h (get_global_module_decls): Declare.
* name-lookup.c (get_namespace_binding): Return this TU's
bindings.
(get_global_module_decls): New.
gcc/testsuite/
* g++.dg/eh/builtin10.C: Adjust expected errors.
* g++.dg/eh/builtin11.C: Likewise.
* g++.dg/eh/builtin6.C: Likewise.
* g++.dg/eh/builtin7.C: Likewise.
* g++.dg/eh/builtin9.C: Likewise.
* g++.dg/parse/crash55.C: Likewise.
2020-05-01 Nathan Sidwell <nathan@acm.org>
Fix macro expansion of header-unit names
libcpp/
* macro.c (cpp_get_token_1): Pay attention to arg parsing mode,
and the existence of padding/comment tokens.
gcc/testsuite/
* g++.dg/modules/cpp-6_[abc].[CH]: New.
2020-04-30 Nathan Sidwell <nathan@acm.org>
Set TREE_USED on stream in.
gcc/cp/
* module.cc (trees_in::unused): New field.
(trees_in::tree_node): Add defaulted off is_use arg, set TREE_USED
on streamed in obect. Adjust callers to set it.
(trees_{in,out}::core_bools): Do not stream base.used_flag.
(trees_{in,out}::core_vals): Reorder BINFO fields. Increment
unused around vtbl pieces.
(trees_in::decl_value): Save and reset unused field.
(trees_in::read_var_def): Increment unsused for vtbl initializers.
gcc/testsuite/
* g++.dg/modules/used-1_[abc].C: New.
Tweak builtin fn hack
gcc/cp/
* name-lookup.c (get_namespace_binding): Strip singleton
overloads.
gcc/testsuite/
* g++.dg/modules/libfn-1_[ab].C: New.
2020-04-28 Nathan Sidwell <nathan@acm.org>
Partition pending indirection fixes
gcc/cp/
* module.cc (trees_in::install_entity): Treat pending flags
independently, adjust indirection installation.
(pendset_lazy_load): Add specialization_p arg. Use for
indirection adjustment.
(get_primary_module): Look at implementation unit's parent.
(lazy_load_{specializations,members}): Adjust.
gcc/testsuite/
* g++.dg/modules/part-6_[abcde].C: New.
2020-04-23 Nathan Sidwell <nathan@acm.org>
Stream definitions after decls.
gcc/cp
* module.cc (module_state::write_cluster): Break out definition
streaming to separate loop.
gcc/testsuite/
* g++.dg/modules/member-def-[12]_c.C: Adjust scans, oh for CHECK-DAG.
Stream node types last
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Move type streaming to
end.
gcc/testsuite/
* g++.dg/modules/indirect-4_c.C: Adjust scan.
2020-04-22 Nathan Sidwell <nathan@acm.org>
Stream imports at start of cluster
gcc/cp/
* module.cc (trees_out::importedness): New checker.
(depset::hash::add_dependency): Add imports.
(depset::tarjan::connect): Skip imports.
(module_state::{read,write}_cluster): Seed imports before the
cluster itself.
gcc/testsuite/
* g++.dg/modules/class-3_[bd].C: Adjust scans.
* g++.dg/modules/imp-member-[12]_[ce].C: Adjust scans.
* g++.dg/modules/member-def-2_c.C: Adjust scans.
* g++.dg/modules/vmort-2_c.C: Adjust scans.
2020-04-21 Nathan Sidwell <nathan@acm.org>
Don't stream DECL_ODR_USED or TREE_ASM_WRITTEN
gcc/cp/
* module.cc (trees_{in,out}::core_values): Don't stream
base.asm_written_flag.
(trees_{in,out}::lang_decl_bools): Don't stream u.base.odr_used.
Remove DECL_MODULE_PARTITION_P, it is not needed.
gcc/cp/
* cp-tree.h (DECL_MODULE_PARTITION_P): Delete.
(lang_decl_base): Remove module_partition_p bitfield.
* decl.c (duplicate_decls): No need to check or reset it.
* lex.c (cxx_dup_lang_specific): No need to reset it.
* pt.c (build_template_decl): No need to check it.
(tsubst_template_decl): Likewise, or reset it.
* module.cc (trees_in::decl_value): No need to set it.
(trees_out::decl_node): No need to check it.
(depset::hash::make_dependency): Likewise, Adjust import marking
code.
(set_instantiating_module): No need to reset it.
2020-04-17 Nathan Sidwell <nathan@acm.org>
Merge master a28edad3da5c59f09565d3d42e20be1a924986c4
gcc/cp/
* cxx-mapper.cc: Rename to ...
* mapper-server.cc: ... here.
* Make-lang.in: Adjust.
* module.cc (make_mapper): Adjust.
gcc/testsuite/
* g++.dg/modulex/inc-xlate-1_e.C: Adjust.
* g++.dg/modulex/legacy-[26]_[bcdef].[CH]: Likewise.
gcc/cp/
* module.cc (mapper_{import_export,export_done}): Revert
2020-04-13 change.
gcc/cp/
* mapper-client.{h,cc}: New, broken out of ...
* module.cc: ... here.
(maybe_remove_cmi_prefix): Delete.
* Make-lang.in: Add mapper-client.
gcc/cp/
* module.cc (module_mapper::{get,make}): Replace with ...
(get_mapper, make_mapper): ... these.
(module_mapper:(kill,fini): Delete.
(module_mapper::{import_export,export_done}): Replace with ...
(mapper_import_export, mapper_export_done): ... these.
gcc/cp/
* module.cc (module_mapper::to): Drop unneeded field.
gcc/cp/
* module.cc (module_mapper::{open,close}): New methods, use them.
gcc/cp/
* module.cc (module_mapper): Break more stuff out of ctor.
2020-04-13 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_mapper): Remove knowledge of module_state,
update all callers.
2020-04-08 Nathan Sidwell <nathan@acm.org>
gcc/testsuite/
* g++.dg/modules/hello-1_[ab].C: New.
gcc/cp/
* module.cc (trees_in::decl_value): Need to retrofit lang for
inner.
gcc/testsuite/
* g++.dg/modules/gmf-1_[ab].C: New.
gcc/testsuite/
* g++.dg/modules/xtreme-header-[1-6]_c.C: New.
gcc/cp/
* module.cc (trees_in::key_mergeable): Avoid null deref.
(direct_import): Create attachment table.
gcc/testsuite/
* g++.dg/modules/lambda-[23]_c.C: New.
Merge master 50c7853216e8511971c55b51d7fe29173db4749b
2020-04-07 Nathan Sidwell <nathan@acm.org>
C++20 Ranges!
gcc/testsuite/
* g++.dg/modules/xtreme-header-2.h: Enable in c++20 mode.
gcc/cp/
* module.cc (trees_{in,out}::tpl_parm_value): Stream auto
placeholder & constraints.
gcc/testsuite/
* g++.dg/modules/lambda-4{,_[ab]}.[hHC]: New.
_FUN with recursive types (pun intended)
gcc/cp/
* module.cc (trees_out::key_mergeable): A lambda's static _FUN has
a recursive return type.
(trees_in::is_matching_decl): Likewise.
gcc/testsuite/
* g++.dg/modules/lambda-4{,_[ab]}.[hHC]: New.
* g++.dg/modules/concept-6_b.C: Remove xfail.
gcc/
* print-tree.c (print_node): Explicitly show CALL_EXPR null arguments.
gcc/cp/
* module.cc (trees_out::key_mergeable): Instantiations can have
requires. Not just the template.
gcc/testsuite/
* g++.dg/modules/concept-6{,_[ab]}.[hHC]: New.
gcc/cp/
* tree.c (cp_tree_equal): [CALL_EXPR] Directly check number of
arguments to a call. Assert they exist.
* typeck.c (structural_comptypes): [DECLTYPE_TYPE] Break apart if
conditional.
2020-04-06 Nathan Sidwell <nathan@acm.org>
gcc/cp
* module.cc (depset::hash::make_dependency): Imported namespaces
from a partition don't have PARTITION_P set.
(module_state::write): Likewise.
gcc/testsuite/
* g++.dg/modules/part-5_[abc].C: New.
2020-04-03 Nathan Sidwell <nathan@acm.org>
PR c++/94476
gcc/cp/
* class.c (layout_class_type): Zap NSDMI of as_base fields.
gcc/testsuite/
* g++.dg/modules/nsdmi-2.C: New.
Merge master bcafd8748cf9eb83a9e71bf67c4e2a7c5c8f513c
NSDMIs
WARNING causes ICES in the STL header tests. There's a trunk
NSDMI parsing bug (pr94476)
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Write FIELD_DECL initial
value.
gcc/testsuite/
* g++.dg/modules/nsdmi-1_[ab].C: New.
gcc/testsuite/
* g++.dg/modules/xtreme-header-[123456]{,_[ab]}.[hHC]: New.
gcc/
* gcc.c (driver::maybe_print_and_exit): Shout about
experimentalness.
(driver::final_actions): Likewise.
* diagnostic.c (diagnostic_action_after_output): Likewise.
gcc/testsuite/
* lib/prune.exp (prune_gcc_output): Prune the shouting.
Template vars inited to lambdas
gcc/cp/
* module.cc (depset::hash::find_dependencies): Adjust dump
predicate.
gcc/testsuite/
* g++.dg/modules/lambda-3{,_[ab]}.[hHC]: New.
Resurrect topological key-order sort for clusters
gcc/cp/
* module.cc (depset::hash): Add chain, is_key_order.
(trees_out::is_key_order): New.
(trees_out::decl_value): Adjust for key-order walk.
(trees_out::{get_merge_kind,key_mergeable}): Likewise.
(depset::hash::add_dependency): Deal with key-order dependency.
(depset::hash::add_mergeable): New.
(depset::hash::find_dependencies): Adjust for key-order walk.
(cluster_cmp): Delete.
(sort_cluster): New.
(module_state::write): Call sort_cluster, not qsort (cluster_cmp).
gcc/testsuite/
* g++.dg/modules/indirect-[234]_b.C: Adjust final scan.
* g++.dg/modules/late-ret-3_a.H: Likewise.
* g++.dg/modules/member-def-[12]_c.C: Likewise.
* g++.dg/modules/tpl-alias-1_a.H: Likewise.
* g++.dg/modules/tpl-friend-1_a.C: Likewise.
* g++.dg/modules/tpl-spec-3_[ab].C: Likewise.
* g++.dg/modules/using-7.C: Likewise.
2020-04-02 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* modules.cc (trees_out::decl_node): Treat namespaces like other
decls.
(module_state::write): When checking, insert non-imported
namespace-decls into the entity map here.
gcc/cp/
* modules.cc (trees_out::decl_value): Public.
(trees_out::decl_node): Do not expect by-value namespaces.
(depset::hash::find_dependencies): Deal with namespaces here.
2020-04-01 Nathan Sidwell <nathan@acm.org>
gcc/testsuite/
* g++.dg/modules/tpl-alias-1_[ab].[HC]: Fix unresolved tests.
* g++.dg/modules/vtt-2_b.C: Likewise.
Lambdas attached to namespace-scope non-template vars
gcc/cp/
* cp-tree.h (DECL_ATTACHED_DECLS_P): New.
(struct lang_decl_base): Add attached_decls_p.
(maybe_attach_decl): Declare.
* lambda.c (record_lambda_scope): Call maybe_attach_decl.
* lex.c (cxx_dup_lang_specific): Clear DECL_ATTACHED_DECLS_P.
* module.c (uintset<T>::hash::create): New member function.
(attachset, attached_tables): Declare.
(enum merge_kind): Add MK_attached. Adjust.
(trees_{in,out}::lang_decl_bools): Stream attached_decls_p.
(trees_{in,out}::decl_value): Stream attached decls.
(trees_out::get_merge_kind): Determine if MK_attached.
(trees_{in,out}::key_mergeable): Stream MK_attached.
(depset::hash::make_dependency): You can get anonymous templatey
things (lambdas).
(maybe_attach_decl): New.
(finish_module_processing): Delete attached_table.
gcc/testsuite/
* g++.dg/modules/lambda-2_[ab].[HC]: Remove xfail, add dump scans.
2020-03-31 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (module_streaming): Declare.
* module.cc (module_streaming): Define.
(cluster_cmp): Do not strip template off an alias instantiation.
(module_state::read_cluster): Increment module_streaming around
the loading.
* typeck.c (structural_comptypes): Do not resolve typename types
when module_streaming.
gcc/cp/
* pt.c (tsubst_lambda_expr): Set extra scope after creating the
lambda struct.
2020-03-30 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* modules.cc (template<T> uintset): New template created from ...
(pendset): ... this. Use it. Adjust all uses.
2020-03-27 Nathan Sidwell <nathan@acm.org>
Merge master 62ede14d30f5d083f1ab23bcab6e0e3c9c649006
2020-03-26 Nathan Sidwell <nathan@acm.org>
STL headers header-unity (except C++ 20 ranges)
gcc/testsuite/
* g++.dg/modules/xtreme-header-{,_[ab]}.[hHC]: New.
Alias templates working (properly)
gcc/cp/
* modules.cc (enum depset::disc_bits): Add DB_ALIAS_TMPL_INST_BIT,
Replace DB_BOTH_SPEC_BIT with DB_ALIAS_SPEC_BIT.
(enum merge_kind): Replace MK_tmpl_both_mask with
MK_tmpl_alias_mask. Add MK_alias_spec.
(merge_kind_name): Adjust.
(trees_out::core_vals): DECL_TEMPLATE_RESULT might not be visited.
(trees_{in,out}::decl_value): Cope with alias template
instantiations.
(trees_out::get_merge_kind): Add alias support.
(trees_{in,out}::ket_mergeable): Add alias support.
(check_mergeable_decl): Likewise.
(trees_in::is_matching_decl): Drop inner parm, adjust.
(depset::hash::make_dependency): Add alias suport.
(depset::hash::add_specializations): Detect and mark aliases.
gcc/testsuite/
* g++.dg/modules/tpl-alias-1{,_[ab]}.[hHC]: New.
gcc/cp/
* module.cc (trees_{in,out}::decl_value): Instantiations are
merged things too.
gcc/cp/
* module.cc (trees_{in,out}::install_entity): New, broken out of ...
(trees_{in,out}::decl_value): ... here. Call them.
2020-03-25 Nathan Sidwell <nathan@acm.org>
WARNING: This breaks lots of modules tests because an inconsistent
invariant wrt alias templates is now consistently different. This
is intended. gcc/cp/
* cp-tree.h (SET_TYPE_TEMPLATE_INFO): Not for aliases.
* pt.c (lookup_template_class_1): Type alias's template info
should already be correct.
(tsubst_template_decl): Don't reset TI_TEMPLATE of an alias.
2020-03-24 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (SET_TYPE_TEMPLATE_INFO): Only expand VAL once.
* pt.c (perform_typedefs_access_check)
(append_type_to_template_for_access_check): Move G_T_N_A_C call
out of loop.
(get_types_needing_access_check): Simplify.
2020-03-23 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_{in,out}::tpl_parms_fini): Determine
contextness requirement from TPI.
Merge master a3586eeb88414e77c7cccb69362b8d04562536b6.
2020-03-20 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_{in,out}::tpl_parms_fini): Flag whether
tpl-tpl-parm context is non-null.
2020-03-19 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_in::decl_value): No need to install constraints
for duplicate.
(trees_in::is_matching_decl): Open code comparison, don't use
decls_match.
gcc/cp/
* module.cc (trees_{in,out}::{read,write}_function_def): Potential
cexprs have result == error_mark_node.
gcc/cp/
* module.cc (trees_in::decl_value): Template instantiations are
never implicit member fns.
(module_state_config::get_dialect): Check exceptions, rtti,
inheriting ctors.
gcc/testsuite/
* g++.dg/modules/inh-tmpl-ctor-1{,_[ab]}.[hHC]: New.
Merge master 3512dc0108afbed3bece2e9fa1719fb3ce1d73d9
2020-03-18 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::type_node): Do ptr-mem-fns after typedef
detection.
gcc/testsuite/
* g++.dg/modules/pmf-2{,_[ab]}.[hHC]: New.
gcc/cp/
* module.cc (trees_out::key_mergeable): Do not perform
requirements stubstutition.
(check_mergeable_decl): Likewise.
gcc/cp/
* decl.c (decls_match): Use fndecl_declared_return_type for
newdecl too.
* module.cc (trees_out::key_mergeable): Use
fndecl_declared_return_type.
(check_mergeable_decl): Likewise.
gcc/testsuite/
* g++.dg/modules/auto-1{,_[ab]}.[hHC]: New.
2020-03-17 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_in::is_matching_decl): Propagate instantiated
noexcept specifications.
gcc/testsuite/
* g++.dg/modules/except-3{,_[ab]}.[hHC]: New.
gcc/cp/
* module.cc (lazy_snum, recursive_lazy): New.
(module_state::read_language): Set lazy_snum.
(lazy_load_{binding,specializations}): Call recursive_lazy.
2020-03-16 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (elf_in::defrost): Return bool.
(module_state::from): May return NULL.
(module_state::maybe_completed_reading): New, broken out of
check_read.
(pendset::lazy_load): Likewise.
(module_state::write): Do not read partitions here.
(module_state::read_initial): Do not create slurp or elf_in here.
(module_state::load_{preprocessor,language}): Return bool, add
outermost flag. Adjust check_read calls.
(module_state::load_section): Reimplement, check mc_slot, issue
errors here.
(module_state::check_read): Reimplement for use by config loaders.
(module_state::do_import): Add outermost flag, alloc slurping
here. Adjust check_read call.
(module_state::lazy_load): Thin wrapper on load_section.
(module_state::lazy_load_binding): Check error emission here and
diagnose.
(module_state::lazy_load_specializations): Likewise.
(direct_import, preprocess_module): Adjust.
gcc/testsuite/
* g++.dg/modules/leg-merge-4_c.C: Adjust regexp matching
gcc/cp/
* doc/invoke.texi (C++ Modules): Clarify a couple of things.
2020-03-13 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (lookup_field_ident): Check TYPE_LANG_SPECIFIC
before getting the member vector.
gcc/testsuite/
* g++.dg/modules/pmf-1{,_[ab]}.[hHC]: New.
gcc/cp/
* pt.c (template_args_equal): Slight refactor to clarify control
flow.
* tree.c (cp_tree_equal): Use comp_template_args for TREE_VEC.
* typeck.c (structural_comptypes): Comment about exception specs.
Ranges, you were right, have a biscuit!
gcc/testsuite/
* g++.dg/modules/odr-1{,_[ab]}.[hHC]: Moved to ..
* g++.dg/modules/lambda-2{,_[ab]}.[hHC]: ... here. Xfailed
gcc/cp/
* module.cc (trees_in::decl_value): Set and reset constraints on
duplicate decl.
(trees_in::is_matching_decl): Use decls_match to compare decls.
gcc/testsuite/
* g++.dg/modules/except-2{,_[ab]}.[hHC]: New.
* g++.dg/modules/builtin-4_[ab].[HC]: New.
gcc/cp/
* mangle.c (find_substitution): Cleanup for c++/94027 fix.
gcc/cp/
* module.cc (module_state::read_config): Allow overriding the
version check.
gcc/c-family/
* c.opt (fmodule-version-ignore): New undocumented option.
2020-03-11 Nathan Sidwell <nathan@acm.org>
Bad ranges, no biscuit!
gcc/testsuite/
* g++.dg/modules/odr-1{,_[ab]}.[hHC]: New.
2020-03-10 Nathan Sidwell <nathan@acm.org>
Reconstruct deferred exception spec types
gcc/cp/
* cp-tree.h (fixup_deferred_exception_variants): Declare.
* tree.c (fixup_deferred_exception_variants): New.
* parser.c (cp_parser_member_declaration): Comment about friends.
(cp_parser_class_specifier_1): Call it, don't generate a new type.
(cp_parser_noexcept_specification_opt): Reorder if conditional.
gcc/testsuite/
* g++.dg/modules/deferred-1{,_[ab]}.[hHC]: New.
Merge master 3654d49d0ff651b2a78401bc2430428711e7d2eb
2020-03-09 Nathan Sidwell <nathan@acm.org>
Function-scope using directives
gcc/cp/
* cp-gimplify.c (cp_genericize_r): Set DECL_CONTEXT of
IMPORTED_DECL.
* module.cc (trees_{in.out}::core_vals): Stream IMPORTED_DECL's
initial.
(trees_out::decl_node): IMPORTED_DECLs are always by value.
Namespace aliases
gcc/cp/
* name-lookup.c (do_namespace_alias): Set originating module.
* module.cc (trees_out::tree_node_bools): Allow namespace aliases.
(depset::hash::make_dependency): Likewise.
(depset_hash::add_namespace_entities): Likewise.
(set_instantiating_module): Likewise.
gcc/testsuite/
* g++.dg/modules/ns-alias-1_[abc].C: New.
gcc/cp/
* module.cc (trees_{in,out}::vec_chained_decls): New.
(trees_{in,out}::{read,write}_class_def): Use for fields and vtables.
gcc/testsuite/
* g++.dg/modules/vtt-2{,_[ab]}.[hHC]: New.
gcc/cp/
* cp-tree.h (get_mergeable_specialization_flags)
(add_mergeable_specialization): Declare.
* module.cc (trees_{in,out}::key_mergeable): Stream specialization
flags and add them as necessary.
(enum ct_decl_flags): Delete.
(module_state::{read,write}_cluster): No decl flags.
(install_specialization): Delete.
* pt.c (get_mergeable_specialization_flags): New.
(add_mergeable_specialization): New.
gcc/testsuite/
* g++.dg/modules/partial-1{,_[ab]}.[hHC]: New.
* g++.dg/modules/tpl-spec-5_b.C: Adjust scan.
2020-03-05 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* tree.c (set_array_type_canon): Add dependent parm.
(build_cplus_array_type, cp_build_qualified_type_real)
(strip_typedefs): Pass dependent_p on.
gcc/testsuite/
* g++.dg/modules/tpl-ary-1.h: Try constifying.
gcc/cp/
* cp-tree.h (cplus_build_array_type): Add known-dependent default arg.
* tree.c (cplus_build_array_type): Only calculate dependent if
unknown. Set TYPE_DEPENDENT_P on dependent arys.
* module.cc (trees_{in,out}::type_node): Serialize dependentness
of array types.
gcc/testsuite/
* g++.dg/modules/tpl-ary-1{,_[ab]}.[hHC]: New.
2020-03-04 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (mergeable_class_entities): Check TYPE_LANG_SPECIFIC.
gcc/cp/
* module.cc (depset::hash::add_dependency): Only unscoped enum
usings from the enum itself are mutual dependencies.
(cluster_cmp): Cope with using decls for the same entity.
gcc/testsuite/
* g++.dg/modules/using-7.C: New.
gcc/cp/
* module.cc (trees_out::core_vals): Adjust typedef detection.
(trees_{in,out}::decl_value): Likewise.
gcc/testsuite/
* g++.dg/modules/tdef-7{,_[ab]}.[hHC]: New.
gcc/cp/
* module.cc (trees__out::key_mergeable): NULL name more often.
(enum merge_match): Delete.
(check_mergeable_decl): Use merge_kind instead.
(trees_in::key_mergeable): Adjust.
gcc/testsuite/
* g++.dg/modules/merge-6_b.C: Adjust scan.
gcc/cp/
* module.cc (struct merge_key): simplify.
(trees_{in,out}::key_mergeable): Optimize merge_key streaming.
2020-03-03 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (enum merge_kind): Add more discriminators.
(merge_kind_name): Adjust.
(trees_{in,out}::key_mergeable): Partition via new discriminators.
(trees_in::decl_value): Remove bad formatting.
(trees_out::get_merge_kind): Select new discriminators.
(mergeable_namespace_entity, mergeable_class_member): Fold into
reimplemented key_mergeable.
gcc/testsuite/
* g++.dg/modules/merge-[56]_b.C: Adjust scans.
gcc/cp/
* module.cc (struct merge_key): Remove index as tree hack ...
(merge_key::{read,write}): ... here.
(trees_{in,out}::key_mergeable): Adjust.
gcc/cp/
* module.cc (merge_key::read): Remove req qualifier hack.
(check_mergeable_decl): Use merge_key, not explicit args.
(mergeable_namespace_entity, mergeable_class_member): Likewise.
(trees_in::key_mergeable): Adjust.
gcc/cp/
* module.cc (trees_{in,out}::decl_container): New.
(trees_in::key_mergeable): Reimplement, swallowing the merging
logic of ...
(trees_in::decl_value): ... this.
gcc/testsuite/
* g++.dg/modules/builtin-[13]_a.C: Adjust scans.
* g++.dg/modules/indirect-[234]_b.C: Likewise.
* g++.dg/modules/inst-[23]_a.C: Likewise.
gcc/cp/
* module.cc (trees_{in,out}::fn_arg_types): Delete.
(struct merge_key): New.
(trees_out::key_mergeable): Use merge_key.
(trees_out::key_mergeable): #ifdef out.
(trees_in::decl_value): Adjust key handling.
2020-03-02 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.h (mergeable_namespace_entity)
(mergeable_class_member): Don't declare.
* name-lookup.c (check_mergeable_decl, mergeable_namespace_entity)
(mergeable_class_member): Move to ...
* module.cc (check_mergeable_decl, mergeable_namespace_entity)
(mergeable_class_member): ... here.
gcc/cp/
* decl2.c (c_parse_final_cleanups): Revert previous change.
* name-lookup.h (mergeable_{namespace,class}_entities): Declare.
(add_mergeable_namespace_entity): Declare.
* name-lookup.c (member_vec_dedup): Link stat_hack chain.
(check_module_override): Do not use check_mergeable_decl.
(mergeable_{namespace,class}_entities): New.
(add_mergeable): Rename to ...
(add_mergeable_namespace_entitity): ... here.
(mergeable_{namespace,class}_entity): Use new accessors.
2020-02-28 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (struct note_def_cache_hasher): New type.
(note_defs): Use it, set GTY((cache)).
(trees_{in,out}::assert_definition): Adjust.
(module_state::write, init_module_processing): Adjust note_defs
construction.
gcc/cp/
* module.cc (c_parse_final_c_cleanups): Don't complain about
unsynthesized defaulted members in a header unit, and pick a
privileged clone to complain about when we do.
gcc/testsuite/
* g++.dg/modules/imp-member-3.H: New.
gcc/cp/
* module.cc (trees_(in,out)::fn_arg_types): Serialize ref
parmness.
(trees_out::key_mergeable): Adjust.
* name-lookup.c (check_mergeable_decl): Check ref parmness.
(mergeable_class_member): __as_base not found via name lookup.
gcc/testsuite/
* g++.dg/modules/merge-15{,_[ab]}.[hHC]: New.
Merge master 9d2d283367a407c1ba9ecdb8590f9295828e25f8
2020-02-27 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::decl_value): FIELD_DECLS can have
template_info.
(member_owned_by_class): Likewise.
gcc/testsuite/
* g++.dg/modules/merge-14{,_[ab]}.[hHC]: New.
2020-02-26 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* decl.c (build_typename_type): Refactor.
* module.cc (trees_out::decl_value): Class-scope using-decls are
like fields.
(trees_out::key_mergeable): Using-decls are like anonymous fields.
(trees_{in,out}::{read,write}_class_def): Beware of
typename_type's TYPE_DECL in the member vec.
(trees_out::mark_class_def): Mark using-decls.
(depset::hash::make_dependency): Assert not a class-scope
using-decl.
* name-lookup.c (mergeable_class_member): Using-decls can be
indexed.
({get,lookup}_field_ident): Using-decls are like fields.
gcc/testsuite/
* g++.dg/modules/indirect-2_c.C: Adjust scans.
* g++.dg/modules/merge-13{,_[ab]}.[hHC]: New.
2020-02-25 Nathan Sidwell <nathan@acm.org>
gcc/testsuite/
* g++.dg/modules/string-1_[ab].[CH]: Enable in c++20 mode.
gcc/testsuite/
* g++.dg/modules/merge-12{,_[ab]}.[hHC]: New.
gcc/cp/
* typeck.c (structural_comptypes): Deal with TYPE_ARGUMENT_PACK.
gcc/testsuite/
* g++.dg/concepts/pack-1.C: New.
PR c++/93761
gcc/cp/
* module.cc (begin_header_unit): New, broken out of ...
(module_begin_main_file): ... here. Call it when not
preprocessed.
(init_module_processing): Call it when preprocessed.
gcc/testsuite/
* g++.dg/modules/preproc-1.C: New.
gcc/testsuite/
* g++.dg/modules/atom-decl-2.C: Use dg-prune.
* g++.dg/modules/atom-pragma-3.C: Likewise.
* g++.dg/modules/mod-decl-1.C: Likewise.
* g++.dg/modules/mod-decl-3.C: Likewise.
* g++.dg/modules/indirect-1_c.C: Remove dg-bogii.
* g++.dg/modules/part-3_c.C: Likewise.
Global module constraint merging
gcc/cp/
* module.cc (trees_out::decl_value): Always stream constraints.
(trees_in::decl_value): Likewise, deal with requires in merge key.
(trees_{in,out}::key_mergeable): Stream requires.
* name-lookup.c (check_mergeable_decl): Add & check requires.
(check_module_override): Get requires.
(mergeable_namespace_entity): Add requires.
(mergeable_class_member): Likewise.
(make_namespace_finish): Adjust.
* name-lookup.h (mergeable_namespace_entity): Add requires.
(mergeable_class_member): Likewise.
gcc/testsuite/
* g++.dg/modules/concept-5{,_[ab]}.[hHC]: New.
2020-02-24 Nathan Sidwell <nathan@acm.org>
Implement US033
gcc/cp/
* module.cc (import_module): Check language-linkage depth.
* parser.c (cp_parser_import_declaration): Check if direct
language linkage.
gcc/testsuite/
* g++.dg/modules/inc-xlate-1_d.C: Delete.
* g++.dg/modules/lang-1_[abc].[HC]: New.
* g++.dg/modules/lang-2_[ab].C: New.
Merge master 3841739c29a54c0141c3156cdd47891c258b2b88
2020-02-22 Nathan Sidwell <nathan@acm.org>
libcpp/
* lex.c (cpp_directives_only): Commonize ' & " peeking, add
cpp-number vs raw-string detection.
gcc/testsuite/
* c-c++-common/cpp/dir-only-7.c: Add test.
2020-02-19 Nathan Sidwell <nathan@acm.org>
libcpp/
* lex.c (cp_directive_only_process): Deal with raw strings by
backtracking.
2020-02-14 Nathan Sidwell <nathan@acm.org>
libcpp/
* lex.c (cpp_directive_only_process): Cope with number
punctuators.
gcc/testsuite/
* c-c++-common/cpp/dir-only-8.c: New.
2020-02-12 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* Make-lang.in (MODULE_REVISION): Add branch name.
2020-02-11 Nathan Sidwell <nathan@acm.org>
gcc/c-family/
* c-opts.c (c_finish_options): Builtins & command-line starts at
1.
(cb_file_change): Alter detection of main file start.
* c-ppoutput.c (print_line_1): Don't nadger line zero.
gcc/testsuite/
* g++.dg/modules/dir-only-3.C: Update line nos
* g++.dg/modules/dir-only-4.C: New.
gcc/c-family/
* c-optsc (c_common_post_options): Set module_directives
regardless of preprocessed state.
gcc/cp/
* parser.c (cp_parser_skip_to_pragma_eol): Don't explode on
meeting actual EOF.
gcc/testsuite/
* g++.dg/modules/dir-only-3.C: New.
Merge master a6ee556c7659877bb59b719f11ca2153e86ded59
2020-02-10 Nathan Sidwell <nathan@acm.org>
libcpp/
lex.c (do_peek_prev): New.
(cpp_directive_only_process): Peek backwards from 'R' to check it
is a raw literal.
gcc/testsuite/
* c-c++-common/cpp/dir-only-7.c: Extend.
2020-02-08 Nathan Sidwell <nathan@acm.org>
libcpp/
lex.c (_cpp_lex_direct): PRAGMA_EOL is never pre-padded.
(cpp_directive_only_process): Emit line marker after module
control-line.
gcc/
* langhooks.h (struct lang_hooks): Add PT_flags enum.
gcc/c-family/
* c-ppoutput.c (token_streamer): Add begin_pragma.
(token_streamer::stream): Remove out-of-pragma EOL procesing.
Ignore pragma_eol location.
(scan_translation_unit): Pay attention to filter return flags.
(directives_only_cb): Likewise.
gcc/cp/
* lex.c: Inlude langhooks.
(coro::resume): Return pragma begin flag.
gcc/testsuite/
* g++.dg/modules/dir-only-2_b.c: Add broken line check.
gcc/
* langhooks (struct lang_hooks): preprocess_token takes and
returns a uintptr_t.
gcc/cp/
* cp-tree.h (module_token_{pre,cdtor,lang}): Change cookie type.
* lex.c (module_token_{pre,cdtor,lang}): Change cookie type.
* parser.c (cp_lexer_new): Likewise.
gcc/c-family/
* c-ppoutput.c (scan_translation_unit): Adjust lang hook use.
(class do_streamer): Likewise.
(scan_translation_unit_directives_only): Likewise.
2020-02-08 Nathan Sidwell <nathan@acm.org>
libcpp/
* lex.c (cpp_directive_only_process): Relax raw string detection.
2020-02-07 Nathan Sidwell <nathan@acm.org>
libcpp/
* lex.c (cpp_directive_only_process): Re-reimplement.
libcpp/
* lex.c (cpp_maybe_module_directive): Use 'module control-line'
here ...
gcc/cp/
* parser.c (cp_parser_diagnose_invalid_type_name): ... here ...
(cp_parser_import_declaration): ... and here.
libcpp/
* internal/cpplib.h (cpp_clear_if_stack): Don't declare.
* directives.c (cpp_clear_if_stack): Delete.
Merge master 82aee6dd61e2a5b4e4b124f896c8403169688f41
-fdirectives-only (a bit buggy)
gcc/c-family/
* c-ppoutput.c (token_streamer::stream): Adust PRAGMA_EOL.
(class_do_streamer): New.
(directives_only_cb): Extend for token streaming.
(scan_translation_unit_directives_only): Pay attention to
preprocess lang_hook.
(print_line_1): Ignore UNKNOWN_LOCATIONs.
libcpp/
* include/cpplib.h (cpp_directives_only): Add cpp_reader to
callback.
* lex.c (do_peek_{backslash,next,ident,module): New.
(cpp_directive_only_preprocess): Add module peeking.
gcc/testsuite/
* g++.dg/modules/dir-only-2_[ab].[CH]: New.
gcc/c-family/
* c-ppoutput.c (class token_streamer): New class, swallow guts of
...
(scan_translation_unit): ... this. Use it.
2020-02-06 Nathan Sidwell <nathan@acm.org>
libcpp/
* include/cpplib.h (enum CPP_DO_task): New.
(cpp_directive_only_process): Adjust prototype.
* lex.c (cpp_directives_only_process): Take data pointer and
generic callback, adjust.
gcc/c-family/
* c-ppoutput.c (print_lines_directives_only): Replace with ...
(directives_only_cb): ... this new function.
(scan_directive_only_preprocess): Adjust call.
libcpp/
* lex.c (cpp_directive_only_process): Simplify raw string lexing.
libcpp/
* lex.c (cpp_directive_only_process): Add raw string lexing.
gcc/testsuite/
* c-c++-common/cpp/dir-only-7.c: New.
2020-02-05 Nathan Sidwell <nathan@acm.org>
Merge master fa0c6e297b22d5883857d0db4a6a8be0967cb16f
libcpp/
* directives-only.c: Delete.
* Makefile.in: Remove it.
* include/cpplib.h (cpp_directives_only_process): Declare.
* internal.h (struct _cpp_dir_only): Delete.
(_cpp_preprocess_dir_only): Delete.
* lex.c (cpp_directive_only_process): New implementation.
gcc/c-family/
* c-ppoutput.c (print_lines_directive_only): lines is unsigned.
(scan_translation_unit_directives_only): Reimplement.
gcc/testsuite/
* gcc.dg/cpp: Move directives-only tests to ...
* c-c++-common/cpp: ... here.
2020-02-04 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* parser.c (cp_parser_import_declaration): Be stricter about preamble.
gcc/testsuite/
g++.dg/modules/atom-decl-2.C: Adjust diagnostics.
g++.dg/modules/atom-pragma-3.C: Likewise.
g++.dg/modules/exp-xlate-1_b.C: Likewise.
g++.dg/modules/inc-xlate-1_e.C: Likewise.
g++.dg/modules/atom-preamble-2_f.C: New.
gcc/cp/
* module.cc (preprocess_module): Don't load header unit if not
preprocessing. Always close and reopen the line map spans.
libcpp/
* include/cpplib.h (cpp_get_options, cpp_get_callbacks)
(cpp_get_deps): Mark as PURE.
gcc/cp/
* module.cc (module_state::do_import): Drop deps handling here.
(preprocess_module): Mark interface.
(preprocessed_module): Correct dependency generation.
(finish_module_processing): Drop deps handling here.
libcpp/
* mkdeps.c (make_write): Note Make 4.3's &: targets
gcc/cp/
* module.cc (MODULE_UNKNOWN_PARTITION): Delete.
(module_state::read_imports): Drop special partition detection.
(module_state::read_partitions): Drop special partition setting.
(module_translate_include): Use main_source_loc for mapper.
({init,fini}_module_processing): Likewise.
gcc/cp/
* lex.c (module_token_cdtor): Call preprocessed_module on
teardown here ...
* parser.c (cp_lexer_new_main): ... not here.
* module.cc (struct module_state): Drop from_loc. Use loc in most
places.
(module_state::{maybe_create_loc,attach,is_detached): Delete.
(module_state::is_rooted): New. Use it in place of is_detached.
(module_state::imported_from): New.
(module_state::do_import): Create module loc here ...
(direct_import): ... not here ...
(preprocess_module): ... or here.
(import_module): Reparent here.
(module_cpp_undef): Check flag_header_unit.
(module_begin_main_file): Do not declare_module here ...
(preprocessed_module): ... do it here.
gcc/cp/
* module.cc (module_state::direct_import): Delete.
(module_state::do_import): Only ever do initial read.
(direct_import): New non-member fn.
({import,declare}_module): Call it.
(preprocess_module): Call do_import.
gcc/cp/
* module.cc (struct module_state): Cleanly separate module kind
flags from module use flags.
2020-02-03 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (struct module_state): Drop primary_p &
from_partition_p. Map uses to module_p and partition_direct_p.
gcc/cp/
* module.cc (struct module_state): Add load_state, not flags.
Remove imported_p, lazy_{preprocessor,language}_p.
(module_state::read_{imports,preprocessor,language}): Adjust.
(module_state::{check_read,{do,direct}_import}): Adjust.
({declare,preprocess}_module): Adjust.
gcc/cp/
* cp-tree.h (module_normal_import_p): Delete.
* module.cc (struct module_state): Rationalize flags.
(module_normal_import_p): Delete.
(module_state::direct_import): Don't save and restore line state
here.
(import_module): Just for language.
(preprocess_module): Save line state here.
* parser.c (cp_parser_import_declaration): Adjust.
(cp_parser_declaration_seq_opt): Drop superflous pragma parsing.
gcc/cp/
* parser.c (cp_parser_import_declaration): Diagnose include
translation in purview. Emit not about module-directive control lines.
gcc/testsuite/
* g++.dg/modules/inc-xlate-1_e.C: New.
2020-02-02 Nathan Sidwell <nathan@acm.org>
libcpp/
* internal.h (struct spec_nodes): Transpose n_modules array.
* init.c (post_options): Adjust n_modules array access.
* lex.c (cpp_maybe_module_directive): Remove supurfluous state and
laziness.
gcc/
* module.cc (module_translate_include): Add __translated attribute.
* parser.c (cp_parser_translation_unit): Move translated
diagnostic to ...
(cp_parser_import_declaration): ... here. Still disabled.
(cp_parser_module_export): Check for following module directive.
gcc/testsuite/
* g++.dg/modules/exp-xlate-1_b.C: Remove xfail, adjust errors.
* g++.dg/modules/inc-xlate-1_b.H: Adjust final scans.
* g++.dg/modules/legacy-[35]_[bcd].[CH]: Adjust final scans.
2020-01-31 Nathan Sidwell <nathan@acm.org>
libcpp/
* include/cpplib.h (NODE_MODULE): New.
(struct cpp_hashnode): Reserve another flag bit.
* internal.h (struct spec_nodes): Replace separate module spec
nodes by array.
(_cpp_setup_module_directive): Delete.
* init (post_options): Adjust module node initialization.
* directives.c (_cpp_setup_module_directive): Delete, move into ...
* lex.c (cpp_maybe_module_directive): ... here. New, absorb
peeking from ...
(_cpp_lex_token): ... here. Call it.
Merge master b92709388b9aee52db3cd7c227818e0ecccda2e5
gcc/cp/
* parser.c (cp_parser_skip_to_end_of_statement): Adjust pragma
skipping.
(cp_parser_skip_to_end_of_block_or_statement): Likewise.
Fix PRAGMA_EOL location
libcpp/
* lex.c (_cpp_lex_direct): Return CPP_PRAGMA_EOL at end of line.
gcc/cp/
* lex.c (token_coro::resume): No need to handle in-pragma EOF.
* parser.c (cp_parser_skip_to_pragma_eol): Likewise.
(cp_parser_omp_declare_simd, cp_parser_omp_declare_reduction)
(cp_parser_oacc_routine, cp_parser_initial_pragma, pragma_lex): Likewise.
gcc/c-family/
* c-ppoutput.c (scan_translation_unit): Ignore CPP_PRAGMA_EOL in
not a pragma.
gcc/testsuite/
* c-c++-common/cpp/pragma-eof.c: New.
Implement p1857, part 3
gcc/cp/
* cp-tree.h (module_preprocess, import_module_pre): Replace with ...
(preprocess_module): ... this.
(import_module_lang): Replace with ...
(import_module): ... this.
(preprocessed_module): Declare.
(process_deferred_imports): Delete.
* lex.c (struct token_coro): Report via preprocess_module.
(module_token_pre): Call preprocessed_module on teardown.
* module.cc (module_state::module_p): New flag.
(main_source_loc): New.
(pending_imports): Delete.
(module_state::direct_import): Do not get filename here.
(import_module_lang): Replace with ...
(import_module): Drop attach logic.
(declare_module): Adjust.
(module_preprocess, import_module_pre): Replace with ...
(preprocess_module): ... this. Do attach logic here.
(preprocessed_module): New. Do deps and module server name comms.
(process_deferred_imports): Delete.
* parser.c (cp_lexer_new_main): Call preprocessed_module when
done.
(cp_parser_translation_unit): Drop deferred imports logic.
(cp_parser_import_declaration): Adjust.
gcc/testsuite/
* g++.dg/modules/atom-preamble-2_d.C: Remove xfail.
* g++.dg/modules/bad-mapper-1.C: Adjust diagnostic loc.
* g++.dg/modules/bad-mapper-2.C: Likewise.
* g++.dg/modules/bad-mapper-3.C: Likewise.
* g++.dg/modules/map-2.C: Likewise.
2020-01-30 Nathan Sidwell <nathan@acm.org>
Implement p1857, part 2
libcpp/
* include/line-map.h (linemap_module_reparent): Declare.
* line-map.c (linemap_module_reparent): New.
gcc/cp/
* cp-lang.c (LANG_HOOKS_PREPROCESS_TOKEN): Adjust.
* cp-tree.h (module_preprocess_token): Rename to ...
(module_token_pre): ... here.
(module_token_{cdtor,lang}): Declare.
(module_map_header): Delete.
(module_preprocess): Adjust parameters.
(import_module): Delete, replace with ...
(import_modile_{pre,lang}): ... these.
(declare_module): Return void.
* lex.c (struct token_coro): New, broken out of ...
(module_preprocess_token): ... here. Replace with ...
(module_token_{pre,lang,cdtor}): ... these.
* module.cc (module_state::read_location): Deal with early-read
partition locations.
(module_state::direct_import): Always preserve line map. Take
for_cpp arg.
(import_module): Break into ...
(import_module_{pre,lang}): ... these. Disable pending imports.
(declare_module): Adjust.
(module_map_header): Delete.
(module_preprocess): Do not change module array. Return primary
module.
* parser.c (cp_lexer_tokenize): Delete.
(cp_lexer_new_main): New, resurrected from trunk. Tokenize the
whole buffer. Call the token coro.
(cp_parser_skip_to_closing_parenthesis_1): Deal with falling into
a module pseudo-pragma.
(cp_parser_skip_to_end_of_{,block_or_}statement): Likewise.
(cp_parser_translation_unit): Drop the incremental tokenization.
(cp_parser_module_name): Drop KIND parameter.
(cp_parser_module_directive_end): New.
(cp_parser_{import,module}_declaration): Adjust.
(cp_parser_declaration): Deal with (badly placed) import or module
declarations.
(cp_parser_toplevel_declaration): Restore PRAGMA parsing.
(c_parse_file): PCHness handled in cp_lexer_new_main, use it.
gcc/testsuite/
* g++.dg/modules/atom-decl-2.C: Adjust expected error
* g++.dg/modules/atom-pragma-3.C: Likewise.
* g++.dg/modules/exp-xlate-1_b.C: Likewise.
* g++.dg/modules/mod-decl-1.C: Likewise.
* g++.dg/modules/p0713-2.C: Likewise.
* g++.dg/modules/p0713-3.C: Likewise.
* g++.dg/modules/atom-preamble-2_d.C: Temporary XFAIL
* g++.dg/modules/unnamed-1_b.C: Adjust output scan
gcc/cp/
* parser.c (cp_lexer_alloc): Remove pch finalizing.
(cp_parser_skip_to_closing_parenthesis_1): Deal with falling into
a CPP_PRAGMA.
(cp_parser_skip_to_end_of_{,block_or_}statement): Likewise.
(cp_parser_skip_to_pragma_eol): Don't consume CPP_EOF.
(cp_parser_new): Take a lexer, don't create it here.
(cp_parser_declaration): Just point at peeked tokens, don't copy.
(cp_parser_block_declaration): Likewise.
(cp_parser_initial_pragma): Don't get the first token.
(c_parse_file): Do it here, and finalize pch.
libcpp/
* lex.c (_cpp_lex_direct): Set location of PRAGMA_EOL.
gcc/testsuite/
* g++.dg/modules/exp-xlate-1_b.C: Add xfailed bogus-error.
* g++.dg/modules/cpp-2_c.C: Adjust output scan.
* g++.dg/modules/cpp-5_c.C: Likewise.
* g++.dg/modules/legacy-3_b.H: Likewise.
* g++.dg/modules/legacy-3_c.H: Likewise.
* g++.dg/modules/legacy-6_c.C: Likewise.
* g++.dg/modules/legacy-6_d.C: likewise.
2020-01-27 Nathan Sidwell <nathan@acm.org>
gcc/
* langhooks.h (preprocess_token): Take a const cpp_token pointer.
gcc/c-family/
* (c-ppoutput.c (scan_translation_unit): Preprocess lang hook
doesn't alter the token.
gcc/cp/
* cp-tree.h (module_preprocess_token): Take const cpp_token
pointer.
* lex.c (module_preprocess_token): Take const cpp_token.
2020-01-24 Nathan Sidwell <nathan@acm.org>
Merge master a1f6eff20e3bb32c5051e77093ee28faec2abca0
gcc/c-family/
* c-common.h (enum rid): Remove non-underbarred module RIDs.
* c-common.c (c_common_reswords): Remove non-underbarred module keywords.
gcc/cp/
* lex.c (init_reswords): Module keywords are keywords.
* parser.c (cp_lexer_tokenize): Look for keywords.
(cp_parser_translation_unit): Likewise.
gcc/testsuite/
* g++.dg/modules/exp-xlate-1_b.C: Remove bogus xfail.
2020-01-23 Nathan Sidwell <nathan@acm.org>
libcpp/
* expr.c (parse_defined): Fixup for modules.
(parse_has_include): Remove controlling macro nonsense.
Implement p1857, part 1
libcpp/
* internal.h (struct lexer_state): Add directive_file_token field.
(struct spec_nodes): Add module directive nodes.
(_cpp_setup_module_directive): Declare.
* include/cpplib.h (struct cpp_options): Add module_directives field.
* directives.c (_cpp_setup_module_directive): New.
* init.c (post_options): Provess module_directives option.
* lex.c (_cpp_lex_token): Add module directive handling.
* macro.c (cpp_get_token_1): Add directive_file_token handling.
gcc/cp/
* lex.c (module_preprocess_token): Reimplement.
* parser.c (cp_lexer_tokenize): Module lines end in
CPP_PRAGMA_EOL.
(cp_lexer_not_macro): Delete.
(cp_parser_module_directive_end): New.
(cp_parser_diagnose_invalid_typename): Adjust.
(cp_parser_translation_unit): Adjust.
(cp_parser_{module,import}_declaration): Adjust.
gcc/c-family/
* c-common.h (enum rid): Add RID__MODULE and co.
* c-common.c (c_common_reswords): Add __module and co.
* c-lex.c (c_lex_with_flags): Adjust CPP_HEADER_NAME handling.
* c-opts.c (c_common_post_options): Set module_directives option.
gcc/testsuite/
* g++.dg/modules/anon-2_b.C: Adjust error/scans.
* g++.dg/modules/atom-preamble-1.C: Likewise.
* g++.dg/modules/atom-preamble-3.C: Likewise.
* g++.dg/modules/cpp-2_c.C: Likewise.
* g++.dg/modules/cpp-5_b.C: Likewise.
* g++.dg/modules/cpp-5_c.C: Likewise.
* g++.dg/modules/dep-2.C: Likewise.
* g++.dg/modules/keyword-1_b.C: Likewise.
* g++.dg/modules/legacy-3_b.H: Likewise.
* g++.dg/modules/legacy-3_c.H: Likewise.
* g++.dg/modules/legacy-6_c.C: Likewise.
* g++.dg/modules/legacy-6_d.C: Likewise.
* g++.dg/modules/mod-decl-0-2a.C: Likewise.
* g++.dg/modules/mod-decl-0.C: Likewise.
* g++.dg/modules/mod-decl-1.C: Likewise.
* g++.dg/modules/mod-decl-3.C: Likewise.
* g++.dg/modules/token-1.C: Likewise.
* g++.dg/modules/token-2_b.C: Likewise.
* g++.dg/modules/token-3.C: Likewise.
* g++.dg/modules/token-4.C: Likewise.
* g++.dg/modules/exp-xlate-1_b.C: XFAIL
* g++.dg/modules/inc-xlate-1_d.C: XFAIL
2020-01-21 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* modules.cc (slurping::remap_module): Return unsigned, use zero
for error case.
(trees_in::tree_node): Adjust.
(module_state::read_{namespace,pendings}): Likewise.
(module_state::read_{preprocessor,language}): Likewise.
gcc/cp/
* modules.cc (struct module_state): Add
lazy_{preprocessor,language}_p fields.
(module_state::read): Delete, move into do_import.
(module_state::read_preprocessor): Be idempotent. Read direct
imports here. Set header bitmap bits.
(module_state::read_language): Likwise, set import/export bits.
(module_state::check_read): Adjust file closing condition.
(module_state::set_import): Do not deal with header bitmaps here.
(module_state::do_import): Do the initial read (only) here.
(module_state::direct_import): Do the preprocessor and language
reading here.
gcc/cp/
* modules.cc (slurping::remap_module): Encode import directness in
remap array.
(module_state::read_imports): Adjust.
(module_state::read_initial): Likewise.
2020-01-20 Nathan Sidwell <nathan@acm.org>
Merge master 3a43459715e239fb8043bf64b830aaf1a9802180.
Coroutines committed.
2020-01-17 Nathan Sidwell <nathan@acm.org>
Merge master bf09d886a4be1031f7003073115af6cbc5575353.
2020-01-16 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_state::write_macros): Always write a set of
defs.
(module_state::read_macros): Adjust.
(module_state::read): Only read preprocessor for header unit.
(module_state::read_preprocessor): Assert am header.
gcc/cp/
* module.cc (module_state::{read,write}_counts): New. Broken out
of ...
(module_state::{read,write}_config): ... here.
(enum module_state_counts): New.
(module_state::write_cluster): Take lwm,hwm pair.
(module_state::read_{bindings,entities,inits}): Adjust.
(module_state::write): Write counts.
(module_state::read_{preprocessor,language}): Read counts.
gcc/cp/
* module.cc (slurping::slurping): Set current to ~0u.
(module_state::read_{initial,preprocessor,language}): New, broken
out of ...
(module_state::read): ... here. Call them.
2020-01-15 Nathan Sidwell <nathan@acm.org>
Merge master.
gcc/cp/
* module.cc (depset::traits): Add empty_zero_p.
2020-01-13 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* Make-lang.in (MODULE_REVISION): SVN's dead, man.
2020-01-10 Nathan Sidwell <nathan@acm.org>
Merge trunk r280131.
Bye bye SVN, I'm sure the farm upstate will be fine.
2020-01-06 Nathan Sidwell <nathan@acm.org>
Merge trunk r279868.
2020-01-03 Nathan Sidwell <nathan@acm.org>
Header unit deduplication milestone
gcc/testsuite/
* g++.dg/modules/string-1_{a.H,b.C}: New.
gcc/cp/
* module.cc (trees_in::decl_value): Disambiguate entity_ary slots
from entuty_hash slots.
(trees_out::get_merge_kind): Check of
uninstantiated_template_friend even when there's a depset.
gcc/cp/
* module.cc (trees_in::tree_value): Return existing.
gcc/testsuite/
* g++.dg/modules/merge-11{.h,_a.H,_b.C}: New.
gcc/cp/
* module.cc (trees_out::get_merge_kind): Detect bitfield storage
unit.
(trees_out::key_mergeable): Deal with anonymous bitfields.
* name-lookup.c (mergeable_class_member): Likewise.
gcc/testsuite/
* g++.dg/modules/merge-10{.h,_a.H,_b.C}: New.
gcc/
* tree.h (DECL_ALIGN_RAW): New, use it in accessors.
(DCL_WARN_IF_NOT_ALIGN): Likewise.
gcc/cp/
* cp-tree.h (CPTI_CONST_TYPE_INFO_TYPE,CPTI_TYPE_INFO_PTR_TYPE):
Move to after module hwm.
* module.cc (trees_out::write_class_def): Don't write empty thunk
lists.
(trees_in::read_class_def): Merge fields from a duplicate.
gcc/testsuite/
* g++.dg/modules/tinfo-2_{a.h,b.C}: New.
* g++.dg/modules/member-def-1_c.C: Adjust scan.
* g++.dg/modules/merge-9.h: Add another builtin.
gcc/cp/
* module.cc (module_state::read_cluster): Set cfun->returns_struct
approprately.
gcc/cp/
* module.cc (import_entity_module): Cope with exported entities.
2020-01-02 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (CPTI_ALIGN_TYPE): Not a global tree.
gcc/testsuite/
* g++.dg/modules/merge-9{.h,_a.H,_b.C}: New.
gcc/cp/
* module.cc (nodel_decl_hash): Rename to ...
(duplicate_hash): ... here. Allow binfos.
(trees_{in,out}::binfo_mergeable): New.
(trees_{in,out}::tree_node): Use it for tt_binfo.
(trees_{in,out}::tree_value): Use to dedup binfos.
gcc/testsuite/
* g++.dg/modules/merge-8{.h,_a.H,_b.C}: New.
gcc/cp/
* module.cc (trees_{in,out}::tree_binfo): Delete.
(trees_{in,out}::tree_node): Use binfo chain to find binfo.
Merge trunk r279811.
Update all the years!
Merge trunk r279809.
That's 2019 done.
Merge trunk r279556.
gcc/
* diagnostic-core.h (progname): Resolve conflict.
Merge trunk r279555.
Merge trunk r279473.
Apply trunk r279473.
gcc/cp/
* constexpr.cc (check_constexpr_fundef): Clear non-potential
result before registering.
Merge trunk r279472.
2019-12-19 Nathan Sidwell <nathan@acm.org>
Typeof merging
gcc/cp/
* ptree.c (cxx_print_type): Print TYPEOF_TYPE & BASES types.
* typeck.c (structural_comptypes): Add TYPEOF_TYPE.
gcc/testsuite/
* g++.dg/modules/merge-7{.h,_a.H,_b.C}: New.
Anonymous templates are a thing.
gcc/cp/
* module.cc (trees_out::key_mergeable): Deal with anon templatey
members.
* name-lookup.c (mergeable_class_member): Likewise.
gcc/testsuite/
* g++.dg/modules/merge-6{.h,_a.H,_b.C}: New.
gcc/cp/
* module.cc (trees_in::decl_value): Fix enum-context merging.
gcc/testsuite/
* g++.dg/modules/merge-5{.h,_a.H,_b.C}: New.
gcc/cp/
* module.cc (trees_out::key_mergeable): Fix indentation.
gcc/cp/
* name-lookup.c (mergeable_class_member): Get to class template
correctly.
gcc/testsuite/
* g++.dg/modules/merge-4{.h,_a.H,_b.C}: New.
gcc/cp/
* module.cc (trees_in::install_implicit_member): Fix parm type thinko.
gcc/testsuite/
* g++.dg/modules/imp-member-1_a.C: Fix scan.
* g++.dg/modules/imp-member-2_[abc].C: New.
2019-12-18 Nathan Sidwell <nathan@acm.org>
Installation of implicit member fns.
gcc/cp/
* module.cc (trees_in::install_implicit_member): New.
(trees_in::decl_value): Implicit member functions may be dups.
Call install_implicit_member.
gcc/testsuite/
* g++.dg/modules/imp-member-1_[abcde].C: New.
2019-12-17 Nathan Sidwell <nathan@acm.org>
Out-of-class member function definitions
gcc/cp/
* decl.c (begin_function_body): RAII.
* lex.c (cxx_dup_lang_specific): Clear IMPORT_P and PARTITION_P.
* module.cc (module_state::is_matching_decl): Add inner parm.
Propagate inline & externalness.
(module_state::write): Read all partition entities.
* parser.c (cp_parser_function_definition_after_decl): Set
defining module as appropriate.
gcc/testsuite/
* g++.dg/modules/member-def-2_[abcd].C: New.
Out-of-class member class definitions
gcc/cp/
* cp-tree.h (DECL_MODULE_PENDING_MEMBERS_P): New.
(lang_decl_base): Add module_pending_members_p.
(lazy_load_members): Declare.
* module.cc (depset::entity_kind): Add EK_INNER_DECL.
(depset::disc_bits): Add DB_IS_MEMBER_BIT.
(depset::is_member): New.
(module_state::write_cluster): Take ref to module_state_config.
Adjust.
(module_state::{read,write}_specializations): Rename to ...
(module_stte::{read,write}_pendings): Generalize to pending
members.
(trees_in::decl_val): Deal with pending members.
(depset::hash::make_dependency): Adjust for EK_INNER_DECL.
(depset::hash::add_class_entities): Add them.
(struct module_state_config): Rename num_specializations ->
num_pendings. Adjust throughout.
(module_state::read_entities): Shift snum another bit.
(module_sttate::lazy_load): Likewise.
(lazy_load_members): New.
* name-lookup.c (maybe_lazily_declare): Load pending members.
gcc/testsuite/
* g++.dg/modules/member-def-1_[abcd].C: New.
gcc/cp/
* cp-tree.h (set_defining_module): New.
* decl.c (xref_tag_1): Check can redeclare, set instantiating
module.
(start_enum): Likewise.
* module.c: Update doc preamble.
(module_may_redeclare): Get to the template.
(set_defining_module): New, broken out of ...
(set_instantiating_module): ... here. DO NOT CALL IT.
* rtti.c (init_rtti_processing): "type_info" has exportedness.
* semantics.c (begin_class_definition): Check can redeclare. Set
defining & instantiating.
gcc/testsuite/
* g++.dg/modules/friend-5_[ab].C: New.
* g++.dg/modules/tdef-4_[bc].C: Add comments.
2019-12-13 Nathan Sidwell <nathan@acm.org>
Merge trunk r279384.
gcc/cp/
* module.cc: Rename specset to pendset. Document.
Pending specializations keyed by ident
gcc/cp/
* cp-tree.h (DECL_TEMPLATE_LAZY_SPECIALIZATIONS_P): Delete.
(MODULE_VECTOR_LAZY_SPEC_P): Delete.
(MODULE_VECTOR_PENDING_{SPECIALIZATIONS,IS_HEADER,IS_PARTITION}_P): New.
(DECL_MODULE_PENDINGSPECIALIZATIONS_P): New.
(lang_decl_base): Add module_specializations_p.
(lazy_specializations_p): Declare.
* name-lookup.h (note_pending_specializations): No return value.
(load_pending_specializations): Declare.
(note_loaded_specializations): Delete.
* module.cc (specset): Key is entity ident. Adjust throughout.
(trees_in::decl_value): Deal with pending specializations.
(specset::lazy_load): Deal with indirections.
(module_state::{read,write}_specializations): Reimplement.
(lazy_specializations_p): New.
(lazy_load_specializations): Reimplement.
* name-lookup.c (mark_pending_on_{decl,binding}): Delete.
(set_module_binding): Drop lazy specialization tagging here.
(note_pending_specializations): Reimplement.
(load_pending_specializations): New.
(note_loaded_specializations): Delete.
* pt.c (lookup_template_class_1): Reimplement lazy specialization
loading.
(instantiate_template_1): Likewise.
gcc/testsuite/
* g++.dg/modules/inst-4_[ab].C: Adjust scans.
* g++.dg/modules/tpl-spec-[12345]_[abcd].C: Likewise.
gcc/cp/
* cp-tree.h (DECL_MODULE_ENTITY_P): New.
(lang_decl_bas): Add module_entity_p flag.
* module.cc (trees_in::decl_value): Insert according to
DECL_MODULE_ENTITY_P.
* lex.c (cxx_dup_lang_specific): Clear DECL_MODULE_ENTITY_P.
2019-12-12 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (class specset): Make ns an mc_slot.
(specset::hash::add): Adjust.
(specset::hash::lookup): Rename to ...
(specset::hash::extract): ... here. Adjust.
(specset::lazy_load): New.
(module_state::read_entities): Adjust lazy setting.
(module_state::read_specializations): Adjust hash table adding.
(lazy_load_binding): Reorder dump stacking.
(lazy_load_specializations): Likewise, call specset::lazy_load.
gcc/cp/
* cp-tree.h (DECL_MODULE_PARTITION_P): Update doc.
* module.cc (trees_in::decl_value): Only set
DECL_MODULE_PARTITION_P when primary interface.
gcc/cp/
* decl.c (lookup_and_check_tag): Refactor.
gcc/cp/
* module.cc (import_entity_index): Use different fail value.
(dumper::impl::nested_name): Don't explode on bad import indices.
(module_state::write): Adjust.
gcc/testsuite/
* g++.dg/modules/part-4_[abc].C: New.
2019-12-06 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (maybe_strip_cmi_prefix): Simplify.
gcc/cp/
* module.cc (trees_out::key_mergeable): Remove unreachable code.
gcc/cp/
* module.cc (enum tree_tag): Delete tt_friend_template.
(trees_out::decl_node): Uninstantiated template friends are not
special.
(trees_in::tree_node): Delete tt_friend_template handling.
(trees_{in,out}::{read,write}_class_def): No need to stream
template friends specially.
(trees_out::mark_class_def): No need to mark class_def members.
(depset::hash::make_dependency): Do not confuse uninstantiated
template friends with scope members.
gcc/testsuite/
* g++.dg/modules/tpl-friend-2_a.C: Adjust scan.
gcc/cp/
* module.cc (trees_out::mark_class_def): No need to mark friend
specializations.
gcc/cp/
* decl.c (duplicate_decls): Just zap the template's module info.
* pt.c (build_template_decl): No need to copy false module info.
(tsubst_tenplate_decl): Just zap the template's module info.
gcc/cp/
* module.cc (trees_out::decl_{node,value}): Remove cluster biasing.
(depset::hash::make_dependency): Likewise.
(module_state::write_{cluster,{namespace{,s}}): Likewise.
(module_state::write_{entities,specializations}): Likewise.
(module_state::write): Likewise.
(gcc/cp/
* module.cc (trees_out::decl_value): No need to look for dep again.
gcc/cp/
* module.cc (trees_out::decl_node): Get entity index & origin from
the depset.
(depset::hash::make_dependency): Stash the importing index &
origin in the depset.
(module_state::write_namespace): Get index & origin from the depset.
Structured bindings, c++2a libstdc++ is back working
gcc/cp/
* module.cc (trees_{in,out}::lang_decl_{bools,vals}): Handle
lds_decomp.
gcc/testsuite/
* g++.dg/modules/decomp-1_[ab].C: New.
Merge trunk r279023.
libstdc++ c++2a is now using structured bindings, and those don't
work :(
2019-12-05 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset::hash::add_namespace_context): New.
(trees_out::decl_node): Use it for namespace.
(depset::hash::make_dependency): Likewise for discovered GMF.
(depset::hash::add_binding): Use it.
(depset::tarjan::connect): Make sure we don't wander into imports.
(depset::hash::connect): Don't add imports to the graph.
(module_state::write_namespace{,s}): Never meet global namespace.
(module_state::write_entries): Handle namespace entries
separately.
(module_state::write): Reorganize cluster traversals.
gcc/cp/
* module.cc (depset::hash::add_dependency): Do not depend on
imports.
(depset::tarjen::connect): Assert more.
(depset::hash::connect): Add less.
(module_state::write): Fewer cases.
gcc/testsuite/
* g++.dg/modules/vmort-2_b.C: Invert scan test.
gcc/cp/
* module.cc (depset::{make,add}_dependency): Drop is_import parm,
update all callers.
(will_be_import): Delete.
(trees_out::decl_node): Determine will be import locally.
(depset::make_dependency): Likewise.
gcc/cp/
* cp-tree.h (DECL_MODULE_PARTITION_P): New.
(lang_decl_base): Add module_partition_p.
* decl.c (duplicate_decls): Adjust.
* pt.c (build_template_decl, tsubst_template_decl): Adjust.
* module.cc (will_be_import): Assert consistency.
(trees_in::decl_value): Set module_partition_p.
(depset::hash::make_dependency): Assert consistency.
(set_instantiating_module): Clear it.
One Beellion Modules!
gcc/cp/
* cp-tree.h (lang_decl_base): Replace module_origin field with
module_import_p flag.
* modules.cc (MODULE_UNKNOWN{,_PARTITION}): Adjust.
(MODULE_LIMIT): Delete.
(module_state): Make mod & remap unsigneds.
(module_state::read): No need to check module overflow.
gcc/cp/
* module.cc (macro_import::slot) Adjust encoding to use fewer
bits.
(macro_import::append): Add defness parm.
(macro_import::exported): Always make definition.
(maybe_add_macro): Adjust.
(module_state::{write,install}_macros): Likewise.
(module_state::deferred_macro): Likewise.
Module index no longer on the decl itself.
gcc/cp/
* cp-tree.h (DECL_MODULE_ORIGIN): Delete.
(DECL_MODULE_IMPORT_P): New.
(get_importing_module): Declare.
* decl.c (duplicate_decls): Replace DECL_MODULE_ORIGIN with
DECL_MODULE_IMPORT_P.
* decl2.c (no_linkage_error): Likewise.
* module.cc
(will_be_import):Move later, use import_entity_{index,module}.
(import_entity_index): Add null_ok parm.
(dumper::impl::nested_name): Use import_entity_{index,module}.
(trees_in::decl_value): Set DECL_MODULE_IMPORT_P.
(trees_out::decl_node): Use will_be_import.
(depset::hash::make_dependency): Check import_p flag.
(depset::hash::add_specializations): Delete assert.
(module_state::{read,write}_namespaces): Check DECL_MODULE_IMPORT_P.
(module_state::write_specializations): Likewise.
(get_originating_module): Use get_importing_module.
(get_importing_module): New.
(module_may_redeclare): Lookup the module index.
(set_instantiating_module): Clear DECL_MODULE_IMPORT_P.
(finish_module_processing): Leep the entity_map.
* name-lookup.c (name_lookup::search_adl): Use
get_importing_module.
(add_imported_namespace): Set DECL_MODULE_IMPORT_P.
* pt.c (build_template_decl): Copy DECL_MODULE_IMPORT_P, not
ORIGIN.
(tsubst_template_decl): Likewise.
* ptree.c (cxx_print_decl): Use get_importing_module.
gcc/cp/
* name-lookup.h (add_imported_namespace): Origin is unsigned.
* name-lookup.c (add_imported_namespace): Origin is unsigned and
non-zero. Elide unreachable code.
gcc/cp/
* cp-tree.h (get_instantiating_module_decl): Delete.
(get_instantiating_module): Delete.
* module.cc (depset::hash::add_specialization): Remove assert.
(get_instantiating_module_decl): Delete.
(get_instantiating_module): Delete.
gcc/cp/
* module.cc (trees_in::{enum ,get_}{dup,ord}ness): Delete.
(trees_in::{odr,is}_duplicate): New.
(trees_in::read_{function,var,class,enum}_def): Adjust.
(module_state::read_cluster): Adjust.
gcc/cp/
* decl.c (duplicate_decls): Pass the old decl to
module_may_redeclare.
* module.cc (module_may_redeclare): Expect the decl, not its
owner.
gcc/cp/
* module.cc (trees_out::decl_node): Move is_import test into
non-streaming block. Check the decl, not the instantiator.
2019-12-04 Nathan Sidwell <nathan@acm.org>
Elrond is dead, long live Elrond!
gcc/cp/
* module.cc (trees_out::decl_node): Refactor, removing duplicate
code blocks.
Delete unreachable code
gcc/cp/
* module.cc (enum tree_tag): Delete tt_named,
tt_implicit_template.
(trees_out::decl_node): Remove #if'd out code.
(trees_in::tree_node): Remove tt_named, tt_implicit_template
handling.
(trees_out::key_mergeable): Remove unreachable anon-type case.
(trees_out::{write,mark}_class_def) Removed #if'd out code.
(trees_in::read_class_def): Likewise.
* name-lookup.c (get_binding_or_decl): Delete.
(lookup_by_type, lookup_ident, get_lookup_ident): Delete.
* name-lookup.h (lookup_by_type, lookup_ident, get_lookup_ident):
Don't declare.
Class members by index.
gcc/cp/
* decl.c (duplicate_decls): Repropagate module origin & purview.
* friend.c (add_friend): Potential code, so I don't forget it.
* module.cc (depset): Delete DB_MERGEABLE_BIT.
(find_enum_member): New.
(trees_out::decl_value): Separate different mergeable matching
cases. Add new ones.
(trees_out::decl_node): Stream class members by index. Adjust
identifier streaming.
(trees_in::decl_node): Deal with conv_op_identifier. Use
find_enum_member.
(trees_out::get_merge_kind): Add DECL parm, deal with via_ctx and
local_friends.
(trees_out::key_mergeable): Swap parms, deal with new kinds.
(trees_in::key_mergeable): Deal with new kinds.
(trees_{in,out}::{read,write}_class_def): Don't stream member
definitions.
(trees_out::mark_class_def): Don't mark members.
(depset::hash::make_dependency): Don't mark as mergeable.
(cluster_cmp): Compare by stripped UID.
(get_{instantiating,originating}_module_decl): Deal with fields,
usings and local friends.
* name-lookup.c (enum merge_match): New.
(check_mergeable_decl): Add match kind parm.
(match_mergeable_decl): Rename to ...
(mergeable_namespace_entity): ... here. Deal with namespace scope
entities.
(mergeable_class_member): New.
(make_namespace_finish): Adjust.
* name-lookup.h (match_mergeable_decl): Rename to ...
(mergeable_namespace_entity): ... here.
(mergeable_class_member): Declare.
gcc/testsuite/
* g++.dg/modules/friend-1_a.C: Adjust scans.
* g++.dg/modules/indirect-[1234]_[bc].C: Likewise.
* g++.dg/modules/inst-3_a.C: Likewise.
* g++.dg/modules/tpl-friend-[12]_a.C: Likewise.
* g++.dg/modules/tpl-spec-[45]_a.C: Likewise.
* g++.dg/modules/vmort-2_a.C: Likewise.
* g++.dg/modules/internal-1.C: Add xfailed dg-bogus
* g++.dg/modules/thunk-1_a.C: Avoid implicit member problem.
2019-12-02 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (dumper::impl::nested_name): Add 'template '
disambiguator.
(trees_out::add_indirect_tpl_parms): Check if streaming before
dumping.
gcc/testsuite/
* g++.dg/modules/indirect-[234]_[bc].C: Adjust scans.
* g++.dg/modules/inst-3_b.C: Likewise.
* g++.dg/modules/late-ret-[23]_[ac].[HC]: Likewise.
* g++.dg/modules/tpl-friend-[12]_a.C: Likewise.
* g++.dg/modules/tpl-spec-[1245]_[abcd].C: Likewise.
2019-11-27 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (will_be_import): New.
(depset::hash::make_dependency): Add is_import parm, rather than
calculate. Update all callers.
(depset::hash::add_dependency): Likewise.
gcc/cp/
* module.cc (trees_out::decl_node): Untangle namespace-scope
emission from class-scope.
(trees_in::tree_node): Fix tt_entity ident signedness.
(depset::hash::make_dependency): Check is_import before checking
GMF reachability.
gcc/cp/
* module.cc (trees_out::decl_node): Refactor function scope
& specialization emission.
gcc/cp/
* module.cc (trees_out::decl_node): Deal with function scope
before instantiations.
2019-11-26 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::decl_node): Tag and add indirects for
uninstantiated template friend.
(trees_in::tree_node): Likewise.
gcc/cp/
* module.cc (trees_out::decl_node): Remove a scope.
gcc/cp/
* module.cc (depset): Delete EK_UNNAMED, EK_MAYBE_SPEC.
(trees_out::decl_node): Use EK_DECL for those.
(depset::hash::make_dependency): Likewise.
gcc/testsuite/
* g++.dg/modules/tpl-friend-[12]_a.C: Adjust scans.
* g++.dg/modules/tpl-spec-5_a.C: Likewise.
* g++.dg/modules/vmort-2_a.C: Likewise.
gcc/cp/
* module.cc (trees_out::decl_node): Assert more.
gcc/cp/
* module.cc (module_state::check_read): Simplify to print once per
import.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Stream _EXPR operands in
forward order.
(trees_out::decl_node): Move NULL DECL_CONTEXT handling to ...
(trees_out::tree_node): ... here.
2019-11-25 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (struct unnamed_entity): Delete.
gcc/cp/
* name-lookup.h (get_imported_namespace): Don't delare.
* name-lookup.c (get_imported_namespace): Delete.
Namespaces are in the entity_ary
gcc/cp/
* module.cc (trees_out::decl_node): Namespace may be imported.
(depset::hash::make_dependency): Permit imported namespaces.
(module_state::{read,write}_namespace): New.
(module_state::{read,write}_namespaces): Adjust.
(module_state::{read,write]_bindings): Adjust.
(module_state::write): Don't count imported namespaces.
* name-lookup.c (add_imported_namespace): Mark namespace as
imported, if we made it.
gcc/testsuite/
* g++.dg/modules/indirect-[1234]_[bc].C: Adjust scans.
* g++.dg/modules/namespace-2_a.C: Likewise.
gcc/cp/
* module.cc (tree_tag): Delete tt_namespace.
(trees_in::tree_node): Delete tt_namespace handling.
(module_state::{read,write}_namespaces): Adjust.
(module_state::write_entities): Delete TABLE parm.
gcc/cp/
* module.cc (trees_out::tree_decl): Write namespaces as tt_entity.
(module_state::write_namespaces): Adjust.
(module_state::read_namespaces): Likewise, don't return a
namespace vector.
(module_state::{read,write}_bindings): Adjust.
(module_state::{read,write}_entities): Allow namespaces.
(module_state::{read,write}): Adjust.
gcc/testsuite/
* g++.dg/modules/indirect-[1234]_c.C: Adjust scans.
gcc/cp/
* module.cc (module_state::write_namespaces): Delete TABLE arg,
look at the dep[0]
(module_state::read_namespaces): Add num_spaces parm. Use it to
count iterations.
(module_State::write_bindings): Drop TABLE arg, look at dep[0].
(struct module_state_config): Add num_namespaces field, stream it.
(module_state::{read,write}): Don't count global namespace. adjust
namespace streaming calls.
gcc/cp/
* module.cc (trees_out::decl_node): Add namespace dependency here.
(depset::hash::add_dependency): And here.
(space_cmp): Delete.
(module_state::write): No need to sort namespaces anymore.
gcc/cp/
* module.cc (depset::hash::make_dependency): Add context
dependency when discovering a new GMF binding.
(depset::hash::add_binding): Likewise when discoving a non-empty binding.
(depset::hash::finalize_dependencies): Leave binding's namespace
dependency untouched.
(module_state::write_cluster): Assert binding's namespace in in
slot zero. Adjust binding scan.
2019-11-23 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cxx-mapper.cc (DOT_REPLACE, COLON_REPLACE): New.
(module2bmi): Use them.
gcc/testsuite/
* g++.dg/modues/modules.exp (dg-module-cmi): Update default mapping.
2019-11-22 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset::EK_FOR_BINDING): New.
(depset::hash::make_dependency): Don't look at current. Adjust.
(depset::hash::add_dependency): Current is always live.
(depset::hash::add_binding): Don't set current. Directly depend
the binding.
(depset::hash::add_namespace_entities): Use make_dependency.
(depset::hash::add_specializations): Likewise.
gcc/cp/
* module.cc (depset::hash::find_entity): Rename to ...
(depset::hash::find_dependency): ... here. Update callers.
(depset::hash::add_dependency): Break apart to ...
(depset::hash::make_dependency): ... this, and ...
(depset::hash::add_dependency): ... this, adder.
(depset::hash::add_dependency): Do both.
gcc/cp/
* module.cc (depset::DB_PSEUDO_SPEC_BIT): Delete.
(depset::is_pseudo_spec): Delete.
(depset::add_dependency): Don't set it.
gcc/cp/
* module.cc (trees_out::decl_node): We should not meet imported
internal namespaces.
(module_state::{read,write}): Stream entities before namespaces.
* name-lookup.c (add_imported_namespace): Module number must not
be negative.
gcc/cp/
* module.cc (trees_in::lang_decl_bools): Don't set module_origin
here.
(trees_out::decl_value): Stream out entity index. Install into
entity_map.
(trees_in::decl_value): Stream in entity index. Install into
entity ary, and map (if new)
(module_state::write_cluster): Do not install into map here.
(module_state::read_cluster): ... or here. And not ary either.
gcc/testsuite/
* g++.dg/modules/builtin-[13]_b.C: Adjust scans.
* g++.dg/modules/indirect-[123]_[bc].C: Likewise.
* g++.dg/modules/inst-[1234]_b.C: Likewise.
* g++.dg/modules/late-ret-[23]_c.C: Likewise.
* g++.dg/modules/part-3_[cd].C: Likewise.
* g++.dg/modules/tdef-6_b.C: Likewise.
gcc/cp/
* cp-tree.h (DECL_MODULE_IMPORT_P): #ifdef out, not yet ready
* module.cc (dumper::impl::nested_name): Don't use it.
(module_state::read_cluster): Likewise.
gcc/cp/
* module.cc (trees_out::decl_value): Ensure we stay in the
section.
(trees_out::mark_class_def): Do not mark non-friends on
CLASSTYPE_DECL_LIST.
2019-11-21 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (lookup_enum_member): Delete.
(get_binding_or_decl): Add missing return.
gcc/cp/
* name-lookup.c (get_binding_or_decl): Only class contexts.
* module.cc (trees_out::decl_node): Possible fixme.
gcc/cp/
* module.cc (depset::hash): Add sections member.
(module_state::write_cluster): Use it.
(module_state::write): Set it.
gcc/cp/
* module.cc (trees_out::decl_node): Don't strip_template checking
instantiation consistency.
(depset::hash::add_{dependency,specializations}): Likewise.
(get_originating_module_decl): Cope with template friends. Get to
the template_decl.
(get_instantiating_module_decl): Cope with template friends. Keep
the template_decl.
gcc/testsuite/
* g++.dg/modules/pl-spec-[1245]_[abcd].C: Adjust scans.
gcc/cp/
* name-lookup.c (check_local_shadow): Bail out for clones.
gcc/cp/
* module.cc (dumper::impl:nested_name): Obnly show module on imports.
gcc/testsuite/
* g++dg/modules: Anjust many scans.
2019-11-20 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (tree_tag): Rename tt_enum_int, add tt_enum_decl.
(trees_out::tree_decl): Write enum consts as tt_enum_decl, not
tt_data_member.
(trees_in::tree_node): Add tt_enum_decl handling, adjust
tt_data_member handling.
gcc/cp/
* module.cc (module_state::lazy_load): Add diags arg, make index
unsigned.
(lazy_load_specializations): Use lazy_load.
gcc/cp/
* module.cc (module_state:write_cluster): Minor cleanups
gcc/testsuite/
* g++.dg/modules/indirect-2_b.C: Adjust scans.
* g++.dg/modules/inst-3_a.C: Likewise.
* g++.dg/modules/stdio-1_a.H: Likewise.
gcc/cp/
* module.cc (depset:entity_kind): Reorder.
(depset::DB_REFS_UNNAMED_BIT): Delete. Remove accessor & setter.
(cluster_cmp): Order by entity_kind.
(module_state::write_cluster): A single write pass is sufficient.
gcc/testsuite/
* g++.dg/modules/indirect-3_b.C: Adjust cluster order scan.
* g++.dg/modules/late-ret-[23]_a.H: Likewise.
gcc/cp/
* (class depset): Drop entity_num field. Adjust all users to use
cluster.
(module_state::write_cluster): Merge counting and marking loops.
Expelliarmus!
gcc/cp/
* module.cc (module_state): Delete unnamed_{lwm,num}.
(enum ct_decl_flags): Delete cdf_is_voldemort.
(module_state::write_cluster): Don't set cluster number. Drop
voldemort handling.
(module_state::read_cluster): Drop voldemort handling.
(module_state::write_specializations): Drop cluster consistency
check.
gcc/testsuite/
* g++.dg/modules/indirect-2_b.C: Adjust scans.
* g++.dg/modules/inst-[23]_a.C: Likewise.
Remove more unnamed remnants.
gcc/cp/
* module.cc (module_state::write_cluster): Count specializations.
(module_state::{read,write}_unnamed): Rename to ...
(module_state::{read,write}_specializations): ... here. Drop
section numbers. Adjust calls.
(struct module_state_config): Rename num_unnamed to
num_specializations, adjust all uses.
gcc/testsuite/
* g++.dg/modules/tpl-spec-[12345]_[ab].C: Adjust scans.
Remove unnamed ary etc.
gcc/cp/
* module.cc (unnamed_ary, unnamed_map_t, unnamed_map): Delete.
(module_state::read_cluster): Do not insert into unnamed_ary or
map.
(module_state::read_unnamed): Do not extend unnamed_ary.
(module_state::read): Do not set unnamed_lwm.
(module_for_unnamed): Delete.
({init,finish}_module_processing): Do not create/destroy unnamed
ary & map.
gcc/testsuite/
* g++.dg/modules/indirect-[23]_c.C: Adjust scans.
* g++.dg/modules/inst-[124]_b.C: Likewise.
* g++.dg/modules/late-ret-2_c.C: Likewise.
gcc/cp/
* module.cc (module_state::{read,write}_unnamed): Specializations
store entity index.
(lazy_load_specializations): Use the entity index.
No more horcruxes.
gcc/cp/
* module.cc (trees_out::decl_node): Specializations are tt_entity.
(enum cluster_tag): Delete ct_horcrux.
(module_state::write_cluster): No need to create horcruxes.
(module_state::read_cluster): No need to resurrect horcruxes.
gcc/testsuite/
* g++.dg/modules/indirect-[24]_b.C: Adjust scans.
* g++.dg/modules/inst-[123]_[ab].C: Likewise.
* g++.dg/modules/late-ret-2_c.C: Likewise.
* g++.dg/modules/tpl-friend-5_b.C: Likewise.
2019-11-19 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::decl_node): Process unnamed decls directly
here.
(depset::hash::add_dependency): EK_UNNAMED doesn't reference
unnamed (really).
(module_state::write_cluster): Do not preseed horcruxes for
EK_UNNAMED. Add unnamed and specializations into the entity_map.
gcc/testsuite/
* g++.dg/modules/vmort-2_[abc].C: Adjust scans
gcc/cp/
* module.cc (enum tree_tag): Kill tt_anon. No longer emitted.
(import_entity_index): Do not assert imported.
(trees_out::decl_node): Always get the import_entity_index for
tt_entity.
(trees_in::tree_node): Drop tt_anon.
(module_state::write_cluster): Add the EK_DECLs to the entity_map.
gcc/cp/
* cp-tree.h (lazy_load_binding): Drop final parm.
* module.cc (module_state::lazy_load): Drop ns, id & outermost
parms.
(trees_in::tree_node, module_state::read_cluster): Adjust
lazy_load calls.
(module_state::read): Inhibit GC here.
(lazy_load_binding): Deal with binding dumps here.
(lazy_load_specializations): Use lazy_load_binding.
* name-lookup.c: Adjust lazy_load_binding calls.
(get_binding_or_decl): No namespace handling here.
gcc/testsuite/
* g++.dg/modules/tpl-friend-5_b.C: Adjust scans
* g++.dg/modules/vmort-2_c.C: Likewise.
Entities are numbered (part 1)
gcc/cp/
* cp-tree.h (DECL_MODULE_IMPORT_P): New.
* module.cc (depset::entity_kind): Add EK_ENTITIES.
(depset::entity_num): New (temporary) field.
(enum tree_tag): Add tt_entity.
(module_state): Add entity_lwm & entity_num fields.
(module_state::lazy_load): Add index, use it.
(module_state::{read,write}_entities): New.
(module_state::{read,write}_cluster): Number the entities.
(entity_map_t, entity_map, entity_ary) New.
(import_entity_index, import_entity_module): New.
(trees_out::decl_node): Write tt_entity for namespace decls.
(trees_in::tree_node): Add tt_entity handling.
(struct module_state_config): Add num_entities field.
(module_state::{read,write}_config): Stream it.
(module_state::{read,write}: Adjust.
({init,fini}_module_processing): Deal with entity map and ary.
* name-lookup.c (get_binding_or_decl): Mark NAMESPACE unreachable.
gcc/testsuite/
* g++.dg/modules/{builtin,indirect}-1_b.C: Adjust scans.
* g++.dg/modules/indirect-[1234]_c.C: Likewise.
* g++.dg/modules/tpl-friend-5_b.C: Likewise.
* g++.dg/modules/unnamed-1_b.C: Likewise.
2019-11-14 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (check_mergeable_specialization): Take spec_entry arg.
* module.cc (trees_out::decl_node): Allow CONCEPT_DECL.
(trees_out::key_mergeable): Use check_mergeable_specialization).
(specialization_add): Adjust check_mergeable_specialization call.
* pt.c (register_specialization): Remove casts.
(check_mergeable_specialization): Take spec_entry arg.
(match_mergeable_specialization): Add the specialization early.
gcc/testsuite/
* g++.dg/modules/concept-4.H: New.
gcc/cp/
* cp-tree.h (lang_decl_base): Note 8-bits.
* error.c (dump_module_suffix): Bail on no DECL_CONTEXT.
* module.cc (trees_{in,out}::lang_decl_bools): Update for new
fields.
(has_definition): Deal with CONCEPT_DECL.
(trees_out::{mark,write}_definition): Concepts are like vars.
(trees_in::read_definition): Likewise.
({get,set}_originating_module{,_decl}): Deal with CONCEPT_DECL.
* pt.c (finish_concept_definition): Set orginating module.
gcc/testsuite/
* g++.dg/modules/concept-3_[ab].C: New.
Merge trunk r278228.
2019-11-01 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* rtti.c ({push,pop}_abi_namespace): Save and restore module
state.
(build_dynamic_cast_1, tinfo_base_init): Adjust.
gcc/cp/
* module.cc (depset::hash::find_dependencies): Reach unreached
specializations.
2019-10-31 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_state::read_cluster): Hack around cfun.
2019-10-29 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out): Clean up dead code, update instrumentation.
(class_members): New global.
(depset::hash::add_writables): Rename to ...
(depset::hash::add_namespace_entities): ... this.
(depset::hash::add_class_entities): New, incomplete.
(module_state::write): Add class entities.
(set_instantiating_module): Record on the class_member list if
necessary.
gcc/cp/
* module.cc (trees_out::core_vals): Audit VAR_DECL, removing fixme.
2019-10-28 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Stream more block fields.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Stream template info's
typedefs needing access checks.
gcc/cp/
* module.cc (depset): Correct documentation.
(walk_kind_name): Delete unused.
(trees_out::get_container): Lookup for redirect.
gcc/cp/
* module.cc (node_template_info): Type cannot be NULL.
gcc/cp/
* module.cc (trees_out::{fn_parms_ini,tpl_header}): Privatize,
resolving fixme.
(trees_out::core_vals): Resolve TEMPLATE_DECL &
TEMPLATE_PARM_INDEX fixmes.
(trees_out::tpl_parm_value): Resolve template template parm fixme.
Merge trunk r277514.
2019-10-25 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::type_node): Move typedef printing after
variant printing.
(trees_in::tree_node): Simplity tt_typedef_type.
gcc/cp/
* module.cc (trees_out::core_vals): Check if template parm has a
canonical type before processing it.
(trees_in::tpl_parm_value): Likewise.
gcc/cp/
* module.cc (enum tree_tag): Delete tt_typename_decl.
(trees_out::decl_node): Do not handle TYPENAME_TYPE here ...
(trees_out::type_node): ... handle them here instead.
(trees_in::tree_node): Delete tt_typename_decl, handle
TYPENAME_TYPE as a derived_type.
gcc/cp/
* module.cc (trees_out::decl_node): Fixup anonymous case.
Remove mergeable sorting code.
gcc/cp/
* module.cc (depset::hash): Delete for_mergeable,
is_for_mergeable.
(depset::hash::add_mergeable{,_horcrux}): Delete.
(trees_out::get_merge_kind): Remove for_mergeable indirection.
(trees_out::key_mergeable): Likewise.
(depset::hash::add_dependency): Remove mergeable handling.
(depset::hash::find_dependencies): Likewise. Remove #if'd out code.
(sort_mergeables): Delete.
(module_state::write_cluster): Remove #if'd out code.
2019-10-24 Nathan Sidwell <nathan@acm.org>
Turn off mergeable ordering.
gcc/cp/
* module.cc (depset::hash::find_dependencies): No need to add
specialization keys here.
(module_state::erite_cluster): Or sort mergeables here.
gcc/testsuite/
* g++.dg/modules/indirect-[234]_b.C: Adjust scans.
* g++.dg/modules/inst-[23]_a.C: Likewise.
* g++.dg/modules/late-ret-[23_a.H: Likewise.
* g++.dg/modules/tpl-friend-1_a.C: Likewise.
Types always keyed by TYPE_NAME. Use TYPE_NAME not TYPE_STUB_DECL.
gcc/cp/
* module.cc (enum merge_kind): Drop MK_linkage.
(trees_out::core_vals): Fix DECL_TEMPLATE_PARM_P thinko.
TYPE_DECLS for linkage are not regular typedefs.
(trees_{in,out}::add_indirects): Always add a TYPE_DECL's type.
(trees_{in,out}::decl_value): Write the stub_decl if it's
different.
(trees_out::{type,decl}_node): Cleanup some type_decl handling.
(trees_out::get_merge_kind): Drop MK_linkage.
(trees_{in,out}::key_mergeable): Likewise.
(trees_out::{has,write,mark}_definition): Adjust.
(trees_in::read_definition): Likewise.
gcc/testsuite/
* g++.dg/modules/class-3_[bd].C: Adjust scans.
* g++.dg/modules/tdef-6_b..C: Adjust scans.
gcc/cp/
* module.cc (trees_{in,out}::tpl_parm_value): No need to stream
bound ttp's TI here.
(trees_out::get_merge_kind): Refactor anon type determination.
Merge trunk r277416.
2019-10-23 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (enum ct_decl_flags): Add cdf_is_defn.
(module_state::{read,write}_cluster): Don't stream definitions
separately.
gcc/cp/
* module.cc (get_clone_target): Assert more.
(trees_in::back_ref): Check the tree's not insane.
(trees_in::tree_node): Check the clone target is ok.
(module_state::lazy_load): Inhibit GC.
gcc/
* dumpfile.c (dump_begin): Move decls for RAII.
gcc/cp/
* module.cc (trees_{in,out}::tpl_parm_value): Don't stream tpi
here.
(trees_{in,out}::tree_value): Strip now-unreachable code.
gcc/cp/
* module.cc (enum tree_tag): Add tt_tpl_parm.
(trees_{in,out}::tpl_parm_value): New.
(trees_out::add_indirect_tpl_parms): Simpilfy.
(trees_out::tree_value): No template parms here.
(trees_{in,out}::tree_node): Deal with call tpl_parm_value.
gcc/cp/
* pt.c (reduce_template_parm_level): Attach TPI to the type or
decl.
(convert_generic_types_to_packs): Pass new type to
reduce_template_parm_level.
2019-10-22 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_{in,out}::tpl_parms{,_fini}): Drop outer parms,
add tpl_levels.
(trees_{in,out}::tpl_header): Likewise.
(trees_{in,out}::add_indirect_tpl_parms): New.
(trees_{in,out}::add_indirects): Call them.
(trees_{in,out}:decl_value): Adjust tpl_header streaming.
(trees_{in,out}:tree_value): Adjust tpl_header streaming.
(depset::hadh::find_dependencies): Likewise.
(module_name): Don't look for current TU's parent.
2019-10-21 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_in::back_ref): New, broken out of ...
(trees_in::tree_node): ... here. Call it multiple times.
gcc/cp/
* module.cc (trees_{in,out}::add_indirects): New, broken out of ...
(trees_out::decl_node, trees_in::tree_node): ... here. Call them.
(module_state::{read,write}_cluster): Call them instead of
duplicate code.
gcc/testsuite/
* g++.dg/modules/by-name-1.C: Adjust scans.
* g++.dg/modules/class-3_[bd].C: Likewise.
* g++.dg/modules/vmort-2_c.C: Likewise.
gcc/cp/
* module.cc (trees_{in,out}::key_mergeable): Do not stream tpl
header of fn parms here.
(tree_{in,out}::decl_value): Stream them here ...
(depset:hash::find_dependencies): ... and here.
2019-10-18 Nathan Sidwell <nathan@acm.org>
Merge trunk r277167.
gcc/cp/
* module.cc (trees_out::decl_value): Excise template_parm
handling.
(trees_{in,out}::tree_value): Excise non-template-parm
tmpl/type/fn/var handling here.
gcc/cp/
* module.cc (dumper::impl::nested_name): Check template_parm_p
directly.
(trees_out::core_vals): Check DECL_TEMPLATE_PARM_P.
(trees_out::decl_value): Never get a DECL_TEMPLATE_PARM_P.
(trees_in::decl_value): Likewise.
(trees_out::decl_node): Send DECL_TEMPLATE_PARM_P to tree_value.
(trees_out::type_node): Simplify name detection.
(trees_out::tree_value): Allow DECL_TEMPLATE_PARM_P, but no other
tmpls/type/var/fns.
* tree.c (bind_template_template_parm): Set DECL_TEMPLATE_PARM_P.1
gcc/cp/
* module.cc (dumper::impl::nested_name): Detect template parms.
(trees_{in,out}::core_vals): Don't write context of template
parms. Don't clobber template's type.
gcc/cp/
* module.cc (trees_{in,out}::start): Stream code if permitted.
Adjust callers.
2019-10-17 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::tpl_parms): Assert a lot.
(depset::hash::find_dependencies, module_state::write_cluster):
Mark mergeable sort-specific points.
gcc/cp/
* module.cc (trees_out::decl_value): Stream thunks too.
(trees_out::decl_node): Forward all potentially mergeable decls to
decl_value.
(trees_out::tree_value): Make sure we don't get any potentially
mergeable decls.
(trees_{in,out}::tree_value): Stream template parms
via tpl_parms.
(trees_{in,out}::tpl_parms): The vector can be 0 length.
(trees_out::mark_declaration): Don't mark the template parms.
gcc/cp/
* module.cc (trees_{in,out}::tpl_parms): Cope with non-shared
parms.
(trees_{in,out}::tpl_parms_fini): Likewise, stream vec type.
gcc/cp/
* cp-objcp-common.c (cp_pushdecl): Set DECL_CONTEXT.
gcc/testsuite/
* g++.dg/modules/builtin-3_[ab].C: New.
gcc/cp/
* module.cc (trees_{in,out}::decl_value): Refactor some ifs.
2019-10-16 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* decl.c (cp_make_fname_decl): Set context to global namespace,
outside functions.
(builtin_function_1): Merge into ...
(cxx_builtin_function): ... here. Nadger the decl before maybe
copying it. Set the context.
(cxx_builtin_function_ext_scope): Push to top level, then call
cxx_builtin_function.
gcc/cp/
* rtti.c (get_tinfo_desc): Set DECL_CONTEXT.
gcc/testsuite/
* g++.dg/modules/tinfo-1.C: New.
gcc/cp/
* module.cc (enum tree_tag): Add tt_parm.
(trees_out::decl_node): Emit tt_parm for parms.
(trees_in::tree_node): Add tt_parm.
(trees_out::write_function_def): Simply tag constexpr parms &
result.
(trees_in::read_function_def): Clone the originating fn's parms &
result.
(module_state::read): Add GC points, when lazy.
2019-10-15 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::core_vals): Don't assert template
arguments visited.
(trees_{in,out}::tpl_parms): Stream TMPL_DEPTH.
(trees_{in,out}::tpl_parms_fini): New.
(trees_{in,out}::decl_value): Don't stream template parms, use
tpl_parms_fini.
gcc/cp/
* module.cc (trees_out::get_container): New, broken out of ...
(trees_out::key_mergeable): ... here. Add container parm.
(trees_in::key_mergeable): Container is already set.
(trees_{in,out}::decl_value): Stream container here.
(dpset::hash::find_dependencies): Adjust mergeable walk.
gcc/testsuite/
* g++.dg/modules/builtin-1_a.C: Adjust scan.
Merge trunk r277002.
Revert TYPE_LAMBDA_P, it's unnecessary churn.
gcc/cp/
* cp-tree.h (LAMBDA_TYPE_P): Subsume TYPE_LAMBDA_P.
(TYPE_LAMBDA_P): Delete. Update all uses.
gcc/cp/
* module.cc (merge_kind): Add MK_local_friend.
(trees_{in,out}::tpl_parms): New.
(trees_{in,out}::tpl_header): Adjust parm streaming
(trees_{in,out}::key_mergeable): Find containing template.
2019-10-11 Nathan Sidwell <nathan@acm.org>
Merge trunk r276888.
Pull in c++20 concepts.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Don't stream function
parms here.
(trees_out::decl_value): Stream has_defn.
(trees_in::decl_value): Stream has_defn, adjust fn_parms_fini.
(trees_in::tree_value): Likewise.
(trees_{in,out}::fn_parms_init): Stream entire parms.
(trees::fn_parms_fini): Do nothing.
(trees_in::fn_parms_fini): Add has_defn, adjust.
gcc/cp/
* module.cc (enum walk_kind): Remove WK_merge.
(enum trees_out::tags): Remove tag_merging.
(trees_out::mark_merged): Delete.
(trees_out::{insert,ref_node}): Adjust.
(trees_out::decl_value): Insert by value immediately.
gcc/cp/
* optimize.c (maybe_clone_body): Allow aliasing with modules.
gcc/cp/
* module.cc (enum depset::entity_kind): Remove EK_CLONE.
(depset::add_clone): Delete.
(enum merge_kind): Remove MK_clone.
(depset::entity_kind_name): Adjust.
(trees_in::decl_value): No merging for clones.
(trees_out::decl_node): Remove clone dependency.
(trees_out::get_merge_kind): No clone merging.
(trees_{in,out}::key_mergeable): Likewise.
(module_state::write_cluster): Never see a clone.
Reconstruct clones on stream in
gcc/cp/
* module.cc (trees_out::{decl,tree}_value): Write clone info.
(trees_in::{decl,tree}_value): Reconstruct clone.
(trees_out::decl_node): Do not depend on clones.
(module_state::read_cluster): Clone bodies.
2019-10-10 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (DECL_NEEDS_VTT_PARM_P): Delete.
(build_clones): Declare.
(ctor_omit_inherited_parms): Add exact_name default parm.
* class.c (build_clone): Add need_vtt & omit_inherited parms, do
not calculate here.
(build_clones): New function. Add need_vtt &
omit_inherited_parms. Broken out of ...
(clone_function_decl): Call build_clones. Add to method vec here.
* method.c (ctor_omit_inherited_parms): Add exact_name parm.
Detect any ctor or specific base ctor as specified.
2019-10-09 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* class.c (maybe_add_class_template_decl_list): Don't check
template-id-expr friends.
* module.cc (friend_from_decl_list): Don't stray into primary
templates.
(trees_out::{write,mark}_class_def): Adjust local friend
detection.
(trees_in::read_class_def): Likewise.
gcc/cp/
* cp-tree.h (DECL_UNINSTANTIATED_TEMPLATE_FRIEND_P): New.
* module.cc (trees_{in,out}::core_vals): Stream local template
friend's DECL_CHAIN.
(trees_out::decl_node): Use DECL_UNINSTANITATED_TEMPLATE_FRIEND_P.
(trees_out::{read,write,mark}_class_def): Adjust local template
friend streaming.
* pt.c (push_template_decl_real): Set
DECL_UNINSTANTIATED_TEMPLATE_FRIEND_P.
(tsubst_friend_function): Clear D_U_T_F_P.
gcc/cp/
* pt.c (push_template_decl_real): Always set DECL_CHAIN for
non-pushed friends.
2019-10-08 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::decl_value): Check streaming before dump.
(module_name): Protect from not modules.
gcc/cp/
* module.cc (enum merge_kind): Rename non->unique.
(trees_out::key_mergeable): Add decl parm. Return MK_unique for
non-dep decls.
(trees_{out,out}::decl_value): Adjust.
gcc/cp/
* module.cc (struct nodel_decl_hash): New.
(duplicate_hash_map): New.
(trees_in::duplicates): New.
(trees_in::mergeables): Delete.
(trees_in::{,~}trees_in): Adjust.
(trees_in::{find,register,unmatched}_duplicate): New.
(trees_in::{reserve,register,unmcted}_mergeable): Delete.
(enum trees_in::dupness): Delete DUP_unique.
(trees_in::decl_value): Adjust duplicate registration.
(trees_in::get_dupness): Adjust.
(module_state::{read,write}_cluster): Don't stream mergeable count.
gcc/cp/
* module.cc (enum walk_kind): Rename body->value,
mergeable->merge. Delete clone, merging.
(trees_in::decl_value): Drop walk_kind parm, read merge kind
early.
(trees_in::key_mergeable): Add merge_kind parm, return bool.
(trees_out::mark_node): Rename to ...
(trees_out::mark_by_value): ... here.
(trees_out::get_merge_kind): New, broken out of ...
(trees_out::key_mergeable): ... here. Add merge_kind parm.
(trees_out::decl_value): Replace walk_kind parm with depset.
Adjust.
gcc/testsuite/
* g++.dg/modules/scc-1.C: Adjust scan.
* g++.dg/modules/builtin-1_a.C: Adjust scan.
2019-10-07 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (enum trees_out::tags): Delete tag_mergeable,
tag_cloned.
(trees_out::mark_mergeable): Delete.
(trees_out::{insert,ref_node}): Adjust.
(trees_out::decl_node): Look at depset to determine mergeability.
(trees_out::key_mergeable): Adjust.
(trees_in::register_mergeable): Always reserve space.
(module_state::write_cluster): Don't mark mergeable here.
gcc/cp/
* module.cc (trees_in::get_odrness): Check if overrun.
(trees_in::read_class_def): Add overrun protection.
* name-lookup.c (name_search::search_adl): Tweak.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Stream
decl_non_common.result for using decls.
(trees_out::decl_node): USING_DECLS are done by value.
* name-lookup.c (finish_nonmember_using_decl): Set DECL_CONTEXT.
gcc/testsuite/
* g++.dg/modules/using-6_[ab].C: New.
gcc/cp/
* module.cc (enum tree_tag): Add tt_decl.
(trees_{in,out}::decl_value): Broken out of ...
(trees_{in,out}::tree_value): ... here. Deal with non mergeble
cases only.
(trees_in::tree_node): Add tt_decl.
(trees_out::decl_node): Call decl_value.
gcc/cp/
* module.cc (trees_out::decl_node): Refactor some instantiation
discovery.
2019-10-04 Nathan Sidwell <nathan@acm.org>
Merge trunk r276597.
gcc/cp/
* module.c (trees_out:decl_node): More switchification and code
movement.
gcc/cp/
* module.c (trees_out:decl_node): Switchify, and move some checks
before template detection.
gcc/cp/
* module.cc (trees_in::tree_value): Rework merge_kind switching.
(trees_{in,out}::key_mergeable): Likewise.
gcc/cp/
* module.cc (enum merge_kind): Reorder.
2019-10-03 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::decl_node): Merge and reorder tinfo
streaming.
(trees_in::tree_node): Merge tinfo streaming.
gcc/cp/
* module.cc (depset::hash::add_dependency): Separate EK_REDIRECT
handling from EK_MAYBE_SPEC.
(get_instantiating_module_decl): Reorder checks, remove fixme.
gcc/cp/
* module.cc (trees_out::decl_node): Check DECL_LANG_SPECIFIC.
(depset::hash::add_dependency): Likewise.
(get_originating_module_decl): Return global_namespace for null.
(get_originating_module): Correctly handle lack of
DECL_LANG_SPECIFIC.
(set_instantiating_module): Lazily allocate lang specific.
(set_originating_module): Call set_instantiating_module.
* pt.c (build_template_decl, tsubst_template_decl): Check
DECL_LANG_SPECIFIC.
* rtti.c (tinfo_base_init): Likewise.
gcc/cp/
* module.cc (elf_in::{defrost,begin}): Advise random seeking.
gcc/cp/
* module.cc (depset::hash::add_dependency): Drop is_import arg,
update callers. Calculate it here.
gcc/cp/
* cp-tree.h (MODULE_SLOT_*): Move to ...
* name-lookup.c (MODULE_SLOT_*): ... here.
* module.cc (depset::hash::add_dependency): More asserts.
* pt.c (build_template_decl, tsubst_template_decl): Always
propagate from result.
2019-10-02 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::tree_ctx): Delete, forward all callers to
tree_node.
(trees_out::tree_namespace): Delete, move into tree_decl.
(trees_out::tree_decl): Rename to ...
(trees_out::decl_node): ... this. Update caller.
gcc/cp/
* module.cc (trees_out::tree_type): Rename to ...
(trees_out::type_node): Drop walk_kind arg, return void. Update
callers.
gcc/cp/
* module.cc (trees_out::tree_ctx): Drop need_contents parm.
Update callers.
(trees_out::tree_{type,decl}: Likewise.
gcc/cp/
* module.cc (trees_out::tree_ctx): Drop inner_decl parm. Update
callers.
(trees_out::tree_namespace): Likewise.
gcc/cp/
* cp-tree.h (MK_*): Document better.
gcc/cp/
* cp-tree.h (MODULE_CURRENT, MODULE_IMPORT_BASE): Delete.
* module.cc: Replace with zero/one
* name-lookup.c: Likewise.
* decl2.c (no_linkage_error): Likewise.
* ptree.c (cxx_print_decl): Likewise.
Don't equivocate GMF with module
gcc/cp/
* cp-tree.h (MODULE_NONE, MODULE_PURVIEW): Delete.
(MODULE_CURRENT): New.
(MODULE_IMPORT_BASE): Reduce.
(DECL_MODULE_OWNER): Rename to ...
(DECL_MODULE_ORIGIN): ... this.
(DECL_MODULE_PURVIEW_P): New.
(MODULE_BITS): Reduce.
(lang_decl_base::module_purview_p): New bit.
(module_may_redeclare): Take decl.
* module.cc (MODULE_UNKNOWN_PARTITION): New.
(MODULE_LIMIT): Adjust.
(slurping::remap_module): Return int.
(trees_in::assert_definition): Adjust.
(dumper::impl::nested_name): Adjust.
(trees_{in,out}::lang_decl_bits): Stream module_purview_p.
(trees_out::tree_{namespace,decl,value}): Adjust.
(trees_in::tree_node): Adjust.
(depset::hash::add_{dependency,binding,specializations}): Adjust.
(module_state::check_not_purview): Adjust.
(module_state::read_{imports,partitions}): Adjust.
(module_state::write_{cluster,namespaces,unnamed}): Adjust.
(module_state::read_unnamed): Adjust.
(module_state::{write,read}): Adjust.
(module_visible_instantiation_path): Adjust.
(get_originating_module): Return int.
(get_instantiating_module): Adjust.
(module_may_redeclare): Reimplement.
(set_{instantating,originating}_module): Adjust.
(module_state::{do,direct}_import): Adjust.
(declare_module, module_preprocess, process_deferred_imports): Adjust.
({init,finish}_module_processing): Adjust.
* name-lookup.c (get_fixed_binding_slot): Adjust.
(name_lookup::{search_namespace_only,adl_namespace_fns,search_adl):
Adjust.
(check_module_override, extract_module_binding): Adjust.
(note_pending_specializations): Adjust.
(get_imported_namespaxe, finish_nonmember_using_decl)
(lookup_type_scope_1): Adjust.
(add_imported_namespace): Take int.
* name-lookup.h ({add,get}_imported_namespace): Module is int.
* class.c (build_self_ref): Set instantiating module.
* decl.c (duplicate_decls): Adjust.
* decl2.c (no_linkage_error): Adjust.
* mangle.c (maybe_write_module): Adjust.
* pt.c (build_template_decl): Propagate purview flag.
(tsubst_template_decl): Likewise.
(tsubst_decl): Set instantiating_module as necessary.
* ptree.c (cxx_print_decl): Adjust, print purview flag.
* rtti.c (tinfo_base_init): Clear purview flag.
gcc/testsuite/
* g++.dg/modules/*: Update lang dump scans.
2019-10-01 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (set_originating_module): Add friend_p.
* decl.c (grokdeclarator): Set it.
* module.cc (get_originating_module): Always look through template
info.
(set_originating_module): Add friend_p. Assert.
(set_instantiating_module): Assert.
2019-09-30 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (set_module_owner): Delete.
* decl.c (duplicate_decls): Propagate module owner. Set module
export for builtins, no need to set owner.
* module.cc (set_module_owner): Delete.
gcc/testsuite/
* g++.dg/modules/isalnum.H: New.
2019-09-27 Nathan Sidwell <nathan@acm.org>
Merge trunk r276201.
gcc/cp/
* decl.c (fixup_anonymous_aggr): Partially revert recent change.
(grokfndecl): Call set_originating_module before determining
specialization.
(grokdeclarator): Likewise.
gcc/cp/
* cp-tree.h (set_{originating,instantiating}_module): Declare.
* class.c (layout_class_type): Use set_instantiating_module.
* pt.c (lookup_template_class_1): Likewise.
(tsubst_function_decl, instantiate_template_1): Likewise.
(tsubst_friend): Not here.
* decl.c (grokfndecl): Use set_originating_module.
(grokvardecl,grokdeclarator): Likewise.
* name-lookup.c (do_pushtag): Likewise.
* friend.c (do_friend): Not here.
* module.cc (set_implicit_module_origin): Rename to ...
(set_instantiating_module): ... here.
(set_originating_module): New.
gcc/testsuite/
* g++.dg/modules/friend-3.C: New.
* g++.dg/modules/friend-4_[ab].C: New.
gcc/cp/
* cp-tree.h (get_module_owner): Delete.
(get_instantiating_module_decl, get_instantiating_module): Declare.
* module.cc (get_instantiating_module_decl)
(get_instantiating_module): New.
(dumper::impl::nested_name, trees_out::tree_node)
(trees_out::tree_decl, depset::hash::add_specializations)
(set_module_owner): Use them.
(get_module_owner): Delete.
gcc/cp/
* cp-tree.h (get_declared_module_origin): Delete.
(get_originating_module, get_originating_module_decl): Declare.
* module.cc (get_originating_module_decl): New.
(get_originating_module): New.
(module_state::write_cluster, module_visible_instantiation_path): Use
get_originating_module.
* module.cc (module_state::write_unnamed)
(lazy_load_specializations): Use get_originating_module_decl.
* error.c (dump_module_suffix): Use get_originating_module.
* mangle.c (maybe_write_module): Likewise.
* name-lookup.c (init_global_partition): Use
get_originating_module.
(name_lookup::search_adl): Use get_originating_module_decl.
* pt.c (lookup_template_class_1): Propagate DECL_MODULE_EXPORT_P.
2019-09-26 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (DECL_MODULE_OWNER): Restrict to
var/fn/type/template/namespace.
(MAYBE_DECL_MODULE_EXPORT_P): Delete.
({set,get}_{declared,implicit}_module_origin): Declare.
(module_name): Delete and adjust.
* modules.cc: Adjust throughout for loss of
MAYBE_DECL_MODULE_EXPORT_P. Use get_module_owner more.
(fixup_unscoped_enum_owner): Delete.
* class.c (layout_class_type): Use set_implicit_module_origin.
* decl.c (duplicate_decls): Use get_module_owner.
(finish_enum_value_list): Set DECL_MODULE_EXPORT_P directly.
* decl2.c (no_linkage_error): Use DECL_MODULE_OWNER.
* error.c (dump_module_suffix): Reimplement.
* mangle.c (maybe_write_module): Adjust.
* name-lookup.c (init_global_partition): Adjust.
(name_lookup::search_adl): Owner always has module.
(do_pushdecl): Adjust namespace exporting.
(do_nonmember_using_decl): Adjust exporting check.
* pt.c (build_template_decl): Only propagate module info when
needed.
(lookup_template_class_1): Use set_implicit_module_origin.
(tsubst_friend_function): Propagate to outer template.
(tsubst_function_decl): Use set_implicit_module_origin.
(tsubst_template_decl): Simplify tsubst if cascade. Propagate
inner module info.
(instantiate_template_1): Use set_module_owner.
* ptree.c (cxx_print_decl): Protect module info display.
gcc/testsuite/
* g++.dg/modules/friend-1_a.C: Adjust scans.
* g++.dg/modules/indirect-[13]_[bc].C: Likewise.
* g++.dg/modules/indirect-4_b.C: Likewise.
* g++.dg/modules/late-ret-3_a.H: Likewise.
* g++.dg/modules/scc-1.C: Likewise.
* g++.dg/modules/vmort-2_[abc].C: Likewise.
2019-09-25 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* modules.cc (enum merge_kind): Rearrange.
(merge_kind_name): Adjust.
gcc/testsuite/
* g++.dg/modules/inst_-[234]-[ab].C: Adjust scans.
* g++.dg/modules/indirect-[234]_b.C: Likewise.
2019-09-24 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* modules.cc (trees_out::tree_decl): RESULT and LABEL decls
written by value. Assert only expected things remain by name.
gcc/cp/
* modules.cc (enum tree_tag): Add tt_data_member.
(trees_out::tree_decl): Use it for consts and fields.
(trees_in::tree_node): Read it.
(set_implicit_module_owner): Delete.
* name-lookup.c (get_field_ident, lookup_field_ident): New.
* name-lookup.h (get_field_ident, lookup_field_ident): Declare.
* cp-tree.h (set_implicit_module_owner): Delete.
gcc/testsuite/
* g++.dg/modules/class-3_[bd].C: Adjust scans.
* g++.dg/modules/indirect-1_c.C: Likewise.
2019-09-23 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset): Add DB_BOTH_SPEC_BIT.
(specialization_add): Accept template aliases for !decl_p.
(depset::hash::add_specializations): Notice duplicate
specialization paths.
2019-09-20 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* decl.c (fixup_anonymous_aggr): Clear LAZY flags, no need to
strip out fns.
* module.cc (module_state::lazy_load): Distinguish out of order
from failure to set slot.
* name-lookup.c (get_binding_or_decl): Fixme :(
gcc/testsuite/
* g++.dg/modules/anon-2{,_[ab]}.[hHC]: New.
2019-09-19 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (enum merge_kind): Add MK_{decl,type}_tmpl_spec,
MK_type_partual_spec.
(tree_in::tree_value): Process them.
(trees_{in,out}::key_mergeable): Stream them.
* pt.c (match_mergeable_specialization): Only store if spec !=
NULL.
gcc/testsuite/
* g++.dg/modules/tpl-tpl-merge-[12]{,_[ab].[hHC]: New.
gcc/cp/
* module.cc (slurping::slurping): Init current to mostpos - 1.
(module_state::read): Increment slurp->current when done.
gcc/cp/
* module.cc (trees_in::tree_node): Check overrun more.
2019-09-18 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_in::is_matching_decl): Copy
DECL_TEMPLATE_INSTANTIATED.
gcc/testsuite/
* g++.dg/modules/inst-5_[ab].[CH]: New.
gcc/cp/
* module.cc (trees_in::mergeables): Vec of intptr_t.
(trees_in::register_mergeable): Return index.
(trees_in::unmatched_mergeable): New.
(trees_in::get_dupness): Drop last parm. Return DUP_bad as
necessary. Adjust callers.
(trees_in::tree_value): Call unmatched_mergeable as necessary.
gcc/cp/
* module.cc (trees_in): Delete skip_defns & handling. Add
any_deduping field.
(trees_in::register_mergeable): Outline.
(trees_in::{enum dupness,get_dupness}): New.
(trees_in::{enum odrness,get_odrness}): New.
(trees_in::lookup_mergeable): Delete.
(trees_in::is_existing_mergeable): Delete, use get_dupness.
(trees_in::is_skippable_defn): Delete, ise get_odrness.
(trees_in::assert_definition): Adjust.
(trees_in::read_{function,class,var,enum}_def): Adjust.
(topmost_decl): Delete.
gcc/testsuite/
* g++.dg/modules/part-3_c.C: Adjust scans.
* g++.dg/modules/tdef-6_b.C: Adjust scans.
2019-09-17 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_in::is_skippable_defns): Defns always complete
incomplete.
gcc/testsuite/
* g++.dg/modules/merge-3_[ab].[CH]: New.
2019-09-16 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset::DB_TYPE_SPEC_BIT): New.
(depset::is_type_spec): New.
(enum merge_kind): Replace MK_spec with MK_decl_spec, MK_type_spec.
(merge_kind_name): Update.
(trees_in::tree_value): Partition MK_spec handling.
(trees_{in,out}::key_mergeable): Likewise.
(depset::hash::add_specialization): Set DB_TYPE_SPEC_BIT.
gcc/testsuite/
* g++.dg/modules/indirect-[234]_b.C: Update lang dump scans.
* g++.dg/modules/inst-[234]_[ab].C: Update lang dump scans.
gcc/cp/
* module.cc (spec_tuple): Delete type.
(specialization_add): Adjust data type.
(depset::hash::add_specializations): Drop PARTITIONS parm. Adjust.
(module_state::write): Adjust.
gcc/cp/
* cp-tree.h (check_mergeable_specialization): Declare.
(match_mergeable_specialization): Add DECL_P parm, drop INSERT_P parm.
* module.cc (trees_in::tree_value): Adjust
match_mergeable_spcialization calls.
(specialization_add): Use check_mergeable_specializatio.
* pt.c (check_mergeable_specialization): New.
(match_mergeable_specialization): Always insert, reorder parms.
gcc/cp/
* module.cc (enum merge_kind): Add MK_linkage.
(merge_kind_name): ... and here.
(trees_in::tree_value): Add it.
(trees_{in,out}::key_mergeable): Use it.
* name-lookup.c (match_mergeable_decl): Don't add anon-enum.
gcc/testsuite/
* g++.dg/modules/builtin-1_a.C: Adjust scan.
* g++.dg/modules/indirect-[234]_b.C: Likewise.
* g++.dg/modules/inst-[23]_a.C: Likewise.
* g++.dg/modules/tdef-6_[ab].[HC]: New.
2019-09-15 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_in::chained_decls): No need to deal with clones here.
(trees_{in::read,out::write}_class_def): Don't chain
fields until we know we're the definition.
Merge trunk r275727.
2019-09-13 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (get_namespace_binding): Fish out global binding,
if it's a vector.
gcc/testsuite/
* g++.dg/modules/binding-2.H: New.
gcc/cp/
* cp-tree.h (MODULE_VECTOR_LAZY_SPEC_P): Use TREE_THIS_VOLATILE.
gcc/testsuite/
* g++.dg/modules/binding-1_[abc].[HC]: New.
2019-09-12 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.def (UNBOUND_CLASS_TEMPLATE): Correct docs.
* cp-tree.h (make_unbound_class_template_raw): Declare.
* decl.c (make_unbound_class_template_raw): New, break out of ...
(make_unbound_class_template): ... this, call it.
* module.cc (trees_out::tree_type): Handle UNBOUND_CLASS_TEMPLATE.
(trees_in::tree_node): Likewise.
gcc/testsuite/
* g++.dg/modules/tpl-tpl-parm-1_[ab].[HC]: New.
gcc/cp/
* module.cc (trees_out::core_vals): Never write template_decl's
type ...
(trees_in::tree_value): .. resurrect it here instead.
gcc/cp/
* module.cc: Sort many switch stmts.
2019-09-11 Nathan Sidwell <nathan@acm.org>
Merge trunk r275641.
2019-09-09 Nathan Sidwell <nathan@acm.org>
Merge trunk r275518
gcc/cp/
* module.cc (enum depset::disc_bits): Delete DB_REACHED_ONCE_BIT.
(depset::is_reached_once, depset::clear_mergeable): Delete
(trees_in::tree_value): Set template typedef type.
(depset::hash::add_dependency): No reached once stuff.
(sort_mergeables): Just live with tight clusters.
gcc/testsuite/
* g++.dg/modules/late-ret-2_a.H: Adjust scans.
* g++.dg/modules/late-ret-3_[abc].[CH]: New.
2019-09-06 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (enum depset::disc_bits): Add DB_REACHED_ONCE_BIT.
(depset::is_reached_once, depset::clear_mergeable): New.
(depset::hash::add_dependency): Set and clear DB_REACHED_ONCE_BIT.
(sort_mergeables): Deal with internal entities.
(module_state::read_cluster): A voldemort might have been merged.
gcc/testsuite/
* g++.dg/modules/late-ret-2_[abc].[HC]: New.
Merge trunk r275458.
2019-09-05 Nathan Sidwell <nathan@acm.org>
gcc/testsuite/
* g++.dg/modules/concept-2_[ab].C: New.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Stream constraint_info.
(trees_{in,out}::tree_value): Stream constrain node.
{trees_{in,out}::tpl_header): Stream parm(s) constraints.
* pt.c (set_constraints): Don't do spurious lookup.
gcc/testsuite/
* g++.dg/modules/concept-1_[ab].C: New.
gcc/cp/
* module.cc (module_state::write_location): Check streaming here.
Adjust many callers.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Move some node handling
into the new switch.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Reorder part 7.
* decl.c (cp_tree_node_structure): Alphabetize.
gcc/
* tree.c (tree_node_structure_for_code): Likewise.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Reorder part 6.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Reorder part 5.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Reorder part 4.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Reorder part 3.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Reorder part 2.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Reorder part 1.
gcc/cp/
* module.cc (trees_out::tree_type): There are no indescribable types.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Redo enum underlying type
streaming.
Merge trunk r275404.
2019-08-30 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::tree_type): Stream ptrmemfuncs at the
appropriate point.
gcc/cp/
* module.cc (trees_in::finish{,_type}): Delete. Move into
trees_in::tree_value, removing type remapping etc,
(trees_out::start): Check not streaming an unexpected type.
(trees_{in,out}::core_vals): Pointers are not streamed.
(trees_in::tree_value): Move remnants of finish{,_type} here &
simplify handling.
gcc/cp/
* module.cc (trees_out::tree_type): Write non-standard integer
types here.
(trees_in::tree_node): Read them here.
(trees_out::tree_value): We never see a naked type.
gcc/testsuite/
* g++.dg/modules/bfield-2_[ab].C: New.
gcc/cp/
* module.cc (trees_{in,out}::start): Refactor switch.
(trees_{in,out}::core_vals): Remove first switch.
gcc/cp/
* module.cc (enum streamed_extensions): New.
(module_state::extensions): New.
(module_state::write_readme): Adjust.
(trees_{in,out}::start): Note or check openmp extension.
(module_state::{read,write}_config): Adjust.
gcc/testsuite/
* g++.dg/modules/omp-1_c.C: New.
* g++.dg/modules/omp-2_[ab].C: New.
gcc/cp/
* module.cc (trees_{in,out}::start): Deal with OMP_CLAUSE.
(trees_{in,out}::core_vals): Likewise.
gcc/testsuite/
* g++.dg/modules/omp-1_[ab].C: New.
gcc/cp/
* module.cc (friend_from_decl_list): Reimplement.
(trees_out::tree_decl): When streaming a local template friend
reference, make sure we find one.
gcc/cp/
* module.cc (enum tree_tag): Drop tt_mergeable, tt_clone.
(trees_out::tree_value): Emit tt_node & kind separately.
(trees_in::tree_node): Read tt_node kind explicitly.
2019-08-29 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::tree_decl): VTTs are just vtables.
gcc/testsuite/
* g++.dg/modules/vtt-1_[abc].C: New.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): We never see
TS_CP_ARGUMENT_PACK_SELECT nodes.
Merge trunk r275034.
2019-08-28 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (struct location_map_info): New.
(module_state::prepare_locations): Rename to ...
(module_state::prepare_maps): ... here. Return a
location_map_info.
(module_state::{read,write}_locations): Split to ...
(module_state::{read,write}_{ordinary,macro}_maps): ... here. Adjust.
(module_state::{read,write}): Split location map streaming.
gcc/testsuite/
* g++.dg/modules/macro-7_[abc].C: New.
Merge trunk r274992.
2019-08-27 Nathan Sidwell <nathan@acm.org>
gcc/c-family/
* c.opt (fnote-include-translate): Renamed from finclude-translate.
gcc/
* doc/invok.texi: Update.
gcc/cp/
* module.cc (module_translate_include): Tweak.
2019-08-26 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (note_includes): Renamed from inform_includes.
(module_translate_include): Emit note, not warning.
(init_module_processing, handle_module_option): Adjust.
gcc/c-family
* c.opt (finclude-translate): Renamed from -Winclude-translate.
gcc/
* doc/invoke.texi (finclude-translate): Document.
2019-08-25 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_in::finish): Don't clear PENDING_TEMPLATE here.
Set IDENTIFIER_VIRTUAL_P if t is a vfunc.
(trees_out::core_bools): Write PENDING_TEMPLATE as false.
gcc/testsuite/
* g++.dg/modules/virt-1_[ab].C: New.
gcc/cp/
* module.cc (trees_out::tree_decl): Vtables are distinguished by
DECL_VIRTUAL_P.
2019-08-23 Nathan Sidwell <nathan@acm.org>
Merge trunk r274867.
gcc/cp/
* module.cc (trees_out::core_bools): Don't propagate asm_written
for types.
(trees_{in,out}::lang_type_bools): Don't stream debug_requested.
(trees_in::read_{enum,class}_def): Register for debug.
(finish_module_processing): Don't write module when syntax only.
gcc/testsuite/
* g++.dg/modules/debug-1_[ab].C: New.
2019-08-22 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset::hash::add_dependency): We should never find a
redirect.
(depset::hash::add_redirect): Rename to ...
(depset::hash::add_partial_redirect): ... here. Mark the redirect
as unreachable.
gcc/cp/
* module.cc (MOD_SNAME_PFX): Resurrect initial dot.
(elf_out::strtab_write): Elide global namespace.
2019-08-21 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_in::assert_definition): Relax already-present
assert.
gcc/cp/
* module.cc (finish_module_processing): Protect against null
filename.
gcc/cp/
* module.cc (elf_in::release): Reset size too.
(enum ct_bind_flags): Correct cbf_wrapped value.
(module_state::read_cluster): Usings may be unwrapped.
gcc/c-family/
* c.opt (Winclude-translate*): New family of options.
gcc/cp/
* module.cc (inform_includes): New var.
(module_translate_include): Inform of translations.
(init_module_processing): Canonicalize inform list.
(handle_module_option): Process inform options.
gcc/cp/
* module.cc (set_cmi_repo): NULL means default init.
(module_mapper::module_mapper): Default init repo.
(module_mapper::translate_include): Add LEN parm, create STRING.
(canonicalize_header_name): Correctly prepend './'.
gcc/testsuite/
* g++.dg/modules/ben-1.map: Add $root.
* g++.dg/modules/gc-2.map: Add $root.
* g++.dg/modules/map-1.map: Add $root.
* g++.dg/modules/map-1_b.map: Add $root.
2019-08-20 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_state::module_state): Header must be
.-relative if not absolute.
(get_module): Validate module name more.
gcc/testsuite/
* g++.dg/modules/map-2.{C,map}: New.
Merge trunk r274747.
Merge trunk r273943 (Jason's TEMPLATE_INFO changes).
Merge trunk r273906 (Martin's function_decl.decl_type changes).
2019-08-19 Nathan Sidwell <nathan@acm.org>
Merge trunk r273771.
2019-08-04 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (get_cxx_dialect_name): Make extern.
* name-lookup.h (get_cxx_dialect_name): Declare.
* module.cc (module_state_config::get_opts): Just determine C++
dialect.
gcc/testsuite/
* g++.dg/modules/flag-1_[ab].C: Adjust.
2019-08-01 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_state::deferred_macro): Emit warning if at end
of TU.
(finish_module_processing): Adjust.
gcc/
* doc/invoke.texi (fforce-module-macros): Replace documentation
with ...
(Winvalid-imported-macros): ... this.
gcc/c-family/
* c.opt (fforce-module-macros): Replace with ...
(Winvalid-imported-macros): ... this.
gcc/testsuite/
* g++.dg/modules/macro-4_[abcdeg].C: Update.
* g++.dg/modules/macro-5_c.C: Update.
2019-07-28 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (node_template_info): Enums may be function-local.
gcc/testsuite/
* g++.dg/modules/enum-7.C: New.
2019-07-27 Nathan Sidwell <nathan@acm.org>
gcc/
* doc/invoke.texi (C++ Modules): Update.
2019-07-24 Nathan Sidwell <nathan@acm.org>
Default to gcm.cache directory.
gcc/cp/
* cxx-mapper.c (flag_root): Change default.
(module2bmi): Headers have same suffix.
(client::action): Prefix root dir to look for bmi.
gcc/
* doc/invoke.texi (C++ Module Mapper): Update docs.
gcc/testsuite/
* g++.dg/modules/dep-1_[ab].C: Update scans.
* g++.dg/modules/dep-2.C: Update scans.
* g++.dg/modules/modules.exp (DEFAULT_REPO): New.
(dg-module-cmi): Adjust.
Drop import alias detection, via controlling macros.
gcc/cp/
* module.cc (bytes_in::no_more): Delete.
(module_state::{read,write}_config): Drop controlling macro.
(module_state::write_readme): Likewise.
(module_state::read): Drop alias return.
(module_state::slurp): Delete. Replace all uses with field
access.
(module_state::resolve_alias): Delete.
(module_state::is_alias): Delete.
(module_state::read_imports): Drop alias detection.
gcc/testsuite/
* g++.dg/modules/alias-[12]_b.C: Drop controlling macro scans.
* g++.dg/modules/macro-2_c.H: Likewise.
* g++.dg/modules/macro-3_[abc].[CH]: Likewise.
* g++.dg/modules/stdio-1_a.H: Likewise.
* g++.dg/modules/alias-3_*: Delete.
* g++.dg/modules/sys/alias-3_a.H: Delete.
Merge trunk r273764.
gcc/testsuite/
* g++.dg/modules/alias-2_a.H: Add dg-module-header.
* g++.dg/modules/alias-3_a.H: Likewise.
* g++.dg/modules/mod-decl-0-2a.C: std=c++2a.
* g++.dg/modules/mod-decl-0.C: std=c++17.
* g++.dg/modules/modules.exp: Add dg-module-header, iterate over
different c++ stds.
gcc/cp/
* module.cc (trees_out::tree_decl): Cope with using decls in the
binding list.
gcc/testsuite/
* g++.dg/modules/enum-6_[ab].[HC]: New.
gcc/cp/
* module.cc (enum merge_kind): Add MK_enum.
(trees_out::tree_decl): Deal with anon enums.
(trees_in::tree_value): Adjust for MK_enum.
(trees_{in,out}::tree_node): Adjust tt_enum_int streaming.
(trees_{in,out}::key_mergeable): Add MK_enum key.
(depset::hash::add_dependency): Enum values are like using decls.
(depset::hash::add_binding): Likewise.
(depset_cmp): Reorder for new requirements.
(enum ct_bind_flags): Add cbf_wrapped.
(sort_mergeables): Presume sorted by depset_cmp.
(module_state::{read,write}_cluster): Adjust.
* name-lookup.c (check_mergeable_decl): Deal with anon-enum
proxies.
gcc/testsuite/
* g++.dg/modules/enum-1_a.C: Adjust scan.
2019-07-23 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset): Rename MARKED to SPECIAL, update all users.
2019-07-22 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* parser.c (cp_parser_class_specifier_1): Fixup a template's type
with a late exception specifier.
gcc/testsuite/
* g++.dg/modules/except-1.C: New.
2019-07-22 Boris Kolpackov <boris@codesynthesis.com>
gcc/cp/
* Make-lang.in (MODULE_REVISION): Add git rev, if it's git.
2019-07-16 Nathan Sidwell <nathan@acm.org>r
gcc/cp/
* module.cc (module_state::read_{bindings,namespaces}): Use plain
vec
(module_state::read): Adjust.
(module_state::write_macros): Use plain vec.
(module_state::deferred_macro): Use plain vec.
gcc/cp/
* module.cc (depset::hash::add_writables): Use plain vec.
(typedef spec_tuple): Use plain vec.
(depset::hash::add_speciailizations): Correctly init vec.
(module_state::{read,write}_namespaces): Use plain vec.
(module_state::{read,write}): Adjust.
Fix it better.
gcc/cp/
* mangle.c (mangle_module_substitution): Offset overflow.
gcc/testsuite/
* g++.dg/modules/sym-subst-3_[ab].C: Fix
* g++.dg/modules/sym-subst-[456].C: New.
Fix module backref subst.
gcc/cp/
* cp-tree.h (mangle_substitution): Rename to ...
(mangle_module_substitution): ... here. Drop genecity.
* mangle.c: Likewise. Fix mangling.
* module.cc (module_state::mangle): Adjust.
gcc/testsuite/
* g++.dg/modules/sym-subst-1.C: Adjust scan.
* g++.dg/modules/sym-subst-2_[ab].C: Adjust scan.
* g++.dg/modules/sym-subst-3_[ab].C: New.
2019-07-09 Nathan Sidwell <nathan@acm.org>
gcc/c-family/
* c-opts.c (c_common_handle_option): Remove {user,system}_search.
* c.opt ({user,system}-search): Delete.
(fmodule-header): Undeprecate.
gcc/cp/
* module.cc (module_state_config::get_opts): Drop
OPT_fmodule_header_.
(handle_module_option): Handle fmodule-header=.
gcc/
* gcc.c (cpp_unique_options): Drop {user,system}-search.
2019-07-08 Nathan Sidwell <nathan@acm.org>
gcc/c-family/
* c-common.c (try_to_locate_new_include): Use strcmp and ignore
zero-line maps.
gcc/cp/
* module.cc (finish_module_processing): Inhibit module stats if
not moduling.
2019-07-07 Nathan Sidwell <nathan@acm.org>
Merge trunk r273185.
libcpp/
* files.c (cpp_find_failed): Replace with ...
(cpp_found_name): ... this.
(_cpp_stack_file): Check main_search option.
* include/cpplib.h (cpp_options): Add main_search.
* internal.h (cpp_find_failed): Replace with ...
(cpp_found_name): ... this.
* init.c (cpp_read_main_file): Examine main_search option.
gcc/c-family/
* c-opts.c (c_common_handle_options): Add OPT_{user,system}_search.
* c.opt (user-search, system-search): New.
gcc/
* gcc.c (cpp_unique_options): Add {user,system}-search.
gcc/
* module.cc (module_state::write_cluster): Return cluster size.
(avalable_clusters, loaded_clusters): New static vars.
(module_state::{read,write}): Adjust.
(finish_module_processing): Dump more stats.
gcc/testsuite/
* g++.dg/module/part-3_c.C: Adjust scan.
gcc/
* timevar.def (TV_MODULE_{IMPORT,EXPORT,MAPPER}): Define.
gcc/cp/
* module.cc: Include timvar.h. Sprinkle timevar accounting throughout.
2019-07-05 Nathan Sidwell <nathan@acm.org>
Merge trunk r273146.
Victory!
gcc/cp/
* decl2.c (c_parse_final_cleanups): Don't do static init things
for a header module.
* module.cc (trees_in::start): Drop unused second parm.
(module_state::{read,write}_inits): New.
(trees_out::core_bools): Restrict static->extern hack.
(module_state::{read,write}_config): Note inits.
(module_state::{read,write}): Stream inits.
gcc/testsuite/
* g++.dg/modules/iostream-1_b.C: Remove ioinit workaround.
gcc/testsuite/
* g++.dg/modules/iostream-1_[ab].[HC]: New.
gcc/cp/
* module.cc (module_state_config::get_opts): Drop -g* switches.
gcc/cp/
* cp-tree.h (get_tinfo_decl_direct): Declare.
* module.cc (trees_out::tree_decl): Stream more tinfo_var info.
(trees_in::tree_value): Use get_tinfo_decl_direct for tinfo vars.
* rtti.c (get_tinfo_decl_direct): Break out of ...
(get_tinfo_decl): ... here. Call it.
2019-07-04 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_state::read_cluster): finalize_function may
not GC.
gcc/cp/
* module.cc (enum cluster_tag): Add ct_defn.
(enum ct_decl_flags): Rmove cdf_has_definition.
(module_state::{read,write}_cluster): Stream definitions after
declarations..
gcc/cp/
* module.cc (trees_{in,out}::key_mergeable): Always stream context.
gcc/testsuite/
* g++.dg/modules/merge-1_[ab].[HC]: New.
gcc/cp/
* module.cc (trees_out::key_mergeable): Return merge kind.
(trees_out::tree_value): Note key writing.
(trees_in::tree_value): Adjust key dump.
gcc/testsuite/
` * g++.dg/modules/builtin-1_b.C: Adjust scans.
* g++.dg/modules/inst-[1234]_b.C: Likewise.
* g++.dg/modules/part-3_[cd].C: Likewise.
2019-07-03 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::tree_type): Add TYPEOF_TYPE, UNDERLYING_TYPE.
(trees_in::tree_node): Likewise.
gcc/cp/
* module.cc (struct unnamed_entity): GTY it.
(unnamed_map): Not a GTY object.
gcc/cp/
* module.cc (trees_{in,out}::fn_parms): Rename to ...
(trees_{in,out}::fn_arg_types): ... this.
(trees_{in,out}::fn_parms_{init,fini}): New.
(trees_{in,out}::tree_value): Call fn_parms_fini.
(trees_{in,out}::key_mergeable): Call fn_parms_init.
gcc/testsuite/
* g++.dg/modules/late-ret-1.H: New.
* g++.dg/modules/scc-1.C: Adjust scan.
gcc/cp/
* module.cc (trees_out::tree_type): Add DECLTYPE_TYPE.
(trees_in::tree_node): Likewise.
2019-07-02 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_in::core_vals): Protect binfo base reading.
(module_state::{read,write}_cluster): Insert types for horcrucifexes.
gcc/testsuite/
* g++.dg/modules/horcrux-1_[ab].C: New.
gcc/testsuite/
Rename bmi->cmi everywhere.
gcc/cp/
* cp-tree.h (module_has_cmi_p): Renamed.
* name-lookup.c (do_nonmember_using_decl): Adjust.
* module.cc (cmi_*): Renamed. Adjust all users.
gcc/cp/
* module.cc (trees_out::fn_parms): Don't use canonical type any
more.
gcc/testsuite/
* g++.dg/modules/merge-1_[ab].C: New.
gcc/cp/
* module.cc (trees_out::tree_decl): Write types for typedefs.
(trees_in::tree_node): Adjust.
gcc/testsuite/
* g++.dg/modules/tdef-5_[ab].C: New.
gcc/cp/
* module.cc (trees_out::tree_type): Add pack types.
(trees_{in,out}::tree_value): Tweak type streaming flags
(trees_in::tree_node): Add pack types.
gcc/cp/
* module.cc (trees_out::tree_type): Detect bound template template
parm.
(trees_{in,out}::tree_value): Stream type on any TYPE_DECL that
its TYPE_STUB_DECL.
gcc/cp/
* module.cc (trees_out::tree_type): Add COMPLEX and VECTOR types.
(trees_in::tree_node): ... and here.
gcc/cp/
* module.cc (trees_out::tree_decl): Deal with tinfo vars and
vtables here ...
(trees_out::tree_node): ... not here.
gcc/cp/
* module.cc (trees_out::tree_decl): Deal with tinfo type_decls
here.
(trees_out::tree_type): Dectect tinfo types here ...
(trees_out::tree_node): ... not here.
(trees_in::tree_node): Add tinfo type too.
2019-07-01 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::tree_decl): Fix dump typo.
(trees_in::tree_value): Likewise.
(module_state::read_cluster): Show end.
gcc/cp/
* module.cc (module_state::write): Don't stream env.
gcc/cp/
* module.cc (trees_in:::read_function_def): Push the template for
post processing.
(module_state::read_cluster): Deal with abstract post processing.
gcc/testsuite/
* g++.dg/modules/tpl-friend-7_[ab].C: New.
gcc/cp/
* module.cc (depset::hash::add_binding): Return added flag. Deal
with orphaned using decls.
(depset::hash::add_writables): Return added flag.
gcc/testsuite/
* g++.dg/modules/using-5_[ab].C: New.
Clones
gcc/cp/
* module.cc (enum tree_tag): Add tt_clone_ref.
(get_clone_target): Replace get_clone_orig.
(FOR_EVERY_CLONE): New.
(trees_out::mark_mergeable): Add tag parm. Adjust.
(trees_in::chained_decls): Cope with already-linked clones.
(trees_out::tree_decl): Support clone walking.
(trees_{in,out}::tree_value): Likewise.
(trees_in::tree_node): Support tt_clone_ref.
(trees_{in,out}::key_mergeable): Key clones.
(trees_out::{mark,write}_definition): No clones here.
(trees_in::read_definition): Likewise.
(depset::hash::add_clone): Reimplement.
(module_state::write_cluster): Deal with clones.
gcc/testsuite/
* g++.dg/modules/clone-1_[ab].C: New.
* g++.dg/modules/friend-1_a.C: Adjust scan.
* g++.dg/modules/indirect-[1234]_[bc].C: Likewise.
* g++.dg/modules/inst-3_a.C: Likewise.
2019-06-27 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset::entity_kind): Add EK_CLONE.
(depset::hash::add_clone): New.
(enum walk_kind): Move to global scope.
(enum merge_kind): New.
(trees_{in,out}::tree_value): Use new enums.
(trees_{in,out}::tree_mergeable): Likewise.
(get_clone): New.
(member_owned_by_class): Clones are never owned.
(trees_out::mark_declaration): Walk clones.
(trees_in::read_definition): Likewise.
(trees_out::write_definition): Likewise.
gcc/testsuite/
* g++.dg/modules/builtin-1_b.C: Adjust dump scans.
* g++.dg/modules/inst-1_b.C: Adjust dump scans.
* g++.dg/modules/part-3_[cd].C: Adjust dump scans.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Stream abstract_origin.
gcc/cp/
* class.c (build_clone): Neaten and assert.
* cp-tree.h (lang_decl_u5.cloned_function): Fix comment.
* name-lookup.c (get_lookup_ident): Don't fall off end of overload.
Add -Mno-modules.
gcc/c-family/
* c-opts.c (c_common_init_options): Default module deps on.
(c_common_handle_option): Handle M{no-}modules.
* c.opt (Mmodules, Mno-modules): New options.
gcc/
* doc/cppopts.texi (Mno-modules): Document it.
* doc/invoke.texi: Likewise.
* gcc.c (cpp_unique_options): Add it.
gcc/testsuite/
* g++.dg/modules/dep-3.C: New.
libcpp/
* include/cpplib.h (struct cpp_options): Add dep.modules.
* include/mkdeps.h: Include cpplib.h
(deps_write): Take a cpp_reader.
* init.c (cpp_finish): Adjust deps_write call.
* mkdeps.c: Include internal.h
(make_write): Adjust. Conditionally inhibit module output.
(deps_write): Adjust.
2019-06-26 Nathan Sidwell <nathan@acm.org>
Don't elide primary from partition names.
gcc/cp/
* cp-tree.h (module_name): Drop maybe_primary parm.
* modules (module_state::get_flatname): Just get the flatname.
(get_primary): New.
(get_module): Expect fully qualified name. Drop parent arg.
Adjust callers.
(module_stae:set_flatname): Create fully qualified name.
(module_state::read_{imports,partitions}): Check partitions have
expected primary.
(module_state::{read,write}_config): Adjust.
(module_state::do_import, module_preprocess)
(finish_module_procesing): Adjust deps_add_module calls.
* name-lookup.c (make_namespace): Adjust anon namespace name
creation.
* ptree.c (cxx_print_decl): Adjust module_name call.
gcc/testsuite/
* g++.dg/modules/part-2_d.c: Adjust regexp.
* g++.dg/modules/part-3_c.c: Adjust scans.
libcpp/
* include/mkdeps.h (deps_add_module): Drop primary arg.
* mkdeps.c (deps_add_module): Drop primary arg.
Merge trunk r272714.
gcc/cp/
* decl.c (duplicate_decls): Non-modules are ok for builtins.
gcc/testsuite/
* g++.dg/modules/builtin-2.C: New.
gcc/cp/
* module.cc (depset::hash::add_mergeable_horcrux): Add redirect as
necessary.
gcc/testsuite/
* g++.dg/modules/tpl-spec-7.C: New.
gcc/cp/
* module.cc (depset::hash::add_redirect): New.
(depset::hash::add_specialization): Use it.
(depset::hash::add_mergeable): Use it.
(depset::hash::add_dependency): Never add a redirect here.
gcc/cp/
* module.cc (finish_module_processing): Adjust failed to write error.
gcc/testsuite/
* g++.dg/modules/internal-1.C: Adjust.
gcc/cp/
* module.cc (depset::entity_kind): Add EK_REDIRECT.
(tree_out::tree_decl): Cope with redirects.
(depset::hash::add_dependency): Likewise.
(depset::hash::add_specialization): Add redirect for partials.
(depset::hash::add_mergeable): Likewise.
(module_state::write_cluster): Assert no redirects here.
(module_state::write): Check redirects here.
gcc/testsuite/
* g++.dg/modules/global-3_a.C: Disable.
* g++.dg/modules/tpl-spec-6_[ab].C: New.
gcc/cp/
* module.cc (trees_{in,out}::note_definition): Rename to ...
(trees_{in,out}::assert_definition): ... here. Update callers.
gcc/cp/
* cp-tree.h (match_mergeable_specialization): Add insert parm.
* pt.c (match_mergeable_specialization): Add insert parm.
* module.cc (depset::entity_kind): Add EK_MAYBE_SPEC.
(depset::disc_bits): Delete DB_FRIEND_BIT, ADD DB_PSEUDO_SPEC_BIT.
(depset::is_friend): Delete.
(depset::is_pseudo_spec): Add.
(trees_out::tree_decl): Some specializations are findable by name.
(trees_in::tree_value): Mergeables have an explicit kind.
(trees_in::tree_node): Protect more.
(trees_{in,out{::key_mergeable): Explicitly encode key kind.
(depset::hash::add_dependency): Support EK_MAYBE_SPEC.
(specialization_add): Add some consistency checking.
(depset::hash::add_specialization): Specialization might be an
import.
(depset::hash::add_mergeable_horcrux): New.
(sort_mergeables): Add horcrux deps.
(module_state::write_cluster): Don't mark cdf_is_friend.
gcc/testsuite/
* g++.dg/modules/indirect-3_[ab].C: Reenable. Adjust scans.
2019-06-25 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_state:note_cmi_name): New.
(module_state::read_config): Use it.
(module_state::check_read): Likewise.
gcc/testsuite/
* g++.dg/modules/atom-decl-3.C: Adjust diags.
* g++.dg/modules/atom-preamble-3.C: Likewise.
* g++.dg/modules/bad-mapper-1.C: Likewise.
* g++.dg/modules/bad-mapper-3.C: Likewise.
* g++.dg/modules/circ-1_c.C: Likewise.
* g++.dg/modules/flag-1_b.C: Likewise.
* g++.dg/modules/import-2.C: Likewise.
* g++.dg/modules/mod-stamp-1_d.C: Likewise.
* g++.dg/modules/p0713-3.C: Likewise.
2019-06-24 Nathan Sidwell <nathan@acm.org>
Revert late specialization insertion.
gcc/cp
* module.cc (depset): Delete DB_OOT_SPEC_BIT.
(depset::~depset): Remove deletion.
(trees_out::key_mergeable): Assert specialization is marked.
(depset::hash::add_dependency): Assert no late specializations.
gcc/testsuite
* g++.dg/modules/modules.exp: Expand dg-module-do capabilities.
* g++.dg/modules/indirect-3_a.C: Disable.
2019-06-23 Nathan Sidwell <nathan@acm.org>
Merge trunk r272583.
2019-06-21 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* modules.cc (depset): Add DB_OOT_SPEC_BIT.
(depset::~depset): Free the spec entry if we own it.
(trees_{in,out}::note_definition): Check template result isn't
there.
(depset::hash::add_dependency): Correctly insert discovered
non-member template instantiations.
gcc/cp/
* modules.cc (note_defs): New checking hash table.
(trees_{in,out}::note_definition): New checkers
(trees_in::read_{function,class,var,enum}_def): Add maybe_template
arg, use it. Note definitions.
(member_owned_by_class): New, extracted from ...
(trees_out::mark_class_member): ... here. Call it.
(trees_out::write_class_def): Only write the owned definitions.
(trees_out::write_definition): Note definition.
(trees_in::read_definition): Pass maybe_template to readers.
(module_state::write): Reset note_defs hash.
(init_module_processing): Init it.
(finish_module_processing): Delete it.
gcc/cp/
* modules.cc (dumper::operator ()): Print indentation level.
gcc/testsuite/
* g++.dg/modules/scc-1.C: Adjust dump scan.
gcc/cp/
* modules.cc (node_template_info): Enums are awkwarder.
gcc/testsuite/
* g++.dg/modules/enum-4_[ab].C: New.
2019-06-20 Nathan Sidwell <nathan@acm.org>
Bitfields.
gcc/cp/
* module.cc (tree_out::mark_class_def): Mark bitfield's
representative field.
gcc/testsuite/
* g++.dg/modules/bfield-1_[ab].C: New.
Thunks.
gcc/cp/
* module.cc (enum tree_tag): Add tt_thunk.
(trees_out::tree_decl): Emit it.
(trees_out::tree_value): Assert we don't accidentally meet a
thunk.
(trees_in::tree_node): Read it.
(trees_out::{mark,write}_class_def): Emit thunks by value.
(trees_in::read_class_def): Install thunks.
gcc/testsuite/
* g++.dg/modules/thunk-1_[ab].C: New.
gcc/cp/
* parser.c (cp_lexer_tokenize): Skip pragmas.
* lex.c (module_preprocess_token): Likewise.
gcc/testsuite/
* g++.dg/modules/pragma-1_[ab].[HC]: New.
* g++.dg/modules/tname-spec-1_b.C: Move include earlier.
Deconstruct types.
gcc/cp/
* module.cc (enum tree_tag): Add tt_typename_decl,
tt_derived_type, tt_variant_type.
(trees_out::tree_decl): Stream typename types.
(trees_out::tree_type): Emit tt_{derived,variant}_type records.
(trees_in::tree_node): Add tt_typename_decl, tt_derived_type,
tt_variant_type handling.
gcc/testsuite/
* g++.dg/modules/class-3_b.C: Adjust dump scan.
* g++.dg/modules/tname-spec-1_[ab].[HC]: New.
* g++.dg/modules/typename-1_[ab].C: New.
2019-06-19 Nathan Sidwell <nathan@acm.org>
Stream mergeables inline.
gcc/cp/
* module.cc (depset): Add DB_MERGEABLE_BIT.
(depset::is_mergeable): New.
(depset::hash::set_for_mergeable): Delete.
(trees_{in,out}::tree_mergeable): Delete.
(tress_{in,out}::key_mergeable): New.
(trees_out::tags): New enum.
(trees_out::mark_{mergeable,merged}): New.
(trees_out::reserve_mergeable,unset_for_mergeable): Delete.
(trees_out::{insert,ref_node}): Adjust.
(trees_out::core_vals): Don't stream tpl-tpl-parm contexts.
(trees_out::tree_decl): tpl-tpl-parms not found by name.
(trees_{in,out}::tree_value): Stream merging info inline.
(trees_{in,out}::tpl_header): Take template, not parms.
(trees_out::mark_declaration): Mark the template parms.
(depset::hash::find_dependencies): Adjust mergeable walk.
(depset::hash::add_mergeable): Adjust.
(module_state::sort_mergeables): Replace with ...
(sort_mergeables): ... this.
(enum cluster_tag): Delete ct_mergeable.
(module_state::write_cluster): Determine mergable ordering
earlier. Don't write a mergeable table.
(module_state::read_cluster): No mergeables to deal with here.
(module_state::write): Move cluster member dumping to write_cluster.
* name-lookup.h (match_mergeable_decl): Drop tpl_args parm.
* name-lookup.c (check_mergeable_decl): Likewise. Update callers.
gcc/testsuite/
* g++.dg/modules/builtin-1_a.C: Adjust dump scans.
* g++.dg/modules/friend-1_a.C: Likewise.
* g++.dg/modules/indirect-[234]_[bc].C: Likewise.
* g++.dg/modules/inst-[23]_[ab].C: Likewise.
* g++.dg/modules/part-3_[cd].C: Likewise.
* g++.dg/modules/scc-1.C: Likewise.
* g++.dg/modules/tpl-friend-[12]_a.C: Likewise.
* g++.dg/modules/tpl-spec-[12345]_[ab].C: Likewise.
* g++.dg/modules/vmort-2_b.C: Likewise.
2019-06-18 Nathan Sidwell <nathan@acm.org>
Merge trunk r272419.
gcc/cp/
* module.cc (specialization_cmp): Deal with more equivalencies.
(depset_cmp): New, cloned and adjusted from cluster_cmp.
(depset::hash::connect): Use it.
2019-06-17 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::fn_parms): Stream canonical type.
(depset::hash::add_dependency): Adjust static inline check.
gcc/testsuite/
* g++.dg/modules/mutual-friend.ii: New.
2019-06-14 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset::hash::add_dependency): Don't register
internal entities when in a header module.
(depset::hash::add_binding): Add internal entities in header modules.
gcc/testsuite/
* g++.dg/modules/stat-tpl-1_a.H: New.
gcc/cp/
* module.cc (depset::hash::add_dependency): Inhibit internal
linkage setting on functions.
(cluster_cmp): We can meet matching using decls.
gcc/cp/
* module.cc (depset::hash::add_dependency): Unnamed elaborated
types have no linkage.
gcc/testsuite/
* g++.dg/modules/enum-5_[ab].[HC]: New.
gcc/cp/
* module.cc (module_state::{read,write}_cluster): Check stat hack
is for implicit typedefs.
gcc/cp/
* module.cc (trees_out::tree_type): Simplify if-tree.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Stream original_type of type of
typedefs, not their type.
(trees_out::tree_type): Stream type_name of typedefs.
(trees_out::tree_value): Insert the type of a typedef.
(trees_in::tree_value): Reconstruct the type of a typedef.
gcc/testsuite/
* g++.dg/modules/tdef-4_[abc].C: New.
* g++.dg/modules/class-3_b.C: Adjust scan.
gcc/cp/
* module.cc (binding_cmp): There can be an implicit and
non-implicit type_decl.
* name-lookup.c (check_mergeable_decl): Check implicitness of
type_decl.
2019-06-13 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset::hash::add_specializations): Partial
instantiations need their template.
gcc/testsuite/
* g++.dg/modules/tpl-tpl-mem-1_[ab].C: New.
2019-06-11 Nathan Sidwell <nathan@acm.org>
Update Revision number
2019-06-11 Nathan Sidwell <nathan@acm.org>
Merge trunk r272149.
2019-06-10 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_state::read_location): Don't map
UNKNOWN_LOCATION to loc.
(module_state::read_locations): Don't rely on that.
gcc/testsuite/
* g++.dg/modules/predef-2{.h,_[ab].C}: New.
gcc/cp/
* module.cc (loc_spans::init): Correct macro range ordering.
(module_state::write_locations): Fix more off-by-ones.
gcc/testsuite/
* g++.dg/modules/predef-1.[hC]: New.
2019-06-07 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_state::write_env): New.
(module_state::write): Call it.
gcc/cp/
* Make-lang.in (REVISION_c): Don't test it.
* module.cc (module_state::write_locations): Fix off-by-one thinko.
gcc/cp/
* module.cc (loc_spans::init): Add lmaps parm, separate main from
forced header locs.
(loc_spans::SPAN_FIRST): New, use it for first span.
(loc_spans::SPAN_MAIN): Just after the first span.
gcc/testsuite/
* g++.dg/modules/macro-5_[abc].[CH]: Adjust.
gcc/cp/
* module.cc (dumper::MACRO): New flag.
(module_state::{write,install}_macros): Use it.
(module_state::{undef,deferred}_macro): Likewise.
gcc/
* doc.invoke (-fdump-lang): Document.
gcc/testsuite/
* g++.dg/modules/macro-[35]_[abc].[CH]: Update.
gcc/cp/
* module.cc (bytes_out::print_time): New.
(module_state::write_readme): Dump some environmental data.
2019-06-06 Nathan Sidwell <nathan@acm.org>
Update Revision number
2019-06-06 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* Make-lang.in (MODULE_REVISION): Read from Changelog.modules.
2019-06-05 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (dumper::MAPPER): New flag. Use it on mapper things.
(dumper::push): Only do blank line when starting a new module
nest.
gcc/cp/
* module.cc (trees_out::tree_type): We can meet ttps here.
(trees_{in,out}::tree_mergeable): Stream skeleton before locating info.
gcc/testsuite/
* g++.dg/modules/ttp-3_[ab].C: New.
* g++.dg/modules/builtin-1_[ab].C: Adjust module scan.
* g++.dg/modules/indirect-[234]_b.C: Likewise.
* g++.dg/modules/inst-[1234]_[ab].C: Likewise.
gcc/cp/
* module.cc (trees_out::core_vals): Template type parms are their
own canonical.
(trees_in::finish_type): Never subst a canonical type parm for the type.
gcc/testsuite/
* g++.dg/modules/ttp-2_[ab].C: New.
gcc/cp/
* module.cc (global_tree_arys): Add c_global_trees.
gcc/c-family/
* c-common.h (enum c_tree_index): Add CTI_MODULE_HWM, move voltale
entries below it.
Merge trunk r271953.
gcc/
* tree-core.h (enum tree_index): Add TI_MODULE_HWM.
gcc/cp/
* cp-tree.h (enum cp_tree_index): Add CPTI_MODULE_HWM, move
volatile CPTI's below it.
(CPTI_STD_IDENTIFIER, std_identifier): Delete.
(DECL_NAMESPACE_STD): Simplify.
* decl.c (initialize_predefined_identifiers): Drop std_identifier.
(cxx_init_decl_processing): Adjust std_node creation. Use push/pop
nested namespace for std.
(cxx_builtin_function, cxx_builtin_function_ext_scope): Use
push/pop nested namespace for std.
* except.c (init_exception_processing): Likewise.
* rtti (init_rtti_processing): Likewise.
* module.cc (global_tree_arys): Restrict C & C++ trees.
* name-lookup.c (push_namespace): Set location if it was a
builtin.
gcc/testsuite/
* g++.dg/modules/std-1_[ab].C: New.
2019-06-04 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* class.c (maybe_add_class_template_decl): Mark (some) local
templates.
* module.cc (friend_from_decl_list): Some friends are overloads.
(trees_{in,out}::core_vals): Stream TREE_VEC CHAIN.
(trees_out::mark_class_def): Directly mark friend decls.
gcc/testsuite/
* g++.dg/modules/tpl-friend-6_[ab].C: New.
gcc/testsuite/
* g++.dg/modules/tpl-friend-5_[ab].C: New.
gcc/cp/
* name-lookup.c (lookup_type_scope_1): Look in imported slots too.
gcc/testsuite/
* g++.dg/modules/class-8_[ab].C: New.
gcc/cp/
* name-lookup.c (lookup_type_scope_1): Reimplement, handle local
and namespace scopes separately.
2019-06-03 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (friend_from_decl_list): New.
(trees_out::{tree_decl,{write,mark}_class_def}): Use it.
(trees_in::{tree_node,read_class_def}): Likewise.
Template friends of templates.
gcc/testsuite/
* g++.dg/modules/tpl-tpl-friend-1_[ab].C: New.
Non-template friends of templates.
gcc/testsuite/
* g++.dg/modules/tpl-friend-4_[ab].C: New.
Non-template friends of templates.
gcc/cp/
* module.cc (has_definition): Use DECL_SAVED_TREE.
(trees_{in,out}::{read,write}_class_def): Stream definitions of
local friends.
gcc/testsuite/
* g++.dg/modules/tpl-friend-3_[ab].C: New.
Merge trunk r271874.
Non-template friends of templates.
gcc/cp/
* module.cc (depset::disc_bits): Add DB_FRIEND.
(depset::is_friend): New.
(enum tree_tag): Add tt_friend_template.
(trees_out): Add section field, init it.
(trees_out::tree_decl): Deal with template friends. Assert lazy
ordering.
(trees_in::tree_node): Add tt_friend_template support.
(trees_{in,out}::{read,write,mark}_class_def): Deal with friend
templates.
(depset::hash::add_dependency): Notice friend templates.
(depset::hash::add_specializations): Add non-specializations.
(depset::hash::find_dependencies): Specializations depend on their
template & args.
(enum ct_decl_flags): Add cdf_is_friend.
(module_state::write_cluster): Set it.
(module_state::write): Add specializations before bindings.
Expand cluster dump.
* pt.c (push_template_decl_real): Friend template's DECL_CHAIN
points at the befriending class.
gcc/testsuite/
* g++.dg/modules/tpl-friend-2_[ab].C: New.
* g++.dg/modules/tpl-friend-1_a.C: Adjust scans.
2019-05-31 Nathan Sidwell <nathan@acm.org>
Non-template friends of templates.
gcc/cp/
* module.cc (trees_{in,out}::{read,write}_class_def): Stream
friend lists and decl lists specially.
(trees_out::mark_class_def): Mark local friend decls.
(depset::hash::add_specializations): Don't add non-specializations
that are in the table.
* pt.c (push_template_decl_real): Mark non-pushed friend templates.
gcc/testsuite/
* g++.dg/modules/tpl-friend-1_[ab].C: New.
2019-05-29 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* decl.c (duplicate_decls): Remove duplicate assert.
* pt.c (build_template_decl): Set RESULT & TYPE of the template
here ...
(process_partial_specialization): ... not here ...
(add_inherited_template_parms): ... nor here ...
(push_template_decl_Real): ... nor here. Refactor.
gcc/
* doc/invoke.texi (C++ Modules): Document atomicity.
gcc/fortran/
* cpp.c (gfc_cpp_add_dep, gfc_cpp_add_target, gfc_cpp_init):
Rename mrules to mkdeps.
gcc/cp/
* module.cc (maybe_add_bmi_prefix): Replace FORCE with LEN_P.
Set it.
(create_dirs): Input is guarantueed unique.
(module_state::check_read): Show full BMI filename in errors.
(finish_module_processing): Likewise. Rename output atomically.
gcc/testsuite/
* g++.dg/modules/atom-decl-3.C: Adjust diagnostics.
* g++.dg/modules/atom-preamble-3.C: Likewise.
* g++.dg/modules/bad-mapper-[13].C: Likewise.
* g++.dg/modules/circ-1_c.C: Likewise.
* g++.dg/modules/flag-1_b.C: Likewise.
* g++.dg/modules/import-2.C: Likewise.
* g++.dg/modules/internal-1.C: Likewise.
* g++.dg/modules/mod-stamp-1_d.C: Likewise.
* g++.dg/modules/p0713-3.C: Likewise.
2019-05-28 Nathan Sidwell <nathan@acm.org>
* decl.c (duplicate_decls): Assert a template newdecl has no
specializations.
Revert inadvertent commits.
gcc/cp/
* pt.c (push_template_decl_real): Here.
* decl.c (duplicate_decls): Here.
Merge trunk r271702.
2019-05-23 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (loc_spans): Make spans a vec.
(module_state::{read,write}_locations): Use vec.
gcc/cp/
* module.cc (trees_in): Replace auto_vec with vec.
Template template parms, and a bunch of other stuff
gcc/cp/
* cp-tree.h (DECL_TEMPLATE_INFO): Augment docs.
* module.cc (depset::clear_flag_bit): New.
(depset::is_unreached): Replace is_implicit_specialization.
(depset::is_marked): Replace is_first_dep_repurposed.
(dumper::impl::nested_name): Template args may be NULL.
(trees_{in,out}::core_vals): Template decl result & args streamed
with decl.
(trees_out::tree_decl): TTPs by value.
(trees_{in,out}::tree_value): Reorder body streaming, stream more
template bits.
(trees_out::tree_mergeable): Redo specialization tagging.
(trees_out::mark_class_def): Only mark decls on decl list.
(trees_out::mark_declaration): Simplify.
(depset::hash::add_dependency): Deal with reaching unreached.
(specialization_add): Grab all instantiations from this TU.
(depset::hash::add_specialiazations): Determing is_unreached.
(depset::hash::find_dependencies): Iterate until no more unreached
reached.
(module_state::write_unnamed): Adjust.
* pt.c (tsubst_function_decl): Set DECL_MODULE_OWNER.
gcc/testsuite/
* g++.dg/modules/ttp-1_[ab].C: New.
* g++.dg/modules/indirect-[234]_[bc].C: Adjust scans.
* g++.dg/modules/inst-[24]_ab.C: Likewise.
gcc/cp/
* module.cc (dumper::impl::nested_name): Cope with TTPs.
(depset:hash::connect): Return the vec.
(depset::tarjan): Create and return the vec.
(module_state::write_{bindings,unnamed}): SCCS are in a vec.
(module_state::write): Likewise.
2019-05-22 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset::hash::hash): Create worklist.
(depset::tarjan::tarjan): Create stack.
(depset::depset): Create deps.
Stream binfos properly (again).
gcc/cp/
* module.cc (trees_out::mark_node): Binfos may be marked.
(trees_{in,out}::start): Binfos may be streamed.
(trees_{in,out}::core_vals): Likewise.
(trees_{in,out}::tree_node): Reachable binfos may always be
inserted.
(trees_{in,out}::{read,write}_binfos): Delete.
(trees_out::mark_class_def): Mark the binfo heirarchy.
(trees_{in,out}::{read,write}_class_def): Stream binfos here.
2019-05-21 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::mark_declaration): Add do_defn parm, mark
definition if set. Adjust callers.
(trees_out::mark_definition): Merge into mark_declaration.
Merge trunk r271478.
Merge trunk r271467.
2019-05-20 Nathan Sidwell <nathan@acm.org>
Merge trunk r271420.
2019-05-17 Nathan Sidwell <nathan@acm.org>
Merge trunk r271338.
gcc/cp/
* module.cc (trees_out::mark_class_member): Add do_defn parm.
Mark the definition.
(trees_out::mark_class_def): Adjust.
(depset::hash::find_dependencies, module_state::write_cluster):
Use mark_declaration.
gcc/cp/
* module.cc (trees_out::mark_node): Drop OUTERMOST parm. Don't
consider templateness.
(trees_out::mark_declaration): New.
(trees_out::mark_class_member): New.
(trees_out::mark_class_def): Use mark_class_member.
(depset::hash::find_dependencies): Adjust.
(module_state::write_cluster): Likewise.
gcc/cp/
* module.cc (trees_{in,out}::tpl_parms): Rename to ...
(trees_{in,out}::tpl_headr): ... here. Stream the whole parms.
(trees_out::tree_type): Assert no surprising
TEMPLATE_TEMPLATE_PARM.
(trees_{in,out}::tree_value): Stream template template parms.
2019-05-16 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (dumper::operator ()): Add null check.
(trees_out::mark_node): Permit fixed nodes.
(trees_out::tree_decl, trees_in::tree_node): More anon.
* name-lookup.c (mark_pending_on_decl): Fix field marking thinko.
(lookup_by_ident): Lookup anon.
(get_lookup_ident): Likewise.
gcc/testsuite/
* g++.dg/modules/anon-1_[abc].C: New.
2019-05-15 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset::DB_HIDDEN_BIT): New, add accessors.
(depset::hash::add_binding): Set hidden binding bit.
(binding_cmp): Adjust hidden.
(enum ct_bind_flags): New.
(module_state::{read,write}_cluster): Reimplement binding flag
streaming.
* name-lookup.c (name_lookup::adl_namespace_fns): Skip hidden.
gcc/testsuite/
* g++.dg/modules/friend-2_[ab].C: New.
2019-05-14 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_in::tree_value): New, broken out of ...
(trees_in::tree_node): ... here. Call it.
(trees_{in,out}::lang_type_vals): Don't stream befriending classes.
gcc/testsuite/
* g++.dg/modules/friend-1_[abc].C: New.
Cleanup merging, friend streaming.
gcc/cp/
* module.cc (trees_{in,out}::tree_mergeable): Reimplement.
(trees_out::tree_value): Significant adjustment.
(trees_in::tree_node): Likewise.
(trees_{in,out}::tree_node_specific): Move into ...
(trees_{in,out}::tree_node_bools): ... here.
(trees_out::mark_mergeable): Delete.
(trees_{in,out}::insert): Adjust.
(trees_{in,out}::lang_vals): New, broken out of ...
(trees_node_vals): ... here. Call them.
(trees_out::ref_node): Process mergeable cases.
(trees_{in,out}::tpl_parms): Adjust.
(trees_{in,out}::{read,write}_class_def): Stream and connect
friend lists.
(binding_cmp): Order hidden decls.
(module_state::write_cluster): Adjust mergeable streaming.
(module_State::read_cluster): Hide hidden overloads.
* name-lookup.c (extract_module_binding): Don't skip hidden.
gcc/testsuite/
* g++.dg/modules/builtin-1_a.C: Adjust scans.
* g++.dg/modules/class-3_b.C: Likewise.
* g++.dg/modules/indirect-[24]_[bc].C: Likewise.
* g++.dg/modules/inst-[123]_[bcd].C: Likewise.
2019-05-10 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* decl.c (duplicate_decls): Don't check moduleness on friend decl.
* pt.c (tsubst_friend_function): Set module ownership.
gcc/cp/
* module.cc (trees_{in,out}::{read,write}_function_def): Serialize
FRIEND_CONTEXT.
(trees_{in,out}::{read,write}_class_def): Reattach befriending classes.
gcc/cp/
* decl.c (duplicate_decls): Check and adjust anticipated builtin
decls.
* friend.c (do_friend): Set module ownership.
* module.cc (trees_{in,out}::lang_decl_vals): Conditionally stream
context and befriending classes.
* name-lookup.c (init_global_partition): Header unit uses global
slot.
* parser.c (cp_parser_template_declaration): Conditionalize export
warning.
Partial specializations!
gcc/cp/
* module.cc (trees_out::tree_mergeable): Correct finding of
general template.
(trees_in::tree_mergeable): Recover a merged partial
specialization.
(depset::hash::add_specializations): Deal with partial
specializations.
(enum ct_decl_flags): New.
(module_state::write_cluster): Set specialization flags.
(module_state::read_cluster): Install specializations.
(install_specialization): New.
gcc/testsuite/
* g++.dg/modules/tpl-spec-5_[ab].C: New.
2019-05-09 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc
gcc/testsuite/
* g++.dg/modules/indirect-[234]_[bc].C: Adjust module dump scans.
* g++.dg/modules/inst-[1234]_[ab].C: Likewise.
* g++.dg/modules/vmort-2_c.C: Likewise.
Atomically mark template's DECL_TEMPLATE_RESULT, IMPLICIT_TYPEDEF's type
gcc/cp/
* module.cc (enum tree_tag): Replace
tt_{primary,secondary}_type with tt_typedef.
(trees_out::mark_node): Mark the template_decl.
(trees_out::maybe_insert_typeof): Delete.
(trees_out::tree_decl): Stream the template_decl, name implicit
templates. Always mark result & type.
(trees_out::tree_type): Simplify implicit_typedef streaming.
(trees_out::tree_value): Assert correct ordering.
(trees_in::tree_node): Adjust tt switch. Insert result & type.
(module_state::{read,write}_cluster): Always add voldemort's type.
gcc/testsuite/
* g++.dg/modules/class-3_[bd].C: Adjust module dump scans.
* g++.dg/modules/indirect-[234]_[bc].C: Likewise.
* g++.dg/modules/inst-[234]_[ab].C: Likewise.
* g++.dg/modules/stdio-1_a.H: Likewise.
* g++.dg/modules/using-4_a.C: Likewise.
2019-05-07 Nathan Sidwell <nathan@acm.org>
gcc/testsuite/
* g++.dg/template/pr39425.C: Adjust errors.
* g++.old-deja/g++.pt/spec20.C: Adjust errors.
Merge trunk r270943.
2019-05-06 Nathan Sidwell <nathan@acm.org>
libcpp/
* include/mkdeps.h: Rename struct mrules to struct mkdeps.
* mkdeps.c: Likewise.
* include/cpplib.h (cpp_get_deps): Rename return type..
* directives.c (cpp_get_deps): Likewise.
* internal.h (struct cpp_reader): Rename deps field type.
gcc/cp/
* cp-tree.h (module_preprocess): Adjust first arg type.
* module.cc: Rename mrules to mkdeps.
* lex.c (module_preprocess_token): Rename mrules->mkdeps.
gcc/c-family/
* c-opts.c (handle_defered_opts): Rename struct deps to struc mkdeps.
gcc/cp/
* module.cc (enum tree_tag): Delete tt_builtin.
(trees_out::tree_decl): Builtins are merely GMF entities.
(tree_in::tree_node): Delete tt_builtin handling.
* name-lookup.c (init_global_partition): New.
(get_fixed_binding_slot): Populate global & partition slots.
gcc/testsuite/
* g++.dg/modules/builtin-1_[ab].C: Adjust scans.
* g++.dg/modules/by-name-1.C: Likewise.
gcc/cp/
* cp-tree.h (global_purview_p): New.
(module_header_p): Rename to ...
(header_module_p): ... this.
(named_module_p): New. Replace ...
(module_not_header_p): ... this.
(module_global_p): ... delete.
* module.cc (trees_out::tree_mergeable, module_state::write)
(module_cpp_undef, finish_module_processing): Adjust.
* name-lookup.c (get_fixed_binding_slot, record_mergeable_decl)
(check_module_override, make_namespace): Adjust.
* parser.c (cp_parser_translation_unit, cp_parser_module_name): Adjust.
2019-05-02 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (spec_entry): Moved from pt.c.
(walk_specializations): Declare.
(get_specializations_for_module): Delete.
* module.cc (depset): Add DB_FIRST_BIT.
(depset::{is,set}_first_dep_repurposed): New.
(depset::{,tarjan::}connect): Drop for_mergeable parm, use
is_first_dep_repurposed instead.
(spec_tuple): New.
(specialization_add): New.
(specialization_cmp): Adjust.
(depset::hash::add_specializations): Reimplement.
(depset::hash::add_mergable): Set set_first_dep_repurposed.
(module_state::sort_mergeables): Adjust.
(module_state::write): Likewise.
* pt.c (spec_entry): Move to cp-tree.h
(get_specializations, get_specializations_for_module): Replace
with ...
(walk_specializations): ... this.
gcc/testsuite/
* g++.dg/modules/inst-1_b.C: Adjust scans.
2019-05-01 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset): Add DB_PARTIAL_BIT,
is_partial_specialization, set_implicit_specialization.
(depset::hash::add_dependency): Drop is_implicit parm. Return the
depset.
(trees_out::tree_decl): Set the implicit bit myself.
(depset::hash::add_specializations): Preliminary tweak.
gcc/cp/
* pt.c (get_specializations): Adjust type template checking.
(get_specializations_for_module): Get the type specializations
too.
gcc/testsuite/
* g++.dg/modules/tpl-spec-4_[ab].C: New.
gcc/cp/
* module.cc (set_module_owner): Deal with specializations.
* name-lookup.c (mark_pending_on_decl): Walk class members.
gcc/testsuite/
* g++.dg/modules/tpl-spec-3_[ab].C: New.
gcc/cp/
* parser.c (cp_parser_explicit_specialization): Correctl unwind state.
* decl.c (grokfndecl): Set module ownership after specializationness
is known.
libcpp/
* macro.c (_cpp_new_macro): memset before initing.
gcc/cp/
* module.cc (module_state::write_bindings): Iterate over sccs
array, not hash table.
(module_state::write): Adjust.
libcpp/
* macro.c (_cpp_new_macro): Initialize imported field.
Merge trunk r270765.
2019-04-30 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (module_normal_import_p): Declare.
* module.cc (module_normal_import_p): New.
* name-lookup.c (note_pending_specializations): Note already
loaded normal imports.
gcc/testsuite/
* g++.dg/modules/tpl-spec-2_d.C: New
gcc/testsuite/
* tpl-spec-2_[abc].C: New.
Namespace-scope function specializations.
gcc/cp/
* cp-tree.h (MODULE_VECTOR_LAZY_{PARTITION,GLOBAL}_SPEC_P):
Delete.
* module.cc (struct specset): New.
(module_for_unnamed): New.
(lazy_load_specializations): New.
(module_state::{read,write}_unnamed): Register the
specializations.
({init,finish}_module_processing): Adjust.
* name-lookup.c (mark_pending_on_decl, mark_pending_on_binding):
New.
(set_module_binding): If pending, mark the new decls.
(note_pending_specializations, note_loaded_specializations): New
* name-lookup.h (note_pending_specializations)
(note_loaded_specializations): Declare.
gcc/testsuite/
* g++.dg/modules/tpl-spec-1_[ab].C: New.
2019-04-29 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (MODULE_VECTOR_LAZY_SPEC_P)
(MODULE_VECTOR_LAZY_GLOBAL_SPEC_P)
(MODULE_VECTOR_LAZY_PARTITION_SPEC_P): New.
* module.cc (struct unnamed_entity): New.
(unnamed_ary): Array of unnamed_entity.
(module_state::write_cluster): Return void.
(module_state::{read,write}_unnamed): Deal with specializations.
(module_State::{read,write}_specializations): Delete.
(module_state::read_cluster): Adjust.
(module_state_config): Drop specialization count.
(module_state::{read,write}_config): Adjust.
(module_state::{read,write}): Drop specialization streaming.
Merge trunk r270644. (GCC 10)
gcc/cp/
* modules.cc (depset::hash::add_depednency): More STRIP_TEMPLATE.
2019-04-25 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (get_specializations_for_module): Declare.
* module.cc (depset): Add DB_IMPLICIT_BIT,
is_implicit_specialization.
(depset::hash::add_dependency): Add is_implicit arg. Allow NULL
current. Set is_imolicit_specialization.
(module_state::write_specializations): Implement.
(trees_out::tree_decl): Stream specializations.
(specialization_cmp): New.
(depset::hash::add_specializations): New.
(module_state::write_cluster): Count specializations.
(module_state::write): Add and stream specializations.
* pt.c (spec_hash_table): New typedef. Use it.
(get_specializations): New.
(get_specializations_for_module): New.
2019-04-24 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (DECL_TEMPLATE_LAZY_SPECIALIZATIONS_P): New.
(lazy_load_specializations): Declare.
* module.cc (module_state::{read,write}_specializations): New.
(module_state::write_cluster) Return template count.
(module_state_config): Add num_specializations.
(module_state::{read,write}_config): Stream it.
(module_state::{read,write}): Stream spcializizations.
(lazy_load_specializations): New.
* pt.c (lookup_template_class_1, instantiate_template_1): Lazy
load specializations.
Merge trunk r270543.
Instantiations now streamed.
gcc/cp/
* module.cc (tree_tag): Delete tt_inst.
(trees_out::tree_decl): All instantiations are depended. Never
tt_inst.
(trees_in::tree_node): Delete tt_inst handling.
(trees_in::tree_mergeable): Deal with type specializations.
* pt.c (lookup_template_class_1): Set instatiation owner to
current TU.
(match_mergable): Accept type.
gcc/testsuite/
* g++.dg/modules/indirect-[234]_[bc].C: Adjust scans.
* g++.dg/modules/inst-[34]_[bc].C: New.
2019-04-23 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (module_name): New overload.
* module.cc (dumper::impl::nested_name): Adjust module dump.
(module_name): New.
* error.c (dump_module_suffix): Dump for namespace-scope decl.
(dump_aggr_type): Dump module suffix.
gcc/testsuite/
* g++.dg/modules/adhoc-1_b.C: Adjust regexps.
* g++.dg/modules/err-1_[cd].C: Likewise.
* g++.dg/modules/macloc-1_[cd].C: Likewise
* g++.dg/modules/by-name-1.C: Adjust scans.
* g++.dg/modules/class-3_[bd].C: Likewise.
* g++.dg/modules/enum-1_a.C: Likewise.
* g++.dg/modules/global-[23]_a.C: Likewise.
* g++.dg/modules/indirect-[1234]_[bc].C: Likewise.
* g++.dg/modules/inst-[12]_[ab].C: Likewise.
* g++.dg/modules/part-3_c.C: Likewise.
* g++.dg/modules/scc-1.C: Likewise.
* g++.dg/modules/stdio-1_a.H: Likewise.
* g++.dg/modules/using-4_a.C: Likewise.
* g++.dg/modules/vmort-2_[abc].C: Likewise.
gcc/cp/
* module.cc (trees_{in,out}::tree_mergeable): Stream more for
specializations.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Don't stream template
instantiations.
(trees_{in,out}::tree_mergeable): Refactor.
(module_state::prepare_locations): Fix dumper.
gcc/cp/
* Make-lang.in: Wedge revision number into REVISISON_s.
Function instantiation merging
gcc/cp/
* cp-tree.h (get_module_owner): Add tpl_owner parm.
(match_mergeable_specialization): New.
* mangle.c (maybe_write_module): Look through template
instantiations.
* method.c (implicitly_declare_fn): Do not set owner here.
* module.cc (trees_out::tree_decl): Namespace-scope function
instantiations are merged.
(trees_in::tree_node): Likewise.
(trees_{in,out}::tree_mergeable): Allow instantiation merging.
(depset::hash::add_dependency): Specializations are unnameable.
(module_state::write_cluster): Seed specializations too.
(module_state::read_define): Fix size_t/unsigned mismatch.
(module_visible_instantiation_path): Use TYPE_STUB_DECL.
(get_module_owner): Add inst_owner_p arg. Look through
instantiation, or don't.
* pt.c (instantiate_template_1): Set module owner here.
(instantiate_decl): ... not here.
(match_mergeable_decl): New.
gcc/testsuite/
* lib/scanlang.exp (scan-lang-dump-times): New. Cut-paste fu!
* g++.dg/modules/inst-[12]_[ab].C: New.
* g++.dg/modules/adl-1_c.C: Comment.
* g++.dg/modules/indirect[234]_[bc].C: Adjust.
2019-04-12 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* Make-lang.in (MODULE_REVISION): New.
* module.cc (dumper::impl::nested_name): Print module number.
(module_state::write_readme): Write revision.
gcc/testsuite/
* g++.dg/modules/by-name-1.C: Adjust scans.
* g++.dg/modules/class-3_[bd].C: Likewise.
* g++.dg/modules/enum-1_a.C: Likewise.
* g++.dg/modules/global-[23]_a.C: Likewise.
* g++.dg/modules/indirect-[1234]_[bc].C: Likewise.
* g++.dg/modules/part-3_c.C: Likewise.
* g++.dg/modules/scc-1.C: Likewise.
* g++.dg/modules/stdio-1_a.H: Likewise.
* g++.dg/modules/using-4_a.C: Likewise.
* g++.dg/modules/vmort-2_[abc].C: Likewise.
gcc/cp/
* module.cc (dumper::impl::nested_name): Remove namespace owner
fiddling.
* name-lookup.c (make_namespace): Don't set owner. Adjust callers.
Ownership only on namespace-scope.
gcc/cp/
* module.cc (dumper::impl::nested_name): Show decl's ownership.
(trees_out::tree_decl): Remove unnecessary unnameable code.
(depset::hash::add_dependency): Add is_import parm.
(module_state::write_clister): Get owner decl of unnamed.
(get_module_owner): Always look at the namespace-scope entity.
(set_module_owner): Only set namespace-scope entity.
(set_implicit_module_owner): Likewise.
gcc/testsuite/
* g++.dg/modules/by-name-1.C: Adjust scans.
* g++.dg/modules/class-3_[bd].C: Likewise.
* g++.dg/modules/enum-1_a.C: Likewise.
* g++.dg/modules/global-[23]_a.C: Likewise.
* g++.dg/modules/indirect-[1234]_[bc].C: Likewise.
* g++.dg/modules/part-3_c.C: Likewise.
* g++.dg/modules/scc-1.C: Likewise.
* g++.dg/modules/stdio-1_a.H: Likewise.
* g++.dg/modules/using-4_a.C: Likewise.
* g++.dg/modules/vmort-2_[abc].C: Likewise.
2019-04-11 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* mangle.c (decl_is_template_id): Rename to ...
(maybe_template_info): ... here. Simplify API.
(mangle_return_type, write_encoding, write_name)
(write_nested_name, write_prefix, write_template_prefix)
(write_unqualified_name): Update all callers.
gcc/cp/
* module.cc (module_for_{ordinary,macro}_loc): New.
(module_state::{read,write}_location): Deal with imported locations.
gcc/cp/
* module.cc (depset::entity_kind_name): Tweak.
(trees_{in,out}::tree_mergeable): Frob context.
* name-lookup.h (match_mergeable_decl): Pass context explicitly.
* name-lookup.c (match_mergeable_decl): Pass context explicitly.
gcc/testsuite/
* g++.dg/modules/global-[23]_a.C: Adjust scans.
* g++.dg/modules/stdio-1_a.H: Likewise.
gcc/cp/
* module.cc (loc_kind): New.
(module_state::{read,write}_location): Use tagging, compress macro
& adhoc better.
gcc/cp/
* module.cc (loc_spans): Main span is all but reserved.
(slurping): Drop pre_early_ok.
(loc_spans::init): Don't push command line and forced header
spans.
(loc_spans::macro): Fix comparison thinko.
(module_state::read_location): No such thing as early.
(module_state::prepare_locations): Drop command line and forced
header handling.
(maybe_add_macro): Ignore lazy macros.
(canonicalize_header_name): Return the buffer.
gcc/testsuite/
* g++.dg/modules/macro-5_c.C: Adjust regexp.
2019-04-10 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_preprocess): Module partitions always produce
a BMI.
gcc/testsuite/
* g++.dg/modules/dep-2.C: New.
gcc/cp/
* module.cc (module_state::write_cluster): Remove unnecessary
check & FIXME.
gcc/cp/
* module.cc (trees_out::depending_p): Delete.
(trees_out::tree_decl): Refactor asserts.
(module_state::write_cluster): Refactor initial scan.
libcpp/
* mkdeps.c (deps_add_module): Swap primary & module args. Too
confusing.
gcc/cp/
* module.cc (module_state::do_import, module_preprocess)
(finish_module_processing): Adjust.
2019-04-09 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (slurping): Move {ordinary,macro}_locs to ..
(module_state): ... here.
(module_state::read_location): Adjust.
(module_state::read_locations): Adjust, recorded locations are for
current TU.
gcc/cp/
* module.cc (get_module): Add parent option, use it.
(module_state::read_{imports,partitions}): Adjust.
(finish_module_processing): Show full module name on error.
gcc/testsuite/
* g++.dg/modules/ben-1{_[ab].C,.map}: New.
* g++.dg/modules/alias-1_f.C: Use [srcdir].
* g++.dg/modules/gc-2_a.C: Likewise.
* g++.dg/modules/inc-xlate-1_d.C: Likewise.
* g++.dg/modules/legacy-6_[cdef].C: Likewise.
* g++.dg/modules/map-1_[ab].C: Likewise.
gcc/cp/
* module.cc (depset::is_imported_entity): New.
(module_for_unnamed): Delete.
(depset::hash::add_dependency): Note imported dependencies.
(module_state::{read,write}_cluster): Deal with imported unnamed.
(module_state::write): Skip imported dependencies.
gcc/testsuite/
* g++.dg/modules/vmort-2_[abc].C: New.
libcpp/
* mkdeps (munge): Quote ':'.
(deps_add_module): Correct partion/module order.
(make_write): Add .c++m suffix to module name.
gcc/testsuite/
* g++.dg/modules/dep-1_[ab].C: New.
libcpp/
* mkdeps (mkrules::~mkrules): Use free appropriately.
gcc/
* doc/invoke.texi (C++ Module Mapper): Fix markup.
gcc/cp/
* cp-tree.h (language_function): Remove x_auto_return_pattern.
(current_function_auto_return_pattern): Delete.
(FNDECL_USED_AUTO): Correct documentation.
* decl.c (save_function_data): Delete.
(fndecl_declared_return_type): Don't look at language_function.
(start_preparsed_function): Replace
current_function_auto_return_pattern with
DECL_SAVED_AUTO_RETURN_TYPE.
(finish_function): Likewise.
* mangle.c (write_unqualified_name): Likewise.
* parser.c (cp_parser_jump_statement): Likewise.
* typeck.c (check_return_expr): Likewise.
2019-04-08 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (unnamed_ary, unnamed_map_t, unnamed_map): New.
(struct slurping): Delete unnamed, alloc_unnamed, & deletion of
same.
(struct moduls_state): Add unnamed_lwm, unnamed_num.
(module_for_unnamed): New.
(dumper::impl::nested_name): More informative unnamedness.
(module_state::read_cluster): Use the unnamed_ary.
(module_state::read_unnamed): Populate unnamed_ary.
({init,finish}_module_processing): Adjust.
gcc/testsuite/
* g++.dg/modules/indirect-4_[bc].C: Adjust scans.
gcc/cp
* cp-tree.h (struc mc_slot): Move to ...
* name-lookup.h: ... here.
* module.c (depset::hash::{add_mergeable,connect}): Use depsets
not decls.
(depset::tarjan::connect): Add for_mergeables parm.
(tree_node::{mark,tree}_mergeable): Likewise.
(module_state::sort_mergeables): Likewise,
(module_state::{read,write}_bindings): Return/expect number of
bindings.
(module_state::write_macros): Return number of macros.
(module_state::write_cluster): Adjust.
(module_state::{read,write}_config): Adjust.
(module_state::{read,write}): Adjust.
2019-04-03 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (dumper): Add CLUSTER.
(module_state::write): Dump cluster information.
gcc/cp/
* module.cc (node_template_info): Move earlier, protect from
partial read in.
(dumper::impl::nested_name): Dump template args.
gcc/testsuite/
* g++.dg/modules/indirect-[234]_[abc].C: Adjust scans.
gcc/cp/
* module.cc (module_state::write_cluster): Refactor.
gcc/cp/
* module.cc (cluster_tag): Remove ct_defn.
(module_state::{read,write}_cluster): Definitions marked via flag.
gcc/cp/
* module.cc (depset::hash): Rename mergeables flag to mergeable_dep.
2019-04-02 Nathan Sidwell <nathan@acm.org>
Allow mapper protocol of file descriptors.
gcc/
* doc/invoke.texi (C++ Module Mapper): Document <> form.
gcc/cp/
* module.cc (module_mapper::module_mapper): Parse <> option.
Write bmi /after/ deferred instantiations.
gcc/cp/
* cp-tree.h (finish_module_processing): Add cpp arg.
(finish_module_parse): Delete.
* name-lookup.h (lookup_by_type): Declare.
* decl2.c (c_parse_final_cleanups): Adjust.
* module.c (tree_tag): Add tt_builtin.
(trees_out::tree_decl): Use tt_builtin for builtins.
(trees_in::tree_node): Likewise.
(finish_module_parse): Move processing into ...
(finish_module_processing): ... here.
* name-lookup.c (lookup_by_type): New.
gcc/testsuite/
* g++.dg/modules/builtin-1_[ab].C: New.
gcc/cp/
* module.cc (depset): Add EK_UNNAMED. Delete DB_IS_UNNAMED_BIT,
is_unnamed accessor.
(depset::hash::add_dependency): Add entity_kind arg, simplify
logic. Update callers.
gcc/testsuite/
* g++.dg/modules/using-4_a.C: Adjust scan.
2019-04-02 Ben Boeckel <ben.boeckel@kitware.com>
Nathan Sidwell <nathan@acm.org>
libcpp/
* mkdeps.c (mrules): Rename is_legacy to is_header_init, adjust uses.
(deps_add_module): Correctly duplicate and use strings.
2019-04-02 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset::add_dependency): Drop maybe_using arg.
Adjust callers.
(dumper::operator()): Overloads have a name.
(has_definition): Adjust.
2019-04-01 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset): Move flags into discriminator field. Adjust uses.
gcc/cp/
* module.cc (depset): Replace key wih entity/discriminator tuple.
Add entity_kind and disc_bits enums. Adjust hashing &
construction routines.
gcc/cp/
* module.cc (depset): Entity keying uses unique entity. Set
entity kind later.
(depset::hash): Adjust hashing.
(depset::hash::add_dependency): Set kind after insertion.
(depset::hash::add_mergeable): Adjust.
gcc/
* doc/invoke.texi: Fix module mapper thinko.
2019-03-29 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (saved_scope): Remove this_module field.
(current_module): Delete.
(module_import_bitmap): Rename to ...
(get_import_bitmap): ... here. Lose arg.
* module.cc (module_import_bitmap): Rename to ...
(get_import_bitmap): ... here. Lose arg.
* name-lookup.c (name_lookup::search_namespace_only): Adjust.
(check_module_override, finish_nonmember_using_decl): Likewise.
(do_push_to_top_level): Drop this_module field init.
2019-03-28 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* pt.c: Comment some structures.
gcc/
* doc/invoke.texi (C++ Modules): Update.
Merge trunk r269975.
2019-03-27 Nathan Sidwell <nathan@acm.org>
Header unit compilations retrofit includeness.
gcc/cp/
* cxx-mapper.c (module2bmi): Don't use PCH suffix.
* module.cc (module_header_macro, controlling_node): Delete.
(module_state::write_macros): Rely on cpp to determine controlling
macro.
(module_state::{write,read}): Likewise.
(module_begin_main_file): Retrofit as a header.
(finish_module_parse): Delete header_macro stuff.
libcpp/
* files.c (_cpp_stack_file): Set main_file.
(_cpp_find_header_unit): Close the file.
(cpp_retrofit_as_include): New.
(cpp_main_controlling_macro): New.
* include/cpplib.h (cpp_retrofit_as_include): Declare.
(cpp_main_controlling_macro): Declare.
* internal.h (struct cpp_buffer): Add main_file flag.
(cpp_in_primary_file): Use it.
gcc/testsuite/
* g++.dg/modules/{,sys/}inext-1.H: New.
* g++.dg/modules/macro-[23]_[abc].[CH]: Adjust.
* g++.dg/modules/modules.exp (dg-module-bmi): Adjust.
* g++.dg/modules/stdio-1_a.H: Asjust.
Expunge header name quoting in mapper
gcc/cp/
* cxx-mapper.cc (IS_HEADER_NAME): New.
(module2bmi): Adjust.
* module.cc (module_mapper::imex_query): Drop quotes.
(module_mapper::translate_include): Likewise.
gcc/testsuite/
* g++.dg/modules/modules.exp (dg-module-bmi): Adjust mapping.
Header unit names lack quotes
gcc/c-family/
* c.opt (fmodule-header): Set a var.
* cp-tree.h (module_map_header): Pass string as ptr/len tuple.
* lex.c (module_map_header): Move to module.cc.
(module_process_token): Remove gratuitous representation frobbing.
* module.cc (module_state::module_state): Assert no quotes.
(module_header_name): Delete.
(get_module): Detect header via pathism.
(module_mapper::imex_query): Add quotes.
(module_mapper::translate_include): Drop reader parms, don't push
buffer here.
(canonicalize_header_name): New, from lex.c.
(module_map_header): Wrapper for canonicalize_header_name.
(module_translate_include): Do buffer pushing here. Canonicalize
name.
(set_module_header_name): Delete.
(module_begin_main_file): Simplify header name setting.
(handle_module_option): Adjust header name flag setting.
* parser.c (cp_lexer_tokenize): Adjust header name mapping.
libcpp/
* lex.c (cpp_output_token): Add quotes back onto CPP_HEADER_NAME.
gcc/testsuite/
* g++.dg/modules/alias-3_[bc].C: Adjust.
* g++.dg/modules/leg-merge-4_c.C: Adjust.
* g++.dg/modules/macro-[2456]_[bcde].C: Adjust.
* g++.dg/modules/stdio-1_b.C: : Adjust.
* g++.dg/modules/sys: Add.
Header unit names are strings
gcc/cp/
* lex.c (module_map_header): Build string_cst.
(module_preprocess_token): Adjust.
* module.cc (module_state::module_state): Header names are
strings.
(module_name_hash): New.
(module_state_hash::{hash,equal}): Adjust.
(dumper::impl::nested_name): Fix string_cst.
(get_module): Tweak.
(module_state::set_flatname): Tweak.
(module_begin_main_file): Build string.
2019-03-26 Nathan Sidwell <nathan@acm.org>
gcc/c-family/
* c-opts.c (c_common_post_options): Invert sense of
cpp_read_main_file arg.
* parser.c (cp_parser_translation_unit): Reject include
translation in module purview.
libcpp/
* files.c (_cpp_stack_file): Take include type parm. Drop line
parm. Do line-table adjusting here ...
(_cpp_stack_include): ... not here.
* include/cpplib.h (cpp_read_main_file): Invert final parm.
* init.c (cpp_read_main_file): Adjust.
* internal.h (include_type): Add more enumerations, and document.
(_cpp_stack_file): Adjust prototype.
gcc/testsuite/
* g++.dg/modules/alias-2_[ab].[CH]: New.
* g++.dg/modules/exp-xlate-1_[ab].[CH]: New.
* g++.dg/modules/legacy-3_c.H: Robustify testing.
Header units disambiguated by originating header path
libcpp/
gcc/
* doc/invoke.texi (-fmodule-header): Adjust.
* langhooks.h (struct lang_hooks): Adjust preprocess hook.
gcc/cp/
* cp-tree.h (module_preprocess_token): Adjust.
(module_map_header): Declare.
(module_translate_include): Adjust.
* cxx-mapper.cc (module2bmi): Header units map to relative path.
(client::action): Look for header bmi.
* lex.c (module_map_header): New.
(module_preprocess_token): Remap header unit names.
* module.cc (create_dirs): Fix.
(module_mapper::translate_include): Adjust.
(module_translate_include): Likewise.
(finish_module_parse): Fix directory creation.
(handle_module_option): Remove fmodule-header=FOO handling.
* parser.c (cp_lexer_tokenize): Remap header unit names.
gcc/c-family/
* c-lex.c (c_lex_with_flags): Build a string for header names.
* c-ppoutput.c (scan_translation_unit): Allow preprocess hook to
nadger token.
* c.opt (fmodule-header=): Deprecate.
libcpp/
* directives.c (do_include_common): Move include translation to ...
* files.c (_cpp_file): Add header_unit field.
(should_stack_file): Break into ...
(is_known_idempotent_file): ... this, and ...
(has_unique_contents): ... this.
(_cpp_stack_file): ... do include translation.
(cpp_find_header_unit): New.
* include/cpplib.h (cpp_callbacks): Adjust translate_include hook.
(cpp_find_header_unit): Declare.
gcc/testsuite/
* g++.dg/modules/: Many changes.
2019-03-21 Nathan Sidwell <nathan@acm.org>
libcpp/
* files.c (struct _cpp_file): Make bools bitfields, add
header_unit flag.
(_cpp_find_file): Don't write for (; !fake;) to mean if (!fake)
for (;;).
(_cpp_stack_file): Refactor.
Merge trunk r269839.
gcc/
* gcc.c (execute): Use . not (.).
* params.def (PARAM_LAZY_MODULES): Add trailing .
gcc/testsuite/
* lib/prune.exp (prune_gcc_output): Adjust collect regexp.
gcc/
* gcc.c (execute): Frob argv[0] to show spawning from driver.
(process_command): Don't check input file exists here.
2019-03-20 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::mark_class_def): Skip friends in decl_list.
gcc/cp/
* module.cc (module_state::read_namespaces): Module-linkage
namespaces are visible in the module itself.
* name-lookup.h (add_imported_namespace): Rename parm.
* name-lookup.c (add_imported_namespace): Export_p becomes visible_p.
gcc/testsuite/
* g++.dg/modules/enum-3_[ab].C: New.
Enum members of templates part 2.
gcc/cp/
* module.cc (trees_out::tree_node): Any enum can be tt_enum_int.
(trees_out::mark_enum_def): Only mark integer_cst inits.
gcc/testsuite/
* g++.dg/modues/enum-2_[ab].C: Add.
Enum members of templates part 1.
gcc/cp/
* class.c (maybe_add_class_template_decl): No need to add
CONST_DECLs.
* pt.c (instantiate_class_template_1): CONST_DECLs are not on the
template decl list no more.
* module.cc (node_template_info): Cope with enum members of
templates.
(trees_in::insert): Allow null when failing.
(trees_{in,out}::core_vals): Uninstantiated enums have no
underlying type.
(trees_out::tree_decl): Enums can be members too.
(trees_out::write_class_def): Only announce when streaming.
(trees_out::mark_class_def): Don't mark const_decl fields.
(trees_out::mark_enum_def): Always mark the enum here.
gcc/testsuite.
* g++.dg/modules/enum-2_[ab].C: New.
2019-03-19 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset::hash::find_dependencies): It might be a fixed
tree.
gcc/testsuite/
* g++.dg/modules/stdns_[ab].C: New.
Using decls part 3.
gcc/cp/
* cp-tree.h (ovl_iterator::exporting_p): Simplify.
* name-lookup.c (do_nonmember_using_decl): Upgrade export in place.
gcc/testsuite/
* g++.dg/modules/using-4_[ab].C: New.
gcc/testsuite/
* g++.dg/modules/using-3.C: New.
Using decls part 2.
gcc/cp/
* cp-tree.h (OVL_EXPORT_P): New.
(ovl_iterator::exporting_p): New.
(ovl_insert): Change using_p arg type.
* tree.c (ovl_insert): USINGNESS parm conveys exporting too.
* name-lookup.c (do_nonmember_using_decl): Deal with exports.
* module.cc (binding_cmp): Sort usings too.
(module_state::{read,write}_cluster): Using decls too.
gcc/testsuite/
* g++.dg/modules/using-2_[abc].C: New.
gcc/cp/
* name-lookup.c (do_nonmember_using_decl): Cleanups.
(finish_nonmember_using_decl): Likewise.
2019-03-18 Nathan Sidwell <nathan@acm.org>
Using decls part 1.
gcc/cp/
* name-lookup.c (do_nonmember_using_decl): Unnest if.
(finish_nonmember_using_decl): Deal with module vector.
gcc/testsuite/
* g++.dg/modules/global-3_[ab].C: New.
gcc/cp/
* module.cc (module_state::{read,write}_locations): Cope with
trailing empty expansions.
gcc/cp/
* module.cc (module_state::{read,write}_locations): Macro maps can
have embedded zeroes.
gcc/cp/
* name-lookup.c (do_nonmember_using_decl): Add install & fn_scope
args.
(finish_nonmember_using_decl): Adjust, prep for modules.
gcc/testsuite/
* g++.dg/lookup/using53.C: Restore & extend DR36 errors.
2019-03-15 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (do_nonmember_using_decl): Have lookup passed in.
(validate_nonmember_using_decl): Delete. Absorb
into ...
(finish_nonmember_using_decl): ... here. Do lookup once.
lookup_enum_member): New. Broken out of ...
(get_binding_or_decl): ... here. Call it.
(finish_nonmember_using_decl): Drop LOOKUP parm. Do lookup here.
gcc/testsuite/
* g++.dg/cpp0x/using-enum-2.C: Adjust diagnostics.
* g++.dg/cpp0x/using-enum-3.C: Likewise.
* g++.dg/lookup/hidden-class9.C: Likewise.
* g++.dg/lookup/hidden-temp-class11.C: Likewise.
libstdc++-v3/
* testsuite/18_support/byte/global_neg.cc: Adjust diagnostics.
* testsuite/20_util/headers/type_traits/types_std_c++0x_neg.cc: Likewise.
* testsuite/26_numerics/headers/cmath/types_std_c++0x_neg.cc: Likewise.
* testsuite/27_io/headers/cstdio/functions_neg.cc: Likewise.
* testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc: Likewise.
* testsuite/29_atomics/headers/atomic/types_std_c++20_neg.cc: Likewise.
gcc/cp/
* name-lookup.h (finish_nonmember_using_decl): Drop LOOKUP parm.
* name-lookup.c (lookup_enum_member): New. Broken out of ...
(get_binding_or_decl): ... here. Call it.
(finish_nonmember_using_decl): Drop LOOKUP parm. Do lookup here.
* parser.c (cp_parser_using_declaration): Adjust.
* pt.c (tsubst_expr): Likewise.
gcc/testsuite/
* g++.dg/lookup/hidden-class9.C: Adjust diagnostics.
* g++.dg/lookup/hidden-temp-class11.C: Likewise.
libcc1/
* libcp1plugin.cc (plugin_add_using_decl): Adjust
finish_nonmember_using_decl call.
libstdc++-v3/
* testsuite/18_support/byte/global_neg.cc: Adjust diagnostics.
* testsuite/20_util/headers/type_traits/types_std_c++0x_neg.cc: Likewise.
* testsuite/26_numerics/headers/cmath/types_std_c++0x_neg.cc: Likewise.
* testsuite/27_io/headers/cstdio/functions_neg.cc: Likewise.
* testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc: Likewise.
* testsuite/29_atomics/headers/atomic/types_std_c++20_neg.cc: Likewise.
Merge using directive fields & fns.
gcc/cp/
* cp-tree.h (lang_decl_ns): Drop usings field.
(DECL_NAMESPACE_USING): Delete.
* name-lookup.h (finish_using_directive): Declare.
(finish_namespace_using_directive)
(finish_local_using_directive): Delete.
* name-lookup.c (name_lookup::search_usings)
(name_lookup::queue_namespace): Adjust.
(has_using_namespace_std_directive_p): No need to search
namespaces separately.
(finish_using_directive): New. Merged from ...
(finish_namespace_using_directive, finish_local_using_directive): ...
here. Delete.
(push_namespace): Adjust.
* parser.c (cp_parser_using_directive): Call finish_using_directive.
* pt.c (tsubst_expr): Likewise,
libcc1/
* libcp1plugin.cc (plugin_add_using_namespace): Call
finish_using_directive.
2019-03-14 Nathan Sidwell <nathan@acm.org>
Merge finish using decl fns
gcc/cp/
* name-lookup.c (finish_nonmember_using_decl): New, merged from ...
(finish_namespace_using_decl, finish_local_using_decl): ... here.
Delete.
* name-lookup.h (finish_nonmember_using_decl): Declare
(finish_namespace_using_decl, finish_local_using_decl): Delete.
* parser.c (cp_parser_using_declaration): Adjust.
* pt.c (tsubst_expr): Likewise.
libcc1/
* libcp1plugin.cc (plugin_add_using_decl): Likewise.
Drop cp_binding_level::usings
gcc/cp/
* name-lookup.h (cp_binding_level): Remove usings field.
* name-lookup.c (push_using_decl, push_using_decl_1): Delete.
(validate_nonmember_using_decl): Make using decl here.
gcc/cp/
* name-lookup.c (validate_nonmember_using_decl): Drop DR 36 case.
gcc/testsuite/
* g++.dg/lookup/using53.C: Permit DR 36 case.
Merge trunk r269682.
2019-03-13 Nathan Sidwell <nathan@acm.org>
Start doing something with using decls
gcc/cp/
* cp-tree.h (ovl_iterator): Add get_using accessor.
* module.cc (depset::is_using): New.
(depset::hash::add_dependency): Add maybe_using parm. Use it.
(depset::hash::add_binding): Deal with using decls.
(depset::hash::find_dependencies): Likewise.
(cluster_cmp): Likewise.
(module_state::{read,write}_cluster): Likewise.
gcc/testsuite/
* g++.dg/modules/using-1_[abc].C: New.
stdio.h can be a legacy unit!
gcc/testsuite/
* g++.dg/modules/stdio-1_[ab].[CH]: New.
* g++.dg/modules/global-2_[ab].C: New.
typedef struct {} foo; part 2
gcc/cp/
* module.cc (tt_anon_decl): New.
(trees_out::tree_decl): Deal with anonymous decls.
(trees_out::tree_type): Use TYPE_STUB_DECL.
(trees_in::tree_node): Deal with tt_anon_decl.
* name-lookup.c (get_lookup_ident): Assert not anonymous.
gcc/testsuite/
* g++.dg/modules/tdef-3_[ab].C: Extend.
* g++.dg/modules/tdef-3_c.C: New.
gcc/cp/
* module.cc (trees_out::tree_decl): Refactor named decl streaming.
(trees_in::tree_node): Remove as_base special casing.
* name-lookup.c (lookup_by_ident, get_lookup_ident): Handle
as_base here.
2019-03-12 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::tree_node): Refactor.
(module_state::write_cluster): Prefer non-anonymous name.
typedef struct {} foo; part 1
gcc/cp/
* module.cc (trees_out::tree_value): Cope with name-for-linkage.
(trees_out::write_class_def): Likewise.
(depset::hash::add_dependency): Likewise.
gcc/testsuite/
* g++.dg/modules/tdef-3_[ab].C: New.
gcc/cp/
* decl.c (fndecl_declared_return_type): Remove BMI FIXME.
* module.cc (trees_{in,out}::lang_decl_vals): Stream
saved_auto_return_type.
gcc/cp/
* tree.c (ovl_splice): Delete.
Kill DECL_SAVED_FUNCTION_DATA part 1
gcc/cp/
* cp-tree.h (lang_decl_fn): Replace saved_language_function with
saved_auto_return type.
(DECL_SAVED_FUNCTION_DATA): Delete.
(DECL_SAVED_AUTO_RETURN_TYPE): New.
* decl.c (duplicate_decls, start_preparsed_function): Adjust.
(save_function_data): Only save auto return type.
(finish_function): Drop DECL_SAVED_FUNCTION_DATA member zapping.
(fndecl_declared_return_type): Adjust.
* method.c (make_thunk, make_alias_for): Adjust.
gcc/cp/
* module.cc (writable_cmp): New.
(depset::hash::add_writables): Sort the hash before inserting.
gcc/cp/
* decl.c (fndecl_declared_return_type): Extend BMI hack.
* module.cc (tt_anon_id, tt_lambda_id): New.
(trees_{in,out}::tree_node): Stream them.
gcc/
* tree.c (make_anon_name): Drop format #.
2019-03-11 Nathan Sidwell <nathan@acm.org>
Anon entities never placed in symbol tables.
gcc/cp/
* module.cc (depset::hash::add_binding): Assert not anonymous.
* name-lookup.c (pop_local_binding): Popping anonymous is a NOP.
(do_pushdecl): Pushing anonymous doesn't push to symbol table.
gcc/testsuite/
* g++.dg/other/pr28114.C: Adjust errors.
gcc/
* tree.h (make_anon_name): Drop optional parm.
* tree.c (make_anon_name): Drop 'extra' parm.
gcc/cp/
* cp-tree.h (TYPE_LAMBDA_P): New, require a type.
(LAMBDA_TYPE_P): Refactor.
(TYPE_ANON_P): New.
(TYPE_UNNAMED_P): Use it, reject lambdas.
* class.c (add_implicitly_declared_members): Replace LAMDBA_TYPE_P
with TYPE_LAMBDA_P.
(finalize_literal_type_property, explain_non_literal_class)
(check_bases_and_members, finish_struct)
(current_nonlambda_class_type, maybe_note_name_used_in_class): Likewise.
* constexpr.c (check_constexpr_bind_expr_vars): Likewise.
* decl.c (cp_finith_decomp, grokdeclarator): Likewise.
* lambda.c (begin_lambda_type): Don't clear IDENTIFIER_ANON_P.
(lambda_function): Replace LAMBDA_TYPE_P with TYPE_LAMBDA_P.
(current_lambda_expr, resolvable_dummy_lambda)
(nonlambda_method_basetype): Likewise.
* mangle.c (decl_mandling_context, write_unqualified_name): Likewise.
(write_local_name): Simplify anon check.
* method.c (synthesized_method_walk): Replace LAMBDA_TYPE_P with
TYPE_LAMBDA_P.
(maybe_explain_explicit_delete): Likewise.
* parser.c (cp_parser_simple_type_specifier)
(cp_parser_parameter_declaration_clause)
(cp_parser_parameter_declaration)
(synthesize_immplicit_template_parm): Likewise.
* pt.c (template_class_depth, check_for_bare_parameter_packes)
(push_templated_decl_real, lookup_template_class_1)
(instantiate_class_template_1, tsubst_expr)
(tsubst_copy_and_build): Likewise.
* semantics.c (finish_this_expr, finish_member_declaration): Likewise.
* error.c (dump_aggr_type): Check for lambda before anonymous.
* cp-lang.c (cxx_dwarf_name): Treat all anonymous names anonymously.
2019-03-08 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.h (extract_module_binding): Return binding, not name.
* name-lookup.c (extract_module_binding): Return binding, not name.
* module.cc (depset::set_binding_name): New.
(depset::hash::add_binding): Drop name parm, check anon names
here.
(depset::hash::add_writables): Adjust extract_module_binding use.
gcc/cp/
* cp-tree.h (ovl_sort): Delete.
* name-lookup.h (extract_module_binding): Drop type_r parm.
* module.cc (depset::hash::add_binding): Drop type parm.
(depset::hash::add_writables): Adjust extract_module_binding API.
* name-lookup.c (extract_module_binding): Return name, valye by
reference. Don't sort.
* tree.c (ovl_sort): Delete.
Base lambda names off anonymous names.
gcc/cp/
* cp-tree.h (IDENTIFIER_LAMBDA_P): New.
(LAMBDA_TyPE_P): Key off name.
(TYPE_UNNAMED_P): Simplify.
(LAMBDANAME_PREFIX, LAMBDANAME_FORMAT): Delete.
(make_lambda_name): Delete.
* lambda.c (begin_lambda_type): Use make_anon_name.
* name-lookup.c (lambda_cnt, make_lambda_name): Delete.
2019-03-07 Nathan Sidwell <nathan@acm.org>
Commonize anonymous name generation.
gcc/
* tree.h (IDENTIFIER_ANON_P): New.
(anon_aggrname_p, anon_aggrname_format): Delete.
(make_anon_name): Declare.
* tree.c (anon_aggrname_p, anon_aggrname_format): Delete.
(make_anon_name): New.
* lto-streamer-out.c (DFS::DFS_write_tree_body): Use IDENTIFIER_ANON_P.
(hash_tree): Likewise.
* tree-streamer-out.c (write_ts_decl_minimal_tree_pointers): Likewise.
gcc/cp/
* cp-tree.h (TYPE_UNNAMED_P): Use IDENTIFIER_ANON_P.
(make_anon_name): Delete.
* class.c (find_flexarrays): Use IDENTIFIER_ANON_P.
* cp-lang.c (cxx_dwarf_name): Likewise.
* decl.c (name_unnamed_type, xref_tag_1): Likewise.
* error.c (dump_aggr_type): Likewise.
* name-lookup.c (anon_cnt, make_anon_name): Delete.
(consider_binding_level): Use IDENTIFIER_ANON_P.
* pt.c (push_template_decl_real): Likewise.
gcc/d/
* types.cc (fixup_anonymous_offset): Use IDENTIFIER_ANON_P.
(layout_aggregate_members): Use make_anon_name.
2019-03-06 Nathan Sidwell <nathan@acm.org>
Refactor all the things!
gcc/cp/
* module.cc: Tighten up access.
Refactor.
gcc/cp/
* module.cc (module_state): Reorder member fn definitions.
Refactor.
gcc/cp/
* module.cc (module_state::is_matching_decl): Moved to ...
(trees_in::is_matching_decl): ... here.
(trees_{in,out}::{mark,write,read}_*): Move earlier.
Refactor.
gcc/cp/
* module.cc (module_state::read_definition): Moved to ...
(trees_in::read_definition): ... here.
(module_state::is_skippable_defn): Move to ...
(trees_in::is_skippable_defn): ... here.
(module_state::read_{function,var,class,enum}_def): Move to ...
(trees_in::read_{function,var,class,enum}_def): ... here.
(module_state::read_binfos): Move to ...
(trees_in::read_binfos): ... here.
Refactor.
gcc/cp/
* module.cc (module_state::{write,mark}_definition): Move to ...
(trees_out::{write,mark}_definition): ... here.
(module_state::{write,mark}_{function,var,class,enum}_def): Move to ...
(trees_out::{write,mark}_{function,var,class,enum}_def): ... here.
(module_state::write_binfos): Move to ...
(trees_out::write_binfos): ... here.
(depset::hash::find_dependencies): Drop module_state parm.
Refactor.
gcc/cp/
* module.cc (module_state::{add_writables,find_dependencies}): Move
to ...
(depset::hash::{add_writables,find_dependencies}): ... here.
(depset::hash::get_work): Delete.
GMF pruning, Part 2
gcc/cp/
* module.cc (depset::hash): Rename flags fields.
(trees_out::tree_decl): Self references by dependency binding.
(depset::hash::add_dependency): Fix thinko.
(binding_cmp): New.
(depset::hash::finalize_dependencies): New.
(module_state::write): Adjust.
* name-lookup.c (extract_module_binding): The FIXMEs have become
irrelevant.
(get_binding_or_decl): Only imports for namespaces.
gcc/testsuite/
* g++.dg/modules/internal-1.C: Prune output.
* g++.dg/modules/mod-sym-2.C: Check GMF not discarded.
gcc/cp/
* module.cc (trees_out::trees_out): Add depset::hash parm.
(trees_out::depending_p): Invert streaming_p.
(module_state::write_cluster): Add depset::hash parm, adjust.
(trees_out::begin): Single ctor for both uses.
(trees_out::end): Don't clear dep_hash.
(module_state::find_dependencies): Adjust.
(module_state::write): Adjust.
Linkage promotion ban
GMF pruning, Part 1
gcc/cp/
* module.cc (depset::is_internal): New field.
(depset::hash): Add gmfs, & internals fields.
(depset::hash::add_dependency): Deal with gmf & internal.
(depset::hash::add_binding): Ignore GMF & internals here.
(module_state::write): Errors for referenced internals.
* name-lookup.c (get_binding_or_decl): Get globals.
gcc/testsuite/
* g++.dg/modules/internal-1.C: New.
* g++.dg/modules/namespace-[34]_[abc].C: Adjust.
2019-03-05 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (depset::hash::add_binding): Ignore internal-linkage
entities.
(module_state::add_writables): Don't walk anonymous namespaces.
gcc/testsuite/
* g++.dg/modules/unnamed-1_a.C: Adjust scan.
* g++.dg/modules/unnamed-2.C: Adjust scan.
gcc/cp/
* module.cc (depset::add_dependency): Drop kind arg, return void.
(depset::hash::add_binding): Set current during addition.
(module_state::add_writables): Tweak.
gcc/cp/
* module.cc (depset): Add refs_internal field. Replace decl_key
and defn_key with entity_key. Remove is_decl, add is_namespace.
Replace get_decl with get_entity.
2019-03-04 Nathan Sidwell <nathan@acm.org>
Merge trunk r269375.
GMF content locations
gcc/cp/
* parser.h (cp_token): Remove C compatibility macros. Add
main_source_p field.
* parser.c (cp_lexer_get_preprocessor_token): Set main_source_p
field.
(cp_lexer_before_phase_4): Rename to ...
(cp_lexer_not_macro): ... here. Drop main-file check.
(cp_parser_translation_unit): Emit main-file errors.
(cp_parser_{module,import}_declaration): Adjust.
gcc/testsuite/
* g++.dg/modules/global-1_a.C: Adjust.
* g++.dg/modules/mod-decl-3.C: Adjust.
* g++.dg/modules/mod-decl-5_b.C: Adjust.
* g++.dg/modules/mod-exp-1_b.C: Adjust.
* g++.dg/modules/mod-sym-2.C: Adjust.
* g++.dg/modules/namespace-2_a.C: Adjust.
* g++.dg/modules/static-1_a.C: Adjust.
* g++.dg/modules/token-1.C: Adjust.
* g++.dg/modules/token-2_b.C: Adjust.
* g++.dg/modules/token-3.C: Adjust.
* g++.dg/modules/token-4.C: Adjust.
* g++.dg/modules/token-5.C: New.
New # semantics for popping to "" name.
libcpp/
* directives.c (do_linemarker): Popping to "" name means fill in
the name.
gcc/testsuite/
* c-c++-common/cpp/line-1.c: New.
Cleanups.
libcpp/
* include/cpplib.h (struct cpp_hashnode): Drop C compatibility
macros. Correct bit calculation.
* include/line-map.h: Formatting.
* line-map.c (get_pure_location): Formatting.
gcc/cp/
* module.cc (declare_module): Deal with de-GMFing here, get name
of implicit header module.
* parser.c (enum module_preamble): New enum.
(cp_parser_translation_unit): Use it.
(cp_parser_{module,import}_declaration): Use it.
gcc/testsuite/
* g++.dg/modules/p0713-3.C: Adjust diags.
2019-03-01 Nathan Sidwell <nathan@acm.org>
Merge trunk r269321.
Merge trunk r269078 (metadata update).
Apply trunk r269078.
gcc/cp/
* module.cc (module_state::{read,write}_function_def): Adjust.
gcc/cp/
* cp-tree.h (struct constexpr_fundef): Moved from constexpr.c.
(register_constexpr_fundef): Adjust.
(find_constexpr_fundef): Replace with ...
(retrieve_constexpr_fundef): ... this.
* constexpr.c (struct constexpr_fundef): Moved to cp-tree.h
(constexpr_fundef_hasher): Constify.
(retrieve_constexpr_fundef): Make extern.
(find_constexpr_fundef): Delete.
(check_constexpr_fundef): Adjust.
(register_constexpr_fundef): Adjust API.
* module.cc (module_state::{read,write}_function_def): Adjust.
Merge trunk r269077.
gcc/cp/
* parser.c (cp_lexer_set_source_position_from_token): Revert.
2019-02-28 Nathan Sidwell <nathan@acm.org>
module & import-semi lexing rules
gcc/cp/
* parser.c (cp_lexer_tokenize): Fix EOF push.
(cp_lexer_before_phase_4): New.
(cp_lexer_set_source_position_from_token): Simplify.
(cp_parser_{module,import}_declaration): Check phase-4 requirements.
gcc/testsuite/
* g++.dg/modules/class-2_a.C: Do not #include
* g++.dg/modules/token-[123]*.C: New.
Remove eof_token
gcc/cp/
* parser.h (cp_token): Add tree_check_p, adjust GTY tagging.
(cp_lexer): Add saved_type, saved_keyword fields.
* parser.c (eof_token): Delete.
(cp_lexer_new_from_tokens): Overwrite EOF here.
(cp_lexer_destroy): Restore overwritten token here.
(cp_lexer_token_position, cp_lexer_previous_token_position): Simplify.
(cp_lexer_tokenize): Likewise.
(cp_lexer_peek_nth_token, cp_lexer_consume_token): Likewise.
(cp_lexer_purge_token, cp_lexer_purge_tokens_after): Likewise.
(cp_parser_nested_name_specifier, cp_parser_decltype)
(cp_parser_template_id): Set tree_check_p.
2019-02-27 Nathan Sidwell <nathan@acm.org>
__import in extern "C"
gcc/cp/
* parser.c (cp_lexer_tokenize): Add extern_c_depth arg, tokenize
through extern "C".
(cp_parser_translation_unit): Handle top-level extern "C".
(cp_parser_module_name): Force header unit.
(cp_parser_{module,import}_declaration): Adjust.
gcc/testsuite/
* g++.dg/modules/inc-xlate-1_[cd].C: New.
gcc/cp/
* cp-tree.h (import_module): Return bool.
* module.cc (import_module): Return is_header flag.
* parser.c (cp_parser_tokenize): Rename to ...
(cp_lexer_tokenize): ... this. Reimplement.
(cp_parser_import_declaration): Return is_header flag.
(cp_parser_translation_unit): Adjust lexer tokenization interaction.
2019-02-26 Nathan Sidwell <nathan@acm.org>
Flag_modules is strictly boolean.
gcc/c-family/
* c.opt (fmodules-ts): Allow negation.
gcc/cp/
* decl.c (duplicate_decls): Use modules_p.
* lex.c (module_preprocess_token): Use modules_p.
* parser.c (cp_parser_diagnose_invalid_type)
(cp_parser_translation_unit, cp_parser_tokenize): Likewise.
* module.cc (module_begin_main_file): Likewise.
(handle_module_option): Adjust.
gcc/
* doc/invoke.texi (fmodules-ts): Adjust.
Preprocess __import.
gcc/cp/
* cp-tree.h (import_module): Add extern C flag.
* lex.c (module_preprocess_token): Allow __import in extern-c
* module.c (import_module): Add extern C flag.
* parser.c (cp_parser_import_declaration): Adjust.
gcc/testsuite/
* g++.dg/modules/inc-xlate-1{.map,_[ab].H}: New.
Distinguished __import spelling.
gcc/c-family/
* c-common.c (c_common_reswords): Add __import spelling.
gcc/cp/
* module.cc (module_mapper::translate_include): Use __import.
gcc/testsuite/
* g++.dg/modules/legacy-[3456]*: Adjust.
* g++.dg/modules/map-2.C: Likewise.
Fix preprocessor tokenizing rules.
gcc/cp/
* lex.c (module_preprocess_token): Detect extern "C" {, tokenize
trailing attributes before importing header unit.
gcc/testsuite/
* g++.dg/modules/cpp-2_[abc].[CH]: Extend testing.
Fix interface partition export rules.
gcc/cp/
* module.cc (module_state::read_imports): Don't check partition
import/export here ...
(module_state::direct_import): ... or here ...
(module_state::write): ... but do it here.
gcc/testsuite/
* g++.dg/modules/part-2_[cd].C: Adjust.
* g++.dg/modules/part-2_e.C: New.
2019-02-22 Nathan Sidwell <nathan@acm.org>
gcc/
* doc/invoke.texi: Update modules documentation.
libcpp/
* mkdeps.h (deps_write): Add phony arg.
(deps_phony_targets): Delete.
* init.c (cpp_finish): Adjust deps_write call.
* mkdeps.c (mrules): Add quote_lwm member.
(munge): Just return static buffer.
(deps_add_target, deps_add_dep, deps_add_module): Store unmunged.
(write_name): Rename ...
(make_write_name): ... here. Maybe munge here.
(write_vec, deps_write): Rename to ...
(make_write_vec, make_write): ... here. Adjust.
(deps_write): New wrapper.
gcc/cp/
* cp-tree.h (init_module_processing): Add arg.
* decl.c (cxx_init_decl_processing): Adjust.
* module.cc (init_module_processing): Check preprocess sanity.
libcpp/
* mkdeps.c (deps_add_module): Allow empty bmi name.
(deps_write): Refactor. Add PHONY.
gcc/cp/
* cp-tree.h (module_preprocess): Declare.
* lex.c (module_preprocess_token): Have a proper state object,
register imports with dependency machinery.
* module.cc (module_preprocess_token): New.
(module_begin_main_file): Cope with just preprocessing.
2019-02-21 Nathan Sidwell <nathan@acm.org>
gcc/c-family/
* c.opt: Rename fmodule-legacy to fmodule-header
gcc/
* doc/invoke.texi: Update.
gcc/cp/
* cp-tree.h, module.cc, lang-specs.h, name-lookup.c, parser.c:
Rename.
gcc/testsuite/
* g++.dg/modules/: Likewise.
gcc/
* langhooks.h (struct lang_hooks): Adjust preprocess_token API.
gcc/cp/
* lex.c (module_preprocess_token): Adjust API.
* cp-tree.h (module_preprocess_token): Adjust API.
* module.cc (module_state::direct_import): Not fatal if preprocessing.
gcc/c-family/
* c-ppoutput.c (scan_translation_unit): Adjust preprocess_token
hook API.
2019-02-20 Nathan Sidwell <nathan@acm.org>
gcc/
* REVISION: Add [].
gcc/cp/
* Make-lang.in (MODULE_VERSION): Replace ...
(MODULE_STAMP): ... this. Adjust
* cxx-mapper.cc: Update.
* module.cc: Update version behaviour.
(module_state::do_import): Add dependency.
libcpp/
* mkdeps.c (mrules): Add dtor properly. Add modules.
(deps_write): Spew module deps.
2019-02-11 Nathan Sidwell <nathan@acm.org>
Merge trunk r268782.
Make dependencies
libcpp/
* include/cpplib.h (cpp_get_deps): Change type.
* include/mkdeps.h (struct deps): Rename to ...
(struct mrules): ... this. Adjust accessors.
(deps_add_module): Declare.
* internal.h (sttuct cpp_reader): Likewise.
* mkdeps.c (struct mrules): Rename from deps. Add module fields.
(munge): Allow concatenation.
(deps_add_module): New.
(write_name, write_vec): New, broken out of ...
(deps_write): ... this. Add module pieces.
gcc/
* module.cc: #include mkdeps.h.
(module_state::direct_import): Add module to dependencies.
(finish_module_parse): Set target dependency info.
gcc/c-family/
* c-opts.c (handle_deferred_opts): Adjust dep accessors.
gcc/fortran/
* cpp.c (gfc_cpp_add_dep, gfc_cpp_add_target, gfc_cpp_init): Adjust
dep accessors.
2019-02-08 Nathan Sidwell <nathan@acm.org>
libcpp/
* mkdeps.c (struct deps): Make more C++y. Update all uses.
2019-02-07 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_mapper::module_mapper): Fix local socket creation.
gcc/cp/
* c++-mapper.cc (module2bmi): Do not map dir separators.
gcc/testsuite/
* g+.dg/modules/modules.exp (decode_mod_spec): Likewise.
gcc/cp/
* module.cc (create_dirs): New.
(maybe_add_bmi_prefix): Add FORCE parm, adjust.
(finish_module_parse): Try and create intermediate dirs.
2019-02-05 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (finish_namespace_using_decl): Add assert + FIXME.
gcc/cp/
* cxx-mapper.cc (client::action): Add mapper agent.
* module.cc (module_mapper::handshake): Add mapper agent slot.
gcc/
* doc/invoke.texi (C++ Module Mapper): Update handshake.
gcc/cp/
* module.cc (module_state::read_locations): Make warning
development-only.
gcc/cp/
* module.cc (get_module_slot): New broken out of ...
(get_module): ... here. Call it.
(module_mapper::translate_include): Cope with file mapper.
gcc/testsuite/
* g++.dg/modules/map-2.{C,map}: New.
2019-02-01 Nathan Sidwell <nathan@acm.org>
Merge trunk r268456.
gcc/cp/
* decl.c (duplicate_decls): Accomodate anticipated fns.
* module.cc (set_module_owner): Adjust.
gcc/testsuite/
* g++.dg/modules/printf-1_[ab].[HC]: New.
2019-01-31 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (try_increase_lazy): Fix setrlimit call.
(init_module_processing): Fix getrlimit call.
gcc/cp/
* module.cc (init_module_processing): Dump even more config.
Tweak lazy limit.
Rework lazy limit handling.
gcc/cp/
* module.cc (lazy_limit, lazy_hard_limit, LAZY_HEADROOM): New.
(lazy_open): Invert sense, make unsigned. Adjust all uses.
(try_increase_lazy): New.
(module_state::freeze_an_elf): Call it first.
(init_module_processing): Adjust lazy_limit setting.
2019-01-30 Nathan Sidwell <nathan@acm.org>
ADL part 2
gcc/cp/
* cp-tree.h (LOOKUP_FOUND_P): Allow enumeral type.
* module.cc (module_visible_instantiation_path): Protect against
not modules.
* name-lookup.c (name_lookup::adl_enum): New.
(name_lookup::adl_type): Use it.
(name_lookup::adl_namespace): INST_PATH may be null.
(name_lookup::search_adl): Add partitions of types.
gcc/testsuite/
* g++.dg/modules/adl-[23]_[abc].C: New.
ADL part 1
gcc/cp/
* cp-tree.h (module_visible_instantiation_path): Declare.
* module.cc (module_visible_instantiation_path): Implement.
* name-lookup.c (name_lookup::add_module_fns): Delete.
(name_lookup::add_namespace_fns): Add visible bitmaps,
reimplement.
(name_lookup::search_adl): Get path of instantiation.
gcc/testsuite/
* g++.dg/modules/adl-1_[abc].C: New.
gcc/cp/
* name-lookup.c (name_lookup::adl_namespace_only): Delete.
(name_lookip::adl_{namespace,class}_fns): New.
(name_lookup::adl_{namespace,class}): Adjust.
(name_lookup::search_adl): Refactor.
2019-01-30 Iain Sandoe <iain@sandoe.co.uk>
gcc/cp/
* module.cc: Reorder includes.
* cxx-mapper.cc: Likewise.
gcc/testsuite/
* g++.dg/modules/fn-inline-1_{bc}.C: Adjust weak scan.
2019-01-30 Nathan Sidwell <nathan@acm.org>
gcc/
* doc/invoke.texi (C++ Modules): Add submenu.
2019-01-29 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (init_module_processing): Dump more config.
gcc/cp/
* module.cc (MAPPED_READING, MAPPED_WRITING): 0 or 1
(init_module_processing): Dump mapping behaviour.
2019-01-28 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_mapper::make): Drop options arg, look at
CXX_MODULE_MAPPER.
gcc/
* doc/invoke.texi (fmodule-mapper): Document env var.
(C++ Module Mapper): Likewise.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Lambda location.
* cp-objcp-common.c (cp_common_init_ts): Fix LAMBDA_EXPR marking.
* cp-tree.h (tree_lambda_expr): Save 8 bytes.
Merge trunk r268337.
2019-01-23 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Stream expression locii.
gcc/cp/
* cp-objcp-common.c (cp_common_init_ts): MARK_TS_EXP for tcc_statement.
gcc/cp/
* cp-objcp-common.c (cp_common_init_ts): MARK_TS_EXP for scope_ref
& noexcept_expr.
* module.cc (trees_{in,out}::core_vals): Rely on TS_EXP.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Adjust expression streaming.
Fix TS_CONTAINS_STRUCT for tcc_expression.
gcc/
(MARK_TS_EXP): New.
gcc/c-family/
* c-common.c (c_common_init_ts): Use MARK_TS_EXP. Mark
SIZEOF_EXPR.
gcc/cp/
* cp-objcp-common.c (cp_common_init_ts): MARK_TS_EXP for
tcc_expression nodes. Call c_common_init_ts.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Clean up enumeral type
handling.
(trees_out:tree_node, module_state::mark_enum_def): Use
SCOPED_ENUM_P.
gcc/cp/
* module.cc (tree_tag): Add tt_enum_int.
(trees_out::mark_node): Allow marking non-decls.
(trees_{in,out}::tree_node): Serialize enum values.
(module_state::mark_enum_def): Mark enum int_csts.
gcc/testsuite/
* g++.dg/modules/enum_1_[ab].C: Test serialization.
gcc/cp/
* module.cc (trees_in::finish_type): Don't speciual case
TYPE_PACKs.
* pt.c (template_parm_to_arg, coerce_template_parameter_pack)
(make_argument_pack, tsubst_template_args, tsubst)
(type_unification_real, unify_pack_expansion): Set
TYPE_STRUCTURAL_EQUALITY for type packs.
2019-01-22 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-objcp-common.c (cp_common_init_ts): Set TYPE_PACK_EXPANSION
and TYPE_ARGUMENT_PACK correctly.
* module.c (trees_in::finish_type): Special case pack types and
bound parms.
gcc/testsuite/
* g++.dg/modules/var-tpl-1_[ab].C: New.
gcc/cp/
* module.cc (tree_tag): Add tt_ptrmem_type.
(trees_{in,out}::core_vals): Don't scrog pointer's ptrmem cache.
(trees_out::tree_type): Stream pointers to member functions.
(trees_in::tree_node): Likewise.
gcc/testsuite/
* g++.dg/modules/nodes-1_[ab].C: More.
2019-01-18 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Stream tcc_reference,
baselink, static_assert, trait_expr.
gcc/testsuite/
* g++.dg/modules/nodes-1_[ab].C: New.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): Fix TYPE_CACHED_VALUES
handling. Stream ptrmem_cst. Note userdef_literals unreachable.
gcc/testsuite/
* g++.dg/modules/nodes-1_[ab].C: Add prememdata
gcc/cp/
* module.cc (module_state::{read,write}_locations): Fix macro
expansion compression.
2019-01-17 Nathan Sidwell <nathan@acm.org>
Enable partition entity merging.
gcc/cp/
* module.cc (depset::hash): Add mergeable flag.
(trees_out::{tpl_parms,tree_mergeable}): Protect from not
streaming.
(depset::hash::add_dependency): Deal with mergeablility.
(depset::hash::add_mergeable): New.
(depset::hash::connect): Adjust dump.
(module_state::write_cluster): Sort mergeables.
(module_state::find_dependencies): Deal with mergeability.
(module_state::sort_mergeables): New.
gcc/testsuite/
* g++.dg/modules/scc-1.C: Adjust scans.
* g++.dg/modules/part-3_[cd].C: Remove xfails.
gcc/cp/
* module.cc (trees_{in,out}::fn_parms): New.
(trees_{in,out}::tree_mergeable): Call them.
(cluster_cmp): Move earlier.
(depset::hash::connect): New, broken out of ...
(module_state::write): ... here. Call it.
2019-01-16 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_{in,out}::tree_mergeable): Allow non-implicit
typedefs.
gcc/testsuite/
* g++.dg/modules/leg-merge-9_[abc].[HC]: New.
Merge partition entities (disabled).
gcc/cp/
* module.cc (trees_{in,out}::tree_mergeable): Fold partitions.
(module_state::{read,write}_cluster): Register module entities.
gcc/testsuite/
* g++.dg/modules/part-3_[abcd].C: New.
gcc/cp/
* module.cc (dumper::GM): Rename to MERGE. Update uses.
gcc/cp/
* cp-tree.h (module_name): Replace FULL parm with primary pointer.
* error.c (dump_module_suffix): Adjust.
* module.cc (module_state::fullname): Rename to flatname.
(module_state::{get,set}_flatname): New. Use get_flatname.
(module_state::attach): Conditionally call set_flatname.
(get_module): Likewise.
(module_mapper::imex_query): Adjust.
(module_mapper::bmi_response): Likewise.
(module_state::write_readme): Adjust.
(module_state::{read,write}_config): Adjust name checking.
* name-lookup.c (make_namespace): Adjust anonymous name creation.
* ptree.c (cxx_print_decl): Adjust.
gcc/testsuite/
* g++.dg/modules/part-2_[cd].C: Adjust regex.
gcc/cp/
* cp-tree.h (module_name): Add FULL parm.
* module.cc (module_name): Check it and strip partitions if not.
* error.c (dump_module_suffix): Don't want full name.
2019-01-15 Nathan Sidwell <nathan@acm.org>
Merge trunk r267946.
Partition BMI folding, but not entity merging.
gcc/cp/
* cp-tree.h (get_module_owner): Mark PURE.
* module.cc (loc_spans::open): Add location parm.
(trees_out::{lang_decl_bools,tree_node_specific,tree_decl}): Account
for remapping.
(depset::hash::add_binding): Account for partitions.
(module_state::write_locations): Account for partitions.
(module_state::read_locations): Add partition spans to primary
interface.
(module_state::add_writables): Add partition bitmap arg. Adjust
extraction.
(module_state::write): Generate partition bitmap.
(module_state::read): Only read partitions on primary.
* name-lookup.h (extract_module_binding): Adjust parms.
* name-lookup.c (add_mergeable_decl): Break out from ...
(record_mergeable_decl): ... here. Call it.
(match_mergeable_decl): Likewise.
(check_mergeable_decl): Tweak.
(extract_module_binding): Examine partitions and merge.
* tree.c (ovl_sort): Simplify.
gcc/testsuite/
* g++.dg/modules/part-1_a.C: Adjust.
* g++.dg/modules/part-1_c.C: New.
2019-01-14 Nathan Sidwell <nathan@acm.org>
gcc/
* tree.h (cache_integer_cst): Add defaulted small parm.
* tree.c (cache_integer_cst): Add small parm, adjust.
gcc/cp/
* module.cc (trees_out::start): FIXED_CST are C only.
(trees_in::finish): Merge small INTEGER_CSTs.
(trees_{in,out}::core_bools): Don't write base.public_flag of types.
gcc/cp/
* module.cc (trees_out::start): Catch POLY_INT_CST, adjust
VECTOR_CST.
(trees_{in,out}::core_vals): Do TS_VECTOR.
* g++.dg/modules/literals-1_[ab].C: Add vector cst.
2019-01-11 Nathan Sidwell <nathan@acm.org>
String literals.
gcc/cp/
* module.cc (trees_{in,out}::core_vals): String literals (a NOP).
gcc/testsuite/
* g++.dg/modules/literals-1_[ab].C: Add string lit.
Real & complex literals.
gcc/cp/
* module.cc (bytes_{in,out}::buf): Void pointer
(trees_{in,out}::core_vals): Stream REAL_CST & COMPLEX.
gcc/testsuite/
* g++.dg/modules/literals-1_[ab].C: New.
gcc/cp/
* module.cc (get_module): Fix partition parsing.
(module_state::read_imports): Check interface import requirements.
(module_state::{read,write}_partitions): No need for exported.
(module_state::write_config): Write is_interface.
(module_state::direct_import): Check interface import
requirements.
(declare_module): Set interface_p, not exported_p.
* parser.c (cp_parser_module_name): Partitions only in non-legacy
module purview.
gcc/testsuite/
* g++.dg/modules/part-2_[abcd].C: New.
2019-01-10 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (module_not_legacy_p): New.
* module.cc (trees_out::tree_namespace): Rema namespace owner.
(tree_in::tree_node): Protect bogus tt_namespace.
* name-lookup.c (record_mergeable_decl): New.
(check_mergeable_decl): Namespaces are never overloaded.
(check_module_override): Add to mergeable list.
(do_pushdecl): Record mergeable.
(make_namespace_finish): Use check_mergeable_decl. Never add to level
(push_namespace): Add to level here.
gcc/testsuite/
* g++.dg/modules/indirect-1_b.C: Adjust dump scan.
gcc/cp/
* module.cc (finish_module_parse): Better location info on errors.
* name-lookup.c (name_lookup::search_namespace_only): Skip
partition slot too.
(check_module_override): Likewise.
(check_mergeable_decl): New broken out of ...
(match_mergeable_decl): ... here. Call it.
(reuse_namespace): Iterate over global slot.
* ptree.c (cxx_print_xnode): More cluster info.
2019-01-09 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_state::read_partitions): New.
(module_state::read_imports): Deal with elided partitions.
(module_state::write_partitions): Write more.
(module_state::read): Read partitions.
(module_state::direct_import): Deal with elided partitions.
(process_deferred_imports): Don't request known filenames. Avoid
double request.
gcc/testsuite/
* g++.dg/modules/atom-preamble-2_d.C: Check no duplicate.
gcc/
* doc/invoke.texi (C++ Modules): Update.
gcc/cp/
* module.cc (module_state::from_partition_p): New field.
(module_state::maybe_partition_name): New.
(module_state::{read,write}_imports): Adjust.
(module_state::write_partitions): New.
(module_state::remap_partitions): Delete.
(trees_out::tree_decl): Remap owner.
(module_state::write_readme): Adjust.
(module_state_config): Add imports and partitions fields.
(module_state::{read,write}_config): Adjust.
(module_state::write): Separate out hidden partitions. Adjust
import & partition writing.
(module_state::read): Adjust import reading.
gcc/testsuite/
* g++.dg/modules/import-1_c.C: Adjust scan.
* g++.dg/modules/mod-imp-1_c.C: Likewise.
2019-01-08 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cxx-mapper.cc (module2bmi): Update mapping
* module.cc (module_state::{maybe_defrost,freeze_an_elf}): Quote
filename..
gcc/testsuite/
* g++.dg/modules/modules.exp (decode_mod_spec): Update mapping.
* g++.dg/modules/freeze-1_d.C: Adjust scan-final.
* g++.dg/modules/import-2.C: Likewise.
* g++.dg/modules/mod-stamp-1_d.C: Likewise.
gcc/cp/
* module.cc (module_state::{interface_p,is_interface}): New.
(module_state::resolve_alias): Don't propagate exported_p here.
(module_state::write_readme): Show exportedness of imports.
(module_state::read_imports): Use resolve_alias.
(module_state::read_config): Set interface_p.
(module_state::read): Reformat.
(module_state::set_import): Correctly set imports.
(module_state::direct_import): Not here.
(declare_module): Set interface_p.
gcc/testsuite/
* g++.dg/modules/import-1_e.C: Adjust scan.
gcc/cp/
* module.cc (bytes_out::set_crc): Only set if crc_ptr != 0.
(module_state::write_readme): Update for partitions.
(module_state::{read,write}_config): Write exported_p for
partitions.
(finish_module_parse): Write partitions.
gcc/testsuite/
* g++.dg/modules/atom-decl-2.C: Adjust.
* g++.dg/modules/atom-pragma-3.C: Adjust.
* g++.dg/modules/mod-decl-1.C: Adjust.
* g++.dg/modules/mod-decl-3.C: Adjust.
gcc/cp/
* module.cc (module_state::direct_import): Add LAZY parm, use it
rather than legacy_p. Never expect a has_bmi file.
(declare_module): Always add to pending imports.
* parser.c (cp_parser_translation_unit): Expect a deferred import
for a legacy module.
gcc/cp/
* cp-tree.h (module_has_bmi_p): New.
* module.cc (module_state::{is_interface,interface_p}): Rename to ...
(module_state::{is_primary,primary_p}): ... here. Adjust users.
(module_state::read_cluster): Partitions need deduping too.
(declare_module): Set primary_p, partition_p.
(process_pending_imports): Adjust.
gcc/cp
* cp-tree.h (module_export_depth, module_purview): Replace with ...
(module_kind): ... this.
(MK_MODULE, MK_GLOBAL, MK_INTERFACE, MK_PARTITION, MK_EXPORTING): New.
(module_purview_p, not_module_p, module_legacy_p)
(module_interface_p, module_partition_p, module_global_p)
(module_exporting_p): Adjust.
(declare_module): Return bool.
* module.cc (module_export_depth, module_purview): Replace with ...
(module_kind): ... this.
(module_maybe_interface_p): Delete.
(module_state::direct_import, declare_module)
(module_begin_main_file, process_deferred_imports)
(finish_module_parse): Adjust.
* name-lookup.c (make_namespae): Use module_global_p.
* parser.c (cp_parser_module_declaration): Return bool. Deal with
GMF introducer.
(cp_parser_translation_unit, cp_parser_module_export): Adjust.
gcc/testsuite/
* g++.dg/modules/circ-1_d.C: Adjust.
* g++.dg/modules/mod-decl-1.C: Adjust.
* g++.dg/modules/mod-decl-5_b.C: Adjust.
* g++.dg/modules/p0713-3.C: Adjust.
2019-01-07 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cxx-mapper.cc (module2bmi): Don't map ':'.
* module.cc: Update design description.
gcc/testsuite/
* g++.dg/modules/modules.exp (decode_mod_spec): Don't map ':'
2019-01-03 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.h (match_global_decl): Rename to ...
(match_mergeable_decl): ... this. Add global/partition flag.
* name-lookup.c (match_global_decl): Rename to ...
(match_mergeable_decl): ... this. Adjust.
* module.cc: Rename mme to mergeable.
(trees_{in,out}::tree_mergeable): Stream global/partition
indicator. Call match_mergeable_decl.
gcc/cp/
* name-lookup.c (module_binding_slot): Break apart to ...
(search_imported_binding_slot, get_fixed_binding_slot)
(append_imported_binding_slot): ... these.
(fixed_module_binding_slot): Delete.
(do_pushdecl, match_global_decl, import_module_binding)
(set_module_binding, get_binding_or_decl, get_imported_namespace)
(reuse_namespace, make_namespace_finish)
(add_imported_namespace): Update for new API.
2019-01-02 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (module_binding_slot): Use FIXED parm.
gcc/cp/
* name-lookup.c (module_binding_slot): Add FIXED parm, adjust all
callers.
gcc/cp/
* module.cc: Rename gme -> mme, because partitions.
gcc/cp/
* cp-tree.h (DECL_MODULE_PURVIEW_P): Delete.
(MAYBE_DECL_MODULE_PURVIEW_P): Delete.
* mangle.c (maybe_write_module): Adjust.
gcc/testsuite/
* g++.dg/modules/legacy-8_[abcde].[CH]: New.
gcc/cp/
* cxx-mapper.cc (server): Workaround PR c++/88664.
Merge trunk r267509.
* module.cc, cxx-mapper.cc: Update copyright years.
2018-12-20 Nathan Sidwell <nathan@acm.org>
MODULE_VEC has alloc field too.
gcc/cp/
* cp-tree.h (MODULE_VECTOR_ALLOC_CLUSTERS): New.
(MODULE_VECTOR_NUM_CLUSTERS): Adjust.
(struct tree_module_vec): Adjust.
* tree.c (make_module_vec): Adjust.
* name-lookup.c (module_binding_slot): Extend vector if it fits.
* ptree.c (cxx_print_xnode): Cope with lazy module-vector slots.
gcc/cp/
* module.cc (module_state::check_read): Fix bogus note.
gcc/testsuite/
* g++.dg/modules/indirect-1_c.C: Add bogus note test.
gcc/cp/
* module.cc (module_state::remap): New member var.
(module_state::remap_partitions): New.
(module_state::write_imports): Skip partitions.
(module_state::write): Remap partitions.
2018-12-19 Nathan Sidwell <nathan@acm.org>
Partition parsing. Don't get excited!
gcc/cp/
* module.cc (get_module): Attach current module for null
partition.
* parser.c (cp_parser_module_name): Parse partitions
gcc/testsuite/
* g++.dg/modules/part-1_[ab].C: New.
2018-12-18 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (get_module): Add partition arg.
* module.cc (module_state): Add partition flag.
(module_state_hash): Hash & compare partition flag.
(module_state::mangle, get_module, attach): Add partition awareness.
gcc/cp/
* cp-tree.h (get_module): Default NULL parent.
* lex.c (module_preprocess_token): Adjust get_module call.
* module.cc (get_module, module_begin_main_file): Likewise.
* parser.c (cp_parser_module_name): Likewise.
gcc/cp/
* module.cc (trees_out::tree_decl): Remove some remaining
non-atomic template hacks.
gcc/cp/
* module.cc (module_state::write): Sort dependency table.
gcc/cp
* module.cc (module_cpp_undef): Don't zap undef hook if we don't
own it.
gcc/c-family/
* c-opts.c (c_common_init): Don't unilaterally clobber undef
callback.
* c-ppoutput.c (cb_undef): Call lang_hook if non-null.
gcc/testsuite/
* g++.dg/modules/dir-only-1.C: New.
Merge trunk r267229.
2018-12-17 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::{write,mark}_template_def): Delete.
(trees_out::{write,mark}_definition): Adjust.
(trees_in::read_template_def): Delete.
(trees_in::read_definition): Adjust.
Kill old broken global module merge code.
gcc/cp/
* module.cc (trees_in::finish): Remove DECL merging.
* name-lookup.c (merge_global_decl): Delete.
* name-lookup.h (merge_global_decl): Delete decl.
Atomic TEMPLATE_DECL + DECL_TEMPLATE_RESULT.
gcc/cp/
* module.cc (trees_out::mark_node): Remove temp tpl hack.
(trees_out::tree_decl): Remove tt_template remarking.
(trees_out::tree_value): Atomic TEMPLATE_DECL.
(trees_in::tree_node): Likewise.
(trees_out::{mark,read,write}_template_def): Move DECL_LIST to ...
(trees_out::{mark,read,write}_class_def): ... here.
(trees_{in,out}::tree_gme): Don't mark inner decl.
gcc/testsuite/
* leg-merge-8_[abc].[CH]: New.
Intermediate step to atomic TEMPLATE_DECL + DECL_TEMPLATE_RESULT.
Breaks leg-merge-7_c.C,
gcc/cp/
* module.cc (tree_tag): Add tt_template, tt_implicit_template.
(node_template_info): Not a member fn.
(trees_out::{mark_node,mark_gme}): Mark the template.
(trees_{in,out}::tree_decl): Do implicit_template.
2018-12-14 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (trees_out::node_template_info): New, broken out of
...
(trees_out::tree_decl): ... here. Use it.
gcc/cp/
* module.cc (trees_out::tree_decl): Adjust TEMPLATE_INFO access.
2018-12-13 Nathan Sidwell <nathan@acm.org>
Function template deduping
gcc/cp/
* module.cc (trees_{in,out}::tpl_parms): New.
(trees_out::mark_gme): Mark template result too.
(trees_{in,out}::tree_gme): Do templates.
(module_state::write_cluster): Any decl can be a GME.
* name-lookup.c (match_global_decl): Do template matching.
gcc/testsuite/
* g++.dg/modules/leg-merge-7_[abc].[HC]: New.
2018-12-04 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (slurping::remap): Heap allocate.
(gt_pch_nx): Delete hacks.
gcc/cp/
* module.cc (tree_tag): Replace tt_named_type with
tt_{primary,secondary}_type.
(trees_out::tree_type): Not recursive.
(trees_in::tree_node): Adjust tt_named_type case.
Class deduping
gcc/cp/
* module.cc (trees_in::tree_node): Record defn to skip.
(trees_in::is_skip{,pable}_defn): Fix int/long ptr const.
(module_state::read_{function,var,class}_def): Add skip checking.
gcc/testsuite/
* g++.dg/modules/leg-merge-6_[abc].[HC]: New.
TYPE streamed with its implicit typedef.
gcc/cp/
* module.cc (trees_in::reserve_gmes): Only 2 per.
(trees_in::{set,get}_backref_gme): Delete.
(trees_in::existing_gme): Rename to ...
(trees_in::is_existing_gme): ... this. Return bool.
(trees_out::mark_gme): Adjust assert.
(trees_in::insert): Add assert.
(trees_out::tree_type): Always look at typedef.
(trees_out::tree_value): Stream type with its decl.
(trees_in::tree_node): Likewise.
(trees_{in,out}::tree_gme): Adjust.
gcc/cp/
* module.c (module_state::{read,write,mark}_enum): Take DECL.
(module_state::{read,write,mark}_definition): Adjust.
gcc/cp/
* class.c (layout_class_type): Base type has same module as owner.
* module.c (module_state::{read,write,mark}_class): Take DECL.
(module_state::{read,write,mark}_definition): Adjust.
(topmost_decl, get_module_owner): Don't look at TYPE_CONTEXT.
gcc/cp/
* class.c (build_base_field_1): Refactor.
(layout_class_type): Give as_base type a name.
* decl.c (initialize_predefined_identifiers): Make as_base name
unpronouncable.
* module.cc (tree_tag): Delete tt_as_base.
(trees_out::mark_node): Don't expect fake base here.
(trees_out::tree_decl): Write fake base as pseudo-named.
(trees_out::tree_type): Don't handle fake base specially here.
(trees_in::tree_node): Read fake base as pseudo-named. Delete
tt_as_base handling.
(module_state::mark_class_def): Adjust.
gcc/cp/
* module.cc (trees_in): Rename bad_decls to skip_defns.
(trees_in::{record,is}_bad_decl): Delete.
(trees_in::{record,is,any}_skip_defn): New.
(module_state::is_ignorable_defn): Rename to ...
(module_state::is_skippable_defn): Key off namespace-scope decl.
(topmost_decl): New.
(module_state::read_function_def): Adjust.
2018-11-30 Nathan Sidwell <nathan@acm.org>
Merge trunk r266680.
gcc/cp/
* module.cc: Fix enums with trailing commas.
* name-lookup.c (match_global_decl): Avoid unused arg warning.
gcc/cp/
* module.cc (module_state::write_binfos): Binfo was not visited.
gcc/cp/
* module.cc (module_state::write_binfos): Always write number of
vbases.
(module_state::read_binfos): Don't smash the type here.
(module_state:{read,write}_class_def): Adjust binfo serializing.
gcc/cp/
* class.c (fixup_type_variants): Copy TYPE_SIZE & TYPE_SIZE_UNIT.
(finish_struct): Use fixup_type_variants for template.
* module.cc (trees_{in.out}::core_vals): Don't serialize TYPE_SIZE
and TYPE_SIZE_UNIT for classes.
(trees_in::finish_type): Don't layout clesses here.
(module_state::{read,write}_class_def): Do it here.
gcc/cp/
* module.cc (trees_in): Add bad_decls and post_decls.
(trees_in::{record,is}_bad_decl): New.
(trees_in::post_process): New.
(module_state::is_{matching_decl,ignorable_defn}): New.
(trees_in::tree_node): Use former.
(module_state::read_function_def): Use latter. Register for
post-processig.
(module_state::read_cluster): Post process.
2018-11-29 Nathan Sidwell <nathan@acm.org>
Merge global module function definitions.
gcc/cp/
* modules.cc (module_state::write_function_def): Don't rely on
decl's form.
(module_state::read_function_def): Allow multiple decls.
gcc/testsuite/
* g++.dg/modules/leg-merge-5_[abc].[CH]: New.
gcc/cp/
* modules.cc (module_state::check_read): Adjust, print inform of
outer location.
(module_state::write_cluster): defns are decls too.
(lazy_load_binding): Don't inform here.
gcc/testsuite/
* g++.dg/modules/leg-merge-4_c.C: Adjust regexps.
Fixing GME classes
gcc/cp
* module.cc (trees_in::tree_node_vals): Add specific bool arg,
adjust.
(trees_in::existing_gme): Return cookie.
(trees_in::{get,set}_backref_gme): New.
(trees_out::mark_gme): Mark typedef target.
(trees_out::tree_type): Don't be fooled by GME TYPE_NAME.
(trees_out::tree_value): Write GME type code.
(trees_in::tree_node): Use backref channel for typedefs.
gcc/testsuite/
* g++.dg/modules/leg-merge-4_c.C: Adjust.
Some ODR checking of GMEs
gcc/cp/
* module.cc (trees_in::tree_node): Check type of matched GME.
(lazy_load_binding): Add note if diagnostics emitted.
* name-lookup.c (name_lookup::search_namespace_only): Forward
iterate over slots.
(match_global_decl): Return close matches.
gcc/testsuite/
* g++.dg/modules/leg-merge-4_[abc].[CH]: New.
Global module var declaration merging.
gcc/cp/
* module.cc (trees_in::reserve_gmes): Add headroom.
(trees_{in,out}::tree_gme): Deal with VAR_DECLs.
(module_state::write_cluster): Likewise.
* name-lookup.c (match_global_decl): Likewise.
gcc/testsuite/
* g++.dg/modules/leg-merge-3_[abcd].[CH]: New.
Global module class declaration merging.
gcc/cp/
* module.cc (trees_in::start): Check code & category.
(trees_in::tree_node): Allow gme types. Refactor gme/node
reading.
(trees_{in,out}::tree_gme): Allow implicit typedefs.
(module_state::write_cluster): GME Implicit typedefs too.
* name-lookup.c (match_global_decl): Match TYPE_DECLs too.
gcc/testsuite/
* g++.dg/modules/leg-merge-2_[abc].[CH]: New.
2018-11-28 Nathan Sidwell <nathan@acm.org>
Global module function declaration merging.
gcc/cp
* module.cc (tree_tag): Add tt_gme.
(trees_in::gmes): New data member.
(trees_in::tree_node_specific): Add no-alloc flag.
(trees_in::{tree_gme,reserve_gmes,existing_gme}): New.
(trees_out::walk_kind): Add WK_gme.
(trees_out::{mark,tree}_gme): New.
(trees_out::{ref_node,insert}): Deal with WK_gme walk.
(trees_out::tree_{decl,value}): Likewise.
(trees_in::tree_node): Add tt_gme support.
(cluster_tag): Add ct_gme.
(module_state::{read,write}_cluster): Add gme support.
* name-lookup.h (match_global_decl): Declare.
(add_module_decl): Declare.
* name-lookup.c (match_global_decl): New.
(set_module_binding): Don't dedup here.
(add_module_decl): New.
gcc/testsuite/
* g++.dg/modules/leg-merge-1_[abcd].[CH]: New.
gcc/cp/
* modules.cc (trees_{in,out}::tree_node_bools): Break out
tree_node_specific.
(trees_out::ref_force_{lwm.hwm}): Delete.
(trees_out::gme_lwm): New.
(trees_out::insert): Change force to walk_kind.
(trees_out::mark_node): Drop walk_kind arg.
(trees_out::{,un}mark_trees): Adjust.
(trees_out::{mark_node,insert}): Adjust.
(trees_out::start): Drop CODE parm.
(trees_out::{ref_node,tree_ctx}): Adjust.
(trees_out::tree_value): Adjust.
(trees_{in,out}::tree_node): Likewise.
(module_state::write_binfos): Likewise.
(module_state::mark_{class,enum}_def): Adjust.
(module_state::{read,write}_cluster): Adjust.
(module_state::find_dependencies): Adjust.
2018-11-26 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* modules.cc (trees_{in,out}::tree_node_raw): Bifurcate to ...
(trees_{in,out}::tree_node_{bools,vals}): ... these.
(trees_out::tree_value): Adjust.
(trees_in::tree_node): Likewise.
gcc/cp/
* modules.cc (trees_out::tree_ref): Rename to ...
(trees_out::ref_node): ... this.
(trees_out::tree{value,decl,type,namespace}): Replace FORCE
paramenter with walk_kind.
(trees_out::tree_node): Adjust.
(module_state::mark_{class,enum,template}_def): Adjust.
(module_state::write_cluster): Adjust.
(module_state::find_dependencies): Adjust.
gcc/cp/
* modules.cc (trees_out::walk_kind): New enum.
(trees_out::tree_ref): Return it.
(trees_out::tree_{ctx,decl,node}): Use it.
gcc/cp/
* modules.cc (trees_out::ref_force_{lwm.hwm}): New ref values.
(trees_out::{,un}mark_trees): Use them.
(trees_out::{mark_node,tree_ref}): Likewise.
2018-11-20 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* modules.cc (dumper): Rename dump flags. Adjust throughout.
2018-11-19 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (handle_module_option): Handle OPT_fmodule_legacy.
gcc/testsuite/
* g++.dg/modules/modules.exp: Insert /./ in legacy names.
* g++.dg/modules/*.H: Adjust as necessary.
Merge trunk r266271.
2018-11-15 Nathan Sidwell <nathan@acm.org>
Merge trunk r266161.
gcc/
* doc/invoke.texi: Rename cookie->ident, people read too much into
'cookie'.
2018-11-07 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* parser.c (cp_parser_translation_unit): Refactor.
Implement d0924r1 (to be written).
gcc/cp/
* lex.c (init_reswords): Set D_CXX_MODULES mask.
* module.cc (declare_module): Check purview state.
* parser.c (cp_parser_translation_unit): Module and import are
always conditional.
(cp_parser_tokenize): Likewise.
gcc/
* doc/invoke.texi (fno-module-keywords): Delete.
gcc/c-family/
* c-common.c (c_common_reswords): Don't mark import, module for CXXWARN.
* c.opt (fmodule-keywords): Delete.
gcc/testsuite/
* g++.dg/modules/atom-decl-1.C: Delete.
* g++.dg/modules/keyword-1_[ab].C: Adjust.
g++.dg/modules/mod-decl-[13].C: Adjust.
g++.dg/modules/p0713-3.C: Adjust.
gcc/cp/
* cp-tree.h (module_gmf_p): Adjust.
(not_module_p): New.
* module.cc (declare_module): Don't deal with starting GMF.
* parser.c (cp_parser_translation_unit): Adjust module_purview
values.
2018-11-04 Nathan Sidwell <nathan@acm.org>
Implement Bjarne's suggested solution.
gcc/cp/
* parser.cc (cp_parser_translation_unit): No tentative parsing.
Look for following ::.
(cp_parser_module_{name,declaration,import}): Adjust.
(cp_parser_tokenize): Adjust, tokenize more.
gcc/
* doc/invoke.texi (C++ Modules): Update.
gcc/testsuite/
* g++.dg/modules/cpp-5_b.C: Update.
* g++.dg/modules/keyword-1_[ab].C: Likewise.
2018-11-02 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* modules.c (module_state::read): Interface can be lazy too.
gcc/cp/
* name-lookup.c (STAT_EXPORTS): Rename to ...
(STAT_VISIBLE): ... this.
(name_lookup::search_namespace_only, name_lookup::add_module_fns)
(check_module_override, set_module_binding): Adjust.
* module.cc (module_state::read_cluster): Likewise.
gcc/cp/
* cp-tree.h (module_may_redeclare): Declare.
* decl.c (duplicate_decls): Check moduleness.
* module.cc (module_state::read_cluster): Adjust export tail.
(module_may_redeclare): New.
* name-lookup.c (name_lookup::search_namespace_only): Check
STAT_TYPE_VISIBLE_P.
(update_binding): Allow NULL LEVEL.
(check_module_override): New.
(do_pushdecl): Deal with module overrides.
(set_module_binding): Adjust. Don't push interface bindings.
gcc/testsuite/
* g++.dg/modules/ambig-1_[ab].C: New.
* g++.dg/modules/macro-4_e.C: Avoid error.
* g++.dg/modules/namespace-2_b.C: Remove xfail.
gcc/cp/
* module.cc (module_state::read_cluster): Preserve export_tail.
* name-lookup.c (STAT_HACK_TYPE_VISIBILE_P): New.
(name_lookup::process_module_binding): Reimplement.
(name_lookp::search_namespace_only): Likewise.
(set_module_binding): Adjust when STAT_HACK_EXPORTS is set.
gcc/cp/
* decl.c (duplicate_decls): Refactor export check.
gcc/testsuite/
* g++.dg/modules/export-1.C: New.
gcc/cp/
* decl.c (duplicate_decls): Refactor checks.
* name-lookup.c (name_lookup::process_module_binding): Only pubic
namespaces are shared.
gcc/testsuite/
* g++.dg/lookup/crash6.C: Adjust error
* g++.dg/parse/crash38.C: Likewise.
2018-11-01 Nathan Sidwell <nathan@acm.org>
Merge trunk r265714.
Move to autoconf 2.69.
gcc/cp/
* module.cc (module_state::read): Don't read macros for
preprocessed innput.
(module_state::set_import): Adjust legacy test.
2018-10-31 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_state::check_not_purview): Check name.
(mangle_module, module_name): Likewise.
(declare_module): Set parent, not alias.
Merge trunk r265692.
Merge trunk r265679.
gcc/cp/
* cp-tree.h (OVL_EXPORT_P): Delete.
(OVL_DEDUP_P): Move to lang flag 0.
* module.cc (module_state::read_cluster): Don't set OVL_EXPORT_P.
* tree.c (ovl_copy): Don't copy OVL_EXPORT_P.
2018-10-30 Nathan Sidwell <nathan@acm.org>
Module interface gets own mod number
gcc/cp/
* cp-tree.g (ovl_iterator::set_dedup): New.
* module.cc (module_state::{interface_p,is_interface}): New.
(module_state::check_not_purview): Adjust.
(mangle_module, module_name): Likewise.
(module_state::read_cluster): Adjust.
(module_state::read): Adjust.
(module_state::{set_import,direct_import}): Adjust import setting.
(declare_module): Module interface gets number.
* name-lookup.h (set_module_binding): Add iface parameter.
* name-lookup.c (name_lookup::search_namespace): Fix indexing.
(set_module_binding): Insert interface decls.
gcc/testsuite/
* g++.dg/modules/namespace-4_b.C: Remove xfails.
* g++.dg/modules/static-1_b.C: Remove xfails.
gcc/cp/
* cp-tree.h (OVL_HAS_USING_P): Rename to ...
(OVL_DEDUP_P): ... here.
* name-lookup.c (name_lookup::add_overload)
(get_class_binding_direct): Adjust.
* tree.c (ovl_make, ovl_copy, ovl_insert, lookup_maybe_add): Adjust.
Less ordered overloads
gcc/cp/
* cp-tree.h (ovl_sort): Declare.
* name-lookup.h (extract_module_binding): Binding is reference.
* tree.c (ovl_insert): Don't sort non-hidden members.
(ovl_splice, ovl_sort): New.
* name-lookup.c (extract_module_binding): Binding is reference.
Sort the binding.
* ptree.c (cxx_print_xnode): Print MODULE_VEC name.
* module.cc (module_state::add_writables): Binding is reference.
gcc/testsuite/
* g++.dg/lookup/friend21.C: New.
2018-10-29 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (ovl_insert): Drop export_tail parm.
* name-lookup.c (update_binding): No need to track export_tail.
* tree.c (ovl_insert): Drop export_tail parm.
* ptree.c (cxx_print_xnode): Output formatting.
gcc/cp/
* module.cc (module_state::read_imports): Do in one pass.
gcc/cp/
* module.cc (module_state::direct_import): Drop DEFERRABLE arg.
({import,declare}_module): Deal with deferring here.
(process_deferred_imports): Adjust direct_import call.
2018-10-27 Nathan Sidwell <nathan@acm.org>
Merge trunk r265554.
2018-10-26 Nathan Sidwell <nathan@acm.org>
Anon namespaces
gcc/cp/
* module.cc (elf_out::strtab_write): Fallback to assembler name.
(elf_out::name): Allow 0 name.
(dumper::impl::nested_name): Fallback to assembler name.
(module_state::{read,write}_namespaces): Write assembler name for
anons.
* name-lookup.h (add_imported_namespace): add anon-name arg.
* name-lookup.c (get_imported_namespace): Look in current slot
too.
(make_namespace): Add anon-name arg, calculate as necessary.
(add_imported_namespace): add anon-name arg.
gcc/testsuite/
* gcc/testsuite/g++.dg/modules/namespace-4_[abc].C: New.
Statics on bindings
gcc/cp/
* module.cc (depset::hash::add_binding): Take overload and type
values, do pruning here.
(module_state::write_cluster): Reorder binding emission.
(module_state::read_cluster): Determine export_tail here.
(module_state::add_writables): Adjust.
* cp-tree.h (ovl_iterator::export_tail): Delete.
* name-lookup.h (extract_module_decls): Rename to ...
(extract_module_binding): ... here. Return overload set.
* name-lookup.c ( (extract_module_decls): Rename to ...
(extract_module_binding): ... here. Don't prune here.
(set_module_binding): Simplify.
(lookup_by_ident, get_lookup_ident): Simplify.
gcc/testsuite/
* g++.dg/modules/static-1_b.C: XFAIL error
* gcc/testsuite/g++.dg/modules/unnamed-1_[ab].C: Adjust scans.
* gcc/testsuite/g++.dg/modules/unnamed-2.C: Likewise.
gcc/cp/
* cp-tree.h (module_purview): Declare.
(module_purview_p, module_interface_p, module_gmf_p): Inline
predicates.
* module.cc (module_purview): Extern.
(module_purview_p, module_interface_p): Delete.
p1103 no implicit namespace export
gcc/cp/
* module.cc (trees_out::mark_node): Allow namespace marking.
(trees_out::tree_ctx): Namespaces may be forced.
(trees_out::tree_namespace): Reimplement.
(trees_out::tree_{type,decl}): Adjust tree_ctx calls.
(module_state::write_cluster): Likewise.
(module_state::{read,write}_namespace): Adjust.
(module_state::find_dependencies): Also walk namespaces.
* name-lookup.c (name_lookup::process_binding): Fixup hidden
namespaces.
(implicitly_export_namespace): New.
(do_pushdecl, push_namespace): Call it.
(add_imported_namespace): Add export_p arg, adjust.
* name-lookup.h (add_imported_namespace): Add export_p arg.
* ptree.c (cxx_print_node): Adjust MODULE_VEC printing.
gcc/testsuite/
* g++.dg/modules/indirect-1_b.C: Adjust scans.
* g++.dg/modules/namespace-[23].C: Split to ...
* g++.dg/modules/namespace-[23]_[ab].C: ... these.
2018-10-25 Nathan Sidwell <nathan@acm.org>
Rationalize bool ok == true
gcc/cp/
* module.cc (elf::has_error): Rename to ...
(elf::get_error): ... this. Update all callers.
(elf::end): Return true == ok. Update (indirect) callers.
(module_state::check_read): Likewise. Update callers.
(module_state::lazy_load): Zap slot on failure.
* name-lookup.c (get_binding_or_decl): No need to assert here.
gcc/cp/
* module.cc (module_state::write_readme): Tidy.
(module_state::{add_writables,find_dependencies): Dump
DEPENDENCIES.
(module_state::direct_import): Always pop dump.
* ptree.c (cxx_print_decl): Print DECL_MODULE_EXPORT_P.
gcc/c-family/
* c-ppoutput.c (scan_translation_unit): Remove unused var.
2018-10-24 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (enum tree_tag): Add tt_namespace.
(trees_out::tree_namespace): Use it.
(trees_in::tree_node): Grok it.
* name-lookup.h (get_imported_namespace): Declare.
* name-lookup.c (get_imported_namespace): New.
gcc/testsuite/
* g++.dg/modules/indirect-1_c.C: Adjust.
gcc/cp/
* module.cc (trees_out::{tree_{decl,type}): Drop owner arg.
(trees_out::tree_namespace): New.
(trees_out::ctx): Take owning-decl arg, use tree_namespace.
(trees_out::{core_vals,tree_binfo}): Adjust.
(trees_out::{read,write}_cluster): Adjust.
2018-10-23 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc: Add dumper::TREES to tree streamers.
gcc/testsuite/
* g++.dg/modules/: Add -uid to several lang dumps.
gcc/cp/
* module.cc (slurping::remap_module): New.
(depset::hash::add_binding): Don't deal with namespaces here.
(module_state::write_namespaces): No longer static. Write
locations.
(module_state::read_namespaces): Read locations.
(module_state::add_writables): Deal with namespaces here.
(module_state::find_dependencies): Don't walk namespaces.
* name-lookup.h (get_lookup_ident, find_by_ident): Reorder args,
update callers.
(add_imported_namespace): Add location arg.
* name-lookup.c (module_binding_slot): Fix initial alloc.
(extract_module_decls): Return namespace.
(get_binding_or_decl, lookup_by_ident, get_lookup_ident): Reorder
args.
(make_namespace): Add loc & module args.
(push_namespace): Adjust.
(add_imported_namespace): Adjust.
* ptree.c (cxx_print_decl): Avoid final linefeed.
(cxx_print_xnode): Adjust MODULE_VEC
gcc/
* doc/invoke.texi: Document -fdump-lang-module options.
gcc/testsuite/
* g++.dg/modules/namespace-2.C: Adjust.
2018-10-22 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (module_exporting_level): Delete.
(module_export_depth): Declare.
(module_exporting_p): New.
({push,pop}_module_export): Adjust, make inline.
* module.cc (export_depth): Replace with ...
(module_exporting_level): ... this.
({push,pop}_module_export): Delete.
(set_module_owner, import_module, module_begin_main_file)
(finish_module_parse): Adjust.
* parser.cc (cp_parser_module_export): Adjust.
gcc/cp/
* lex.c (module_preprocess_token): Fix padding/comment states.
* parser.c (cp_parser_tokenize): Reduce is_decl states.
2018-10-21 Nathan Sidwell <nathan@acm.org>
Merge trunk r265362.
Add -fno-module-keywords.
gcc/
* doc/invoke.text (fmodule-keywords): Document.
gcc/cp/
* lex.c (init_reswords): Don't add module keywords if
fno-module-keywords.
*module_preprocess_token): Adjust.
* module.cc (module_State_config:get_opts): Drop fmodule-keywords.
* parser.c (cp_parser_import_declaration): Allow to be tentative.
(cp_parser_translation_unit): Allow module & import to not be
keywords. Tentatively parse import declaration.
(cp_parser_module_keyword): Commit to tentative parse.
(cp_parser_tokenize): Allow import to not be a keyword.
gcc/testsuite/
* g++.dg/modules/keywords-1_[ab].C: New.
gcc/cp/
* lex.c (module_preprocessing_token): Pay attention to braces.
* parser.c (cp_parser_tokenize): Return ptr to stopping import.
Pay attention to CPP_HEADER tokenization.
(cp_parser_translation_unit): Adjust.
gcc/cp/
* parser.c (cp_parser_diagnose_invalid_type_name): Use C_RID_CODE
more.
2018-10-19 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* parser.c (cp_parser_tokenize): Don't stop after nested
module/import decl.
2018-10-18 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* parser.c (cp_parser_translation_unit): Adjust GMF deferred
imports.
(cp_parser_tokenize): Only pay attention to module/export at start
of decl.
gcc/cp/
* parser.c (cp_parser_translation_unit): Process deferred imports
here ...
(cp_parser_tokenize): ... not here.
gcc/testsuite/
* g++.dg/modules/macloc-1_d.C: Correct regexp.
Expunge -fmodules-atom as a thing.
gcc/
* doc/invoke.texi (fmodules-atom): Delete.
gcc/cp/
* cp-tree.h (modules_legacy_p): Adjust.
* module.cc: Expunge OPT_fmodules-atom.
gcc/c-family/
* c.opt (fmodules-ts): Adjust.
(fmodules-atom): Alias fmodules-ts
(fmodule-legacy*): Adjust.
gcc/testuite/
* g++.dg/modules/modules.exp (mode-list): Delete.
(main): Don't use mode-list.
* g++.dg/modules/: Add -fmodules-ts to many tests.
Remove ATOM as a distinction.
gcc/c-family/
* c-cppbuiltin.c (c_cpp_builtins): Remove __cpp_modules_{atom,ts}.
* c.opt (fmodules-ts): Adjust.
gcc/cp/
* cp-tree.h (modules_atom_p): Delete.
* module.cc (module_state::write_readme): Drop ATOM distinction.
(module_state::{read,write}_config): Likewise.
(init_module_processing): Drop atom distinction.
(handle_module_option): Adjust.
gcc/testsuite/
* g++.dg/modules/: Drop -fmodules-atom from all tests.
Simplify translate-include hook.
libcpp/
include/cpplib.h (cpp_translate_include_t): Delete.
(struct cpp_calbacks): Adjust translate_include decl.
gcc/
* langhooks.h (struct lang_hooks): Adjust preprocess_translate_include.
gcc/c-family
* c-opts.c (c_common_post_options): Adjust.
gcc/cp/
* cp-tree.h (maybe_import_include): Replace by ...
(module_translate_include): ... this.
* cp-lang.c (LANG_HOOKS_PREPROCESS_TRANSLATE_INCLUDE): Adjust.
* module.c (module_state::do_import): Check read on all top level
imports.
(do_translate_include): Rename to ...
(module_translate_include): ... this. Explicitly turn off.
(maybe_import_include): Delete.
Preamble on module
gcc/cp/
* parser.c (cp_parser_import_declaration): Always check past_preamble.
gcc/testsuite/
* g++.dg/modules/atom-norescan-1.C: Delete.
* g++.dg/modules/atom-pragma-1.C: Not atom-specific.
* g++.dg/modules/atom-pragma-3.C: Likewise.
* g++.dg/modules/atom-preamble-1.C: Likewise.
* g++.dg/modules/atom-preamble-2_a.C: Likewise.
* g++.dg/modules/atom-preamble-2_b.C: Likewise.
* g++.dg/modules/atom-preamble-2_c.C: Likewise.
* g++.dg/modules/atom-preamble-2_d.C: Likewise.
* g++.dg/modules/atom-preamble-2_e.C: Likewise.
* g++.dg/modules/atom-preamble-3.C: Likewise.
* g++.dg/modules/atom-preamble-4.C: Likewise.
* g++.dg/modules/mod-indirect-1_b.C: Adjust.
No export { import x; }
gcc/cp/
* parser.c (cp_parser_tokenize): Drop nested arg, adjust.
(cp_parser_translation_unit): Don't deal with outermost export { block.
gcc/testsuite/
* g++.dg/modules/err-1_a.C: Adjust.
* g++.dg/modules/err-1_c.C: Adjust.
* g++.dg/modules/import-1_c.C: Adjust.
* g++.dg/modules/mod-decl-1.C: Adjust.
No atom preamble in non-module
gcc/cp/
* parser.c (cp_parser_translation_unit): Preamble is tristate.
(cp_parser_module_name): Add FOR_MODULE arg, issue error.
(cp_parser_module_declaration): Adjust.
(cp_parser_import_declaration): Adjust twice.
gcc/testsuite/
* g++.dg/modules/atom-decl-[23].C: Adjust.
* g++.dg/modules/legacy-6_f.C: Remove XFAIL.
2018-10-17 Nathan Sidwell <nathan@acm.org>
gcc/testsuite/
* g++.dg/modules/err-2_[ab].*: Move to ...
* g++.dg/modules/cpp-5_[ab].*: ... here.
* g++.dg/modules/cpp5_c.C: New.
Robustify parse errors on module/import decls.
gcc/cp/
* parser.c (cp_parser_consume_semicolon_at_end_of_statement):
Return void.
(cp_parser_translation_unit): Adjust.
(cp_parser_{module,import}_declaration): Don't try and resync
here.
(cp_parser_tokenize): Deal with unprocessed incoming tokens.
gcc/testsuite/
* g++.dg/modules/err-2_[ab].*: New.
2018-10-16 Nathan Sidwell <nathan@acm.org>
Remove some atom/ts differences.
gcc/cp/
* module.cc (declare_module): Copy always.
* parser.c (cp_parser_translation_unit): Allo GMF under atom.
(cp_parser_module_name): Allow legacy name under ts
(cp_parser_initial_pragma): Fix from trunk.
gcc/testsuite/
* g++.dg/modules: Many changes.
gcc/cp/
* module.cc (module_purview): New.
(module_purview_p, module_interface_p): Use it.
(module_maybe_interface_p): New.
(module_state::direct_import): Use it.
(process_deferred_imports): Likewise.
(declare_module): Set it.
* parser.c (cp_parser_translation_unit): Inform modules of GMF.
gcc/testsuite/
* g++.dg/modules/macloc-1_[abcd].C: No longer atom-specific.
Locations for everyone!
gcc/cp/
* module.cc (loc_spans::{init,open,close}): Dump info.
(module_state::{read,write}_location): No longer atom-specific.
(module_state::{read,write}): Locations for everyone.
(process_deferred_imports): Open and close spans correctly.
gcc/testsuite/
* g++.dg/modules/adhoc-1_[ab].C: No longer atom-specific.
* g++.dg/modules/loc-1_[abc].C: Likewise.
* g++.dg/modules/loc-2_[abcdef].C: Likewise.
gcc/
* dumpfile.c (dump_switch_p_1): Don't let a '-' filename fool the
option machinery.
Legacy importing during -E
gcc/c-family/
* c-lex.c (init_c_lex): Don't use lang_hooks here.
* c-opts.c (c_common_init): Set them here.
gcc/cp/
* lex.c (module_preprocess_token): Enable legacy importing.
* module.cc (module_state::read): Skip items when preprocessing
only.
(module_cpp_undef): Adjust unsetting.
gcc/testsuite/
* g++.dg/modules/cpp-2_c.C: Adjust.
Remove token peeking & preamble related infrastructure.
libcpp/
* include/cpplib.h (cpp_relocate_peeked_tokens): Delete.
(cpp_peek_token_with_location): Delete.
(cpp_in_macro_expansion_p): Delete.
* directives-only.c (_cpp_preprocess_dir_only): Adjust
_cpp_handle_directive call.
* directives.c (struct if_stack): Drop hash_loc.
(PEEK_INVISIBLE): Delete.
(linemarker_dir): Adjust.
(_cpp_handle_directive): Drop hash_loc arg. dont set it.
(push_conditional): Drop hash_loc.
* init.c (read_original_filename): Adjust _cpp_handle_directive
call.
* internal.h (struct cpp_reader): Delete peeked_directive field.
(_cpp_handl_directive): Drop hash_loc arg.
* lex.c (cpp_relocate_peeked_tokens): Delete.
(cpp_peek_token): Swallow ...
(cpp_peek_token_with_location): ... this. Delete.
(_cpp_lex_token): Adjust _cpp_handle_directive call.
* macro.c (cpp_in_macro_expansion_p): Rename to ...
(cpp_in_macro_expansion): ... this. Make static.
* traditional.c (_cpp_scan_out_logical_line): Adjust
_cpp_handle_directive call.
gcc/testsuite/
* g++.dg/modules/*.H: Drop unnecessary -fmodules-atom option.
Reimplement preamble peeking
gcc/
* doc/invoke.texi (fmodule-preamble): Delete.
* langhooks-def.h (LANG_HOOKS_PREPROCESS_PREAMBLE): Replace with ...
(LANG_HOOKS_PREPROCESS_TOKEN): ... this.
* langhooks.h (struct lang_hooks): Replace preprocess_preamble
with preprocess_token.
c-family/
* c-ppoutput.c (scan_translation_unit): Adjust preprocess lang
hook.
* c.opt (fmodule-preamble, fmodule-preamble=): Delete.
gcc/cp/
* cp-lang.c (module_preamble_fsm): Delete.
(LANG_HOOKS_PREPROCESS_PREAMBLE): Delete.
(LANG_HOOKS_PREPROCESS_TOKEN): Override.
* cp-tree.h (enum module_preamble_state): Delete.
(module_preamble_prefix_{peek,next}): Delete.
(module_preprocess_token): Declare.
* lex.c (module_preamble_prefix_{peek,next}): Delete.
(module_preprocess_token): New.
* module.c (init_module_processing, handle_module_option): Drop
preamble option handling.
gcc/testsuite/
* g++.dg/modules/*: Many changes.
Remove preamble repeating.
gcc/cp/
* cp-tree.h (maybe_repeat_preamble): Delete.
* module.c (maybe_repeat_preamble): Delete.
* parser.c (cp_parser_initial_pragma): Revert to trunk.
* lex.c (modle_preamble_prefix_peek): Don't repeat preamble.
gcc/testsuite/
* g++.dg/modules/cpp-preamble-1.C: Adjust.
* g++.dg/modules/atom-preamble-1.C: Is now well formed.
Remove preamble peeking
gcc/cp/
* cp-tree.h ({import,declare}_module): return void.
(process_deferred_imports): Return void.
(module_state::direct_import): Return void, deferrable is
tristate. Push onto pending_import vector if permitted.
({import,declare}_module): Don't return adjustment, use
direct_import always.
(process_deferred_imports): Don't return adjustment.
* parser.c (cp_parser_module_declaration): Return void, drop first
arg.
(cp_parser_import_declaration): Return void.
(cp_parser_module_export): Don't deal with module declaration
here.
(cp_parser_get_module_preamble_tokens)
(cp_parser_parse_module_preamble): Delete.
(cp_parser_tokenize): Delete #ifdef'd adjustment code.
(c_parse_file): Don't peek preamble.
libcpp/
* line-map.c (linemap_module_restore): Don't calculate adjustment.
* include/line-map.h (linemap_module_restore): Return void.
Common tokenizer for atom & ts
gcc/cp/
* module.cc ({import,declare}_module): Don't defer legacy modules.
* parser.c (cp_parser_translation_unit): Deal with atom preamble.
(cp_parser_module_declaration): No need to check if first.
(cp_parser_tokenize): Enable filename token as needed.
(c_parse_file): Disable preamble scan.
gcc/testsuite/
* g++.dg/modules/alias-1_b.C: Adjust.
* g++.dg/modules/atom-pragma-1.C: Adjust
* g++.dg/modules/atom-pragma-2.C: Delete.
* g++.dg/modules/atom-preamble-2_e.C: Copy from 2_f.C
* g++.dg/modules/atom-preamble-2_f.C: Delete.
* g++.dg/modules/atom-preamble-[34].C: Adjust.
* g++.dg/modules/atom-rescan-1.C: Delete.
* g++.dg/modules/ice-1.C: Adjust
* g++.dg/modules/macro-2_c.H: Adjust
* g++.dg/modules/macro-3_b.H: Adjust
* g++.dg/modules/macro-3_c.C: Adjust
* g++.dg/modules/macro-6_b.C: Adjust
gcc/cp/
* cp-tree.h (process_deferred_imports): Drop location arg.
* modules.cc ({import,declare}_module): Disable eager imports.
(process_deferred_imports): Drop location arg, take it from the
deferred imports.
* parser.c (cp_parser_translation_unit): Process deferred imports.
(cp_parser_tokenize): Correct close-brace handling. Process
deferred imports.
(c_parse_file): Adjust prcess_deferred_imports call.
gcc/testsuite/
* g++.dg/modules/atom-preamble-1.C: More workarounds
gcc/cp/
* parser.c (cp_parser_translation_unit): Detect GMF here ...
(cp_parser_module_declaration): ... not here.
2018-10-15 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h ({import,declare}_module): Return adjustment.
* module.c (module_state::direct_import): Preserve line table,
return adjustment.
* parser.c (cp_parser_fill_main): Delete.
(cp_parser_tokenize): Take cp_token pointer, reorder check & push.
(cp_parser_translation_unit): Take cp_token pointer, call
cp_parser_tokenize.
(c_parse_file): Don't tokenize here.
gcc/cp/
* lang-specs.h: Fix .s elision with legacy modules.
gcc/
* langhooks.h (struct lang_hooks): Adjust preprocess_main_file
signature.
gcc/c-family/
* c-opts.c (push_command_line_include): Adjust
preprocess_main_file hook call.
(cb_file_change): Likewise.
gcc/cp/
* cp-lang.c (LANG_HOOKS_PREPROCESS_MAIN_FILE): Adjust.
* cp-tree.h (module_note_main_file): Rename to ...
(module_begin_main_file): ... here.
(maybe_begin_legacy_module): Delete.
* module.cc (declare_module): Remove legacy handling here.
(module_note_main_file): Rename to ...
(module_begin_main_file): ... here. Swallow ...
(maybe_begin_legacy_module): ... this.
(process_deferred_imports): We're already exporting for legacy
headers.
* parser.c (c_parse_file): Don't call maybe_begin_legacy_module.
gcc/cp/
* cp-tree.h (process_deferred_imports): New.
(module_preamble_load): Delete.
* module.cc (module_state::direct_import): Fatal error here.
(module_state::preamble_load): Delete, move into ...
(process_deferred_imports): ... here. Subsume ...
(module_preamble_load): ... this.
* parser.c (c_parse_file): Adjust.
gcc/testsuite/
* g++.dg/modules/atom-inc-1.C: Delete.
* g++.dg/modules/atom-inc-1_[abc].*: New.
* g++.dg/modules/import-2.C: Adjust.
gcc/cp/
* module.cc (module_state::direct_import): New.
({import,declare}_module): Call it.
(module_state::preamble_load): Likewise.
2018-10-12 Nathan Sidwell <nathan@acm.org>
libcpp/
* lex.c (cpp_peek_token_with_location): Fix pragma rewinding.
gcc/cp/
* parser.c (cp_parser_initial_pragma): Peek at first token.
Merge trunk r265127.
gcc/cp/
* parser.c (cp_parser_{module,import}_declaration): Remove temp hacks.
(cp_parser_translation_unit, cp_parser_parse_module_preamble): Adjust.
gcc/testsuite/
* g++.dg/modules/atom-decl-1.C: Adjust errors.
* g++.dg/modules/atom-preamble-1.C: Likewise. XFAIL.
* g++.dg/modules/mod-decl-1.C: Likewise,
* g++.dg/modules/p0713-[23].C: Likewise.
gcc/cp/
* parser.c (cp_parser_translation_unit): Deal with one level of
export block here.
(check_module_outermost): Delete.
(cp_parser_{module,import}_declaration): Don't call it.
(cp_parser_declaration): Don't deal with module or import decls.
gcc/testsuite/
* g++.dg/modules/mod-decl-[13].C: Adjust errors.
gcc/cp/
* parser.c (cp_parser_translation_unit): Detect module and import
declarations here.
Start breaking out toplevel parsing.
gcc/c-family/
* c.opt (Wlegacy-header): Delete.
gcc/
* doc/invoke.texi (Wlegacy-header): Delete.
gcc/cp/
* cp-lang.c (module_preamble_fsm): Don't call atom_preamble_end.
* cp-tree.h (atom_preamble_end): Delete.
* lex.c (module_preamble_prefix_peek): Drop Wlegacy_header check.
* module.cc (module_preamble_end_loc): Delete.
(do_translate_include): Always translate.
(maybe_import_include): Drop Wlegacy_header check.
(atom_preamble_end): Delete.
* parser.h (cp_parser): Drop implicit_extern_c.
* parser.c (cp_parser_tokenize): New.
(cp_debug_parser): Drop implicit_extern_c.
(cp_parser_new): Likewise.
(cp_parser_translation_unit): Move global module detectin here.
(module_preamble_end_loc): Delete declaration.
(in_preamble): Temp hack.
(cp_parser_{import,module}_declaration): A couple of temp hacks.
(cp_parser_parse_module_preamble): Manipulate in_preamble.
(cp_parser_toplevel_declaration): New, broken out of ...
(cp_parser_declaration_seq_opt): ... here, call it. Drop top_level arg.
(c_parse_file): Adjust.
gcc/testsuite/
* g++.dg/modules/atom-decl-[23].C: Adjust diags.
* g++.dg/modules/atom-preamble-[13].C: Likewise.
* g++.dg/modules/legacy-6_[df].C: Likewise.
2018-10-11 Nathan Sidwell <nathan@acm.org>
Merge trunk r265055.
Kill proclaiming decls
gcc/cp/
* cp-tree.h (push_module_export): Drop proclaiming arg.
* module.c (proclaimer): Delete.
({push,pop}_module_export): Adjust.
(maybe_begin_legacy_module, module_preamble_load): Adjust.
* parser.c (cp_parser_module_export): Adjust error.
(cp_parser_module_proclamation): Delete.
(cp_parser_declaration): Don't call it.
gcc/testsuite/
* g++.dg/modules/proclaim-1.C: Delete.
Macro locations! (ATOM only)
libcpp/
* internal.h (linemap_enter_macro): Move declaration to ...
* include/cpplib.h (linemap_enter_macro): ... here.
(linemap_lookup_macro_index): Declare.
* line-map.c (linemap_lookup_macro_index): Break out of ...
(linemap_macro_map_lookup): ... this. Use it.
gcc/cp/
* module.cc (loc_spans): Record macro spans.
(module_state::write_readme): Record controlling macro.
(module_state::{read,write}_location{s,}): Stream macro locations.
(module_state::write_readme): Move later.
gcc/testsuite/
* g++.dg/modules/macloc-1_[abcd].C: New.
Merge trunk r265037.
2018-10-10 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (loc_spans::close): Close the current last map.
(module_state::prepare_locations): Adjust.
(module_state::preamble_load): Adjust span closing.
(finish_module_parse): Likewise.
gcc/cp/
* module.cc (pending_imports): New.
({import,declare}_module): Use it.
(module_from_cmp): Delete.
(module_state::preamble_load): Use pending_imports array.
gcc/
* doc/invoke.texi (fmodule-legacy): Augment syntax.
gcc/cp/
* module.cc (module_controlling_macro): Replace with ...
(module_legacy_macro): ... this.
(module_state::{read,write}_config): Controlling macros only for
legacy mode.
(set_module_legacy_name): New.
(maybe_begin_legacy_module, handle_module_option): Use it.
(init_module_processing, finish_module_parse): Adjust.
gcc/c-family/
* c.opt (fmodule-macro): Delete.
gcc/testsuite/
* g++.dg/modules/alias-1_a.H: Fix.
* g++.dg/modules/legacy=0[ab].H: Adjust.
* g++.dg/modules/alias-2_*: New.
gcc/cp/
* module.cc (module_state::controlling_macro): Delete.
(module_state_config): New struct.
(module_state::{read,write}_config): Wrap args in a struct.
(get_option_string): Move into module_state_config.
(module_state::write_macros): Adjust.
(module_state::{read,write}): Adjust.
gcc/cp/
* module.cc (module_state::{read,write}_defines): Rename to ...
(module_state::{read,write}_macros): ... here.
(module_state::{read,write}): Cope with legacy aliases.
(finish_module_parse): Install initialized controlling macro.
gcc/testsuite/
* g++.dg/modules/alias-1_[cdef].C: New.
2018-10-09 Nathan Sidwell <nathan@acm.org>
Lazy macro table loading
gcc/cp/
* module.cc (struct slurping): Add macro_tbl, rename macros to
macros_def.
(slurping::~slurping): Release macro_tbl.
(module_state::{read,write}_config): Replace macro count with
boolean.
(module_state::{import,install}_defines): New.
(module_state::read_defines): Map in the table, don't read it.
(module_state::{check_read,freeze_an_elf}): Adjust.
(import_module, module_state::preamble_load): Use install_defines.
gcc/testsuite/
* g++.dg/modules/macro-6_[abc].*: New.
Controlling macros & alias detection
gcc/cp/
* module.cc (cpp_node, identifier): Conversions between
cpp_hashnode and IDENTIFIER. Use them.
(data_in::no_more): Seek end.
(module_state::{resolve,is}_alias): New.
(module_state::read): Return alias.
(module_state::read_config): Initialize controlling macro,
determine alias.
(module_state::{read,write}_define): Allow unlocated macros.
(module_controlling_macro): New switch.
(module_state::{read_imports,do_import}): Deal with aliases.
(module_state::write_config): Write controlling macro.
(module_state::write_defines): Deal with controlling macro.
(module_state::preamble_load): Deal with aliases.
(finish_module_parse): Process explicit controlling macro.
gcc/testsuite/
* g++.dg/modules/alias-1*: New.
* g++.dg/modules/macro-[234]*: Adjust.
* g++.dg/modules/only-[23].C: Adjust.
libcpp/
* include/cpplib.h (HT_NODE,NODE_LEN,NODE_NAME): Adjust.
(cpp_set_deferred_macro): Add defaulted forced arg.
2018-10-05 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.cc (module_state::deferred_macro): Print macro
definition.
gcc/testsuite/
* g++.dg/modules/macro-2_d.C: Adjust regexps.
* g++.dg/modules/macro-4_[de].C: Likewise.
* g++.dg/modules/macro-5_c.C: Likewise.
libcpp/
* include/cpplib.h (cpp_macro_definition): Add overload.
(cpp_macro_definition_location): Make inline, adjust.
* macro.c (get_deferred_or_lazy_macro): New, broken out of ...
(_cpp_notify_macro_use): ... here. Call it.
(warn_of_redefinition): Call it.
(cpp_macro_definition): Split into two overloads. Deal with
deferred macros.
(cpp_macro_definition_location): Delete.
gcc/cp/
* module.cc (module_state): Add controlling_macro, unionize slurp
with alias. Add accessors. Use them.
(module_state::{read,do_import,read_config}): Drop check_crc arg.
(module_state::read_imports): Zap direct_p before importing.
Use 'include translation' terminology.
gcc/c-family/
* c-opts.c (c_common_post_options): Adjust.
gcc/cp/
* cp-lang.c (LANG_HOOKS_PREPROCESS_TRANSLATE_INCLUDE): Override.
* cp-tree.h (maybe_import_include): Adjust return type.
* module.cc (module_mapper::translate_include): Replace ...
(module_mapper::divert_include): ... this.
(do_translate_include): Replace ...
(do_divert_include): ... this.
(maybe_import_include, atom_preamble_end): Adjust.
gcc/
* langhooks-def.h (LANG_HOOKS_PREPROCESS_DIVERT_INCLUDE): Replace
with ...
(LANG_HOOKS_PREPROCESS_TRANSLATE_INCLUDE): ... this.
* langhooks.h (struct lang_hooks): Replace
preprocess_divert_include with preprocess_translate_include.
libcpp/
* directives.c (do_include_common): Adjust.
* include/cpplib.h (cpp_divert_include_t): Rename to ...
(cpp_translate_include_t): ... this.
(struct cpp_callbacks): Replace divert_include with translate_include.
Mainfile loc has no line number.
libcpp/
* internal.h (_cpp_stack_file): Add line_one_p arg.
* files.c (_cpp_stack_file): Likewise. Use it.
* include/cpplib.h (cpp_read_main_file): Add line_one_p arg.
* init.c (cpp_read_main_file): Likewise, use it.
gcc/c-family/
* c-opts.c (c_common_post_options): Start main file on line zero.
(push_command_line_include): Call preprocess_main_file hook here ...
(cb_file_change): ... except when reading preprocessed source.
* c.opt: Add full stops.
gcc/cp/
* module.cc (module_note_main_file): Remove fixmes fixed yesterday.
gcc/testsuite/
* g++.dg/modules/macro-4_[de].C: Adjust regexp.
* g++.dg/modules/macro-5_c.C: Likewise.
* lib/options.exp (check_for_options): Fix comment typos.
2018-10-04 Nathan Sidwell <nathan@acm.org>
Dump command line macros, better command line locs
libcpp/
* include/cpplib.h (cpp_force_token_locations): Take location, not
pointer.
* internal.h (cpp_reader): Replace forced_token_location_p with
forced_token_location.
* init.c (cpp_create_reader): Adjust.
* lex.c (_cpp_lex_direct, cpp_force_token_locations): Adjust.
(cpp_stop_forcing_token_locations): Adjust.
gcc/c-family/
* c-opts.c (c_finish_options): Force command line locations.
gcc/cp/
* module.cc (loc_spans::init): Add fixed and cmd line locs.
(loc_spans::SPAN_*): New.
(loc_spans::cmd_line): New.
(module_state::read_location): Adjust, return module loc for
UNKNOWN.
(module_state::{prepare,read,write}_locations): Adjust.
(maybe_add_macro): Write cmd_line macros.
(load_macros): Location is main source file.
gcc/fortran/
* cpp.c (gfc_cpp_init): Adjust token forcing.
gcc/testsuite/
* g++.dg/modules/macro-4_[de].C: Adjust regexp.
* g++.dg/modules/macro-5_*: New.
2018-10-01 Nathan Sidwell <nathan@acm.org>
Merge trunk r264769.
Slip in module.c -> module.cc rename
Merge trunk r264765.
gcc/cp/
* lang-specs.h: Error out on -fcoroutines.
From c++-coroutines branch:
2018-10-01 Iain Sandoe <iain@sandoe.co.uk>
gcc/c-family/
* c-common.h (RID_CO_AWAIT, RID_CO_YIELD, RID_CO_RETURN,
D_CXX_COROUTINES, D_CXX_COROUTINES_FLAGS): New.
* c-common.c (c_common_reswords): co_await, co_yield,
co_return New keywords.
gcc/cp/
* lex.c (init_reswords): Handle flag_coroutines.
gcc/c-family/
* c.opt (fcoroutines, fcoroutines-ts): New.
Avoid UB type punning union shenanigans
gcc/cp/
* module.c (macro_import::slot): Explicitly code bit
manipulation. Update all users.
gcc/testsuite/
* g++.dg/modules/adhoc-1_b.C: Adjust regexp for wierd dejagnu/TCL bug.
AdHoc locations
gcc/cp/
* modules.c (dumper): Add LOCATIONS, flags.
(dumper::operator()): Add default arg.
(dumper::push): Set flags.
(module_state::{read,write}_location): Serialize adhoc locs.
(module_state::deferred_macro): Optimize current TU undef case.
gcc/testsuite/
* g++.dg/modules/adhoc-1_[ab].C: New.
2018-09-28 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (module_state::deferred_macro): Fix undef hiding logic.
gcc/testsuite/
* g++.dg/modules/macro-4*: New.
2018-09-27 Nathan Sidwell <nathan@acm.org>
No speculative undefs.
gcc/cp/
* module.c (maybe_add_macro): Simplify.
(module_state::undef_macro): Only add undef for a deferred macro.
Add -fforce-module-macros
libcpp/
* include/cpplib.h (get_deferred_macro): Declare.
* macro.c (undefer_macro): Rename to ...
(get_deferred_macro): ... here. Adjust callers.
gcc/
* doc/invoke.texi (fforce-module-macros): Document.
gcc/c-family/
* c.opt (fforce-module-macros): New.
gcc/cp/
* module.c (get_option_string): Prune more options.
(load_macros): New.
(finish_module_parse): Walk identifiers, if forcing macros.
2018-09-26 Nathan Sidwell <nathan@acm.org>
Add deferred cpp_hashnode field. Replace macro_imports hash table
with vector and refactor.
libcpp/
* include/cpplib.h (NODE_DEFERRED_MACRO): Delete.
(cpp_hashnode): Reduce flags width. Add deferred field.
(cpp_deferred_macro_p): Delete.
(cpp_set_deferred_macro): Don't set flag.
* directives.c (do_undef): Adjust deferred check.
* macro.c (undefer_macro): Adjust.
gcc/cp/
* module.c (macro_export): Drop node field. Add ctor.
(macro_import): Rename one to struct slot. Add ctors, type
erase. Delete struct traits.
(macro_imports): Change to vec type.
(macro_import::{append,exported}): Adjust.
(get_macro_{imports,exports}): Allocate node deferred index,
adjust.
(maybe_add_macro): Add to macros vector, check unexported undefs
here.
(macro_loc_cmp): Reimplement.
(module_state::{read,write}_macros): Adjust.
(module_state::{undef,deferred}_macro): Likewise.
(finish_module_parse): Adjust deallocation.
Macro import and export (corrected).
libcpp/
* include/cpplib.h (cpp_callbacks): Add user_deferred_macro.
(NODE_DEFERRED_MACRO): New.
(cpp_hashnode): Increase flags size.
(cpp_deferred_macro_p, cpp_set_deferred_macro): New.
(cpp_compare_macros): Take two macros.
* internal.h (_cpp_notify_macro_use): Take source location, return bool.
(_cpp_maybe_notify_macro_use): Likewise.
* directives.c (do_undef): Don't warn about unresolved deferred
macros.
(do_ifdef, do_ifndef): Cope with deferred macros evaporating.
* expr.c (parse_defined): Likewise.
* macro.c (undefer_macro): New.
(enter_macro_context): Adjust notify call.
(cpp_get_token_1): Deal with deferred nodes.
(warn_of_redefinition): Node extraction of compare, call ...
(cpp_compare_macros): ... this to compare two macros.
(cpp_create_definition): Adjust compare call.
(_cpp_notify_macro_use): Deal with deferred macros.
gcc/
* langhooks-def.h (LANG_HOOKS_PREPROCESS_DEFERRED_MACRO): New.
* langhooks.h (struct langhooks): Add preprocess_deferred_macro.
gcc/c-family/
* c-lex.c (init_c_lex): Register deferred_macro hook.
gcc/cp/
* cp-tree.h (module_cpp_deferred_macro): Declare.
* cp-lang.c (LANG_HOOKS_PREPROCESS_DEFERRED_MACRO): Override.
* module.c (bytes_in::random_access): New.
(elf_in::{preserve,release}): New.
(slurping::{legacies,macros}): New fields.
(slurping::close): New.
(module_state::legacies): Remove field.
(module_state::slurper): Delete.
(module_state::{read,write}_config): Add number of macros.
(module_state::{read,write}_define{,s}): Reimplement.
(module_state::{undef,deferred}_macro): New.
(cpp_undefs): Delete.
(struct macro_export, struct macro_import): New.
(get_macro_{export,import}): New.
(maybe_add_macro,macro_loc_cmp): Adjust.
(module_state::{read,write}): Adjust.
(module_state::check_read): Adjust.
(module_state::set_import): Adjust.
(module_state::freeze_an_elf): Preserve macros.
(import_module): Update legacies bitmap.
(module_cpp_undef): Call module_state::undef_macro.
(module_cpp_deferred_macro): New.
(finish_module_parse): Free macro state.
gcc/testsuite/
* g++.dg/modules/macro-2_*: Adjust tests.
* g++.dg/modules/macro-3_*: Likewise.
2018-09-23 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* modules (module_state): Add legacies bitmap.
(module_state::write): Write README later.
(module_state::read): Set legacies bit.
(module_state::set_import): Update legacies.
gcc/testsuite/
* g++.dg/modules/unnamed-1_b.C: Update.
2018-09-16 Nathan Sidwell <nathan@acm.org>
gcc/
* doc/invoke.texi (C++ Modules): Update mapper protocol.
* cxx-mapper.c (client): Remove bewait, forget members.
(client::action): Remove BYIMPORT, BEWAIT & RESET.
Remove BYIMPORT, BEWAIT.
gcc/cp/
* module.c (module_mapper::uncork): Send blank command.
(module_mapper::imex_query): Take exported_p bool.
(module_mapper::bewait_{cmd,response}): Delete.
(module_mapper::send_command): Don't shortcut blank format.
(module_state::preamble_load): Avoid async commands.
2018-09-14 Nathan Sidwell <nathan@acm.org>
gcc/
* langhooks.h (preprocess_main_file): Drop index arg.
gcc/c-family/
* c-opts.c (cb_file_change): Adjust preprocess_main_file hook.
gcc/cp/
* cp-tree.h (module_node_main_file): Drop index parm.
* module.c (loc_spans::init_p, ): New.
(loc_spans::init_once): Rename to ...
(loc_spans::init): ... here.
(loc_spans::main_start): New.
(prefix_line_maps_hwm, prefix_locations_hwm): Delete.
(maybe_add_macro, declare_module, do_divert_include)
(module_note_main_file, maybe_begin_legacy_module): Adjust.
A grand renaming
gcc/cp/
* cp-tree.h (atom_preamble_state, atom_preamble_prefix_peek)
(atom_preamble_prefix_next): Rename to ...
(atom_preamble_state, atom_preamble_prefix_peek)
(atom_preamble_prefix_next): ... here.
(atom_cpp_undef, atom_module_preamble, atom_main_file)
(atom_divert_include, maybe_atom_legacy_module): Rename to ...
(module_cpp_undef, module_preamble_load, module_note_main_file)
(maybe_import_include, maybe_begin_legacy_module): ... here.
* cp-lang.c (LANG_HOOKS_PREPROCESS_MAIN_FILE)
(LANG_HOOKS_PREPROCESS_DIVERT_INCLUDE)
(LANG_HOOKS_PREPROCESS_UNDEF, LANG_HOOKS_PREPROCESS_PREAMBLE): Adjust.
(module_preamble_fsm): Adjust.
* lex.c (atom_preamble_prefix_peek, atom_preamble_prefix_next):
Rename to ...
(atom_preamble_prefix_peek, atom_preamble_prefix_next): ... here.
Adjust.
* module.c (atom_cpp_undef, atom_module_preamble, atom_main_file)
(atom_divert_include, maybe_atom_legacy_module): Rename to ...
(module_cpp_undef, module_preamble_load, module_note_main_file)
(maybe_import_include, maybe_begin_legacy_module): Here ... Adust.
* parser.c (cp_parser_get_module_preamble_tokens, c_parse_file):
Adjust.
Expunge the spewer
gcc/cp/
* module.c (struct slurping): No need to tag.
(struct spewing): Delete.
(declare_module, module_state::atom_preamble)
(finish_module_parse): Don't deal with it.
Expunge old location scheme
gcc/cp/
* module.c (struct slurper): Remove early_locs, late_locs,
loc_offset, filenames.
(module_state::{prepare,read,write}_locations): Delete
(module_state::{read,write}): Adjust.
New locations working
gcc/cp/
* module.c (module_state::prepare_locations): New, broken out of ...
(module_state::write_locations): Adjust.
(module_state::read_locations): Fix.
2018-09-13 Nathan Sidwell <nathan@acm.org>
Read & write new locations (buggy, disabled).
gcc/cp/
* module.c (module_state::{read,write}_location): Add new-loc
scheme.
(module_state::{read,write}_locations): Adjust.
(module_state::read): Select location scheme.
gcc/testsuite/
* g++.dg/modules/loc-1_c.C: Use regexp for note loc.
Reading location spans (but not using them).
gcc/cp/
* module.c (loc_range_t): Global typedef.
(loc_spans::release): Delete.
(slurping): Add new range locs.
(module_state::write_locations): Adjust.
(module_state::read_locations): New.
(module_state::read): Call it.
Stop passing line_map around. There is only one.
gcc/cp/
* cp-tree.h (import_module, declare_module, atom_module_preamble)
(finish_module_parse, maybe_atom_legacy_module): Drop line_map
arg.
* decl2.c (c_parse_final_cleanups): Adjust.
* parser.c (cp_parser_module_declaration)
(cp_parser_import_declaration, c_parse_file): Adjust.
* module.c (loc_spans): Drop lmaps member & adjust.
(module_state): Drop line_maps from some but not all members.
Refactor location spans
gcc/cp/
* module.c (class loc_spans): New. Absorb ...
({open,close,ordinary,macro}_interval): ... these. Update all uses.
2018-09-12 Nathan Sidwell <nathan@acm.org>
Adding location spans
gcc/cp/
* module.c (loc_range_t): New range.
(struct lmap_interval): New.
(lmap_spans): New.
(open_interval, close_interval, ordinary_interval)
(macro_interval): New.
(module_state::write_locations): Write spans.
(module_state::write): Write spans.
(module_state::atom_preamble): Update spans.
(atom_main_file): Initialize spans.
(finish_module_parse): Close out span.
gcc/cp/
* parser.c (cp_parser_get_module_preamble_tokens): Don't read past
EOF.
gcc/testsuite/
* g++.dg/modules/ice-1.C: New.
* g++.dg/modules/modules.exp: Remove old pruning.
Implement p1103r0 19.3/2 not-a-keyword.
gcc/cp/
* module (module_state::write_define): Don't export keywords.
gcc/testsuite/
* g++.dg/modules/legacy-7_{a.H,b.C}: New.
2018-09-10 Nathan Sidwell <nathan@acm.org>
gcc/
* diagnostic.c (diagnostic_report_current_module): Do not line
break after module name.
gcc/testsuite/
* lib/prune.exp (prune_gcc_output): Adjust module loc regexp.
* g++.dg/modules/loc-2_[def].C: Adjust dg-regexp.
* g++.dg/modules/macro-2_d.C: Likewise.
2018-09-06 Nathan Sidwell <nathan@acm.org>
gcc/c-family/
* c.opt (fmodule-only): Set flag.
gcc/cp/
* decl2.c (c_parse_final_cleanups): Always call finish_module_parse.
* module.c (finish_module_parse): Warn on incorrect -fmodule-only.
gcc/testsuite/
* g++.dg/modules/only-[123].C: New.
Add -fmodule-only, rename -fmodules-legacy
gcc/c-family/
* c.opt (fmodules-legacy*): Rename to ...
(fmodule-legacy*): ... here.
(fmodule-only): New.
gcc/cp/
* lang-specs.h: Incorporate -fmodule-only.
* module.c (get_option_string, handle_module_option): Adjust.
gcc/
* doc.invoke.texi: Update module options.
gcc/testsuite/
* g++.dg/modules/modules.exp: Adjust.
* g++.dg/modules/*: Adjust options.
2018-08-31 Nathan Sidwell <nathan@acm.org>
libiberty/
* configure.ac (checkfuncs, AC_CHECK_FUNCS): Add pipe2.
* configure, config.in: Regenerated.
* pex-unix.c (pex_unix_execute): Use pipe to transfer child failure.
2018-08-30 Nathan Sidwell <nathan@acm.org>
AIXify tests
fcc/testsuite/
* fn-inline-1_[abc].C: Adjust regexps.
* sym-subst-2_a.C: Don't add -fat-lto option, use scan-assembler instead.
Fix AIX
gcc/cp/
* cxx-mapper.cc (buffer::get_request): Reinit pos.
Fix --enable-checking=release.
gcc/cp/
* name-lookup.c (set_module_binding): Add static cast.
Fix more GC
gcc/cp/
* module.c (module_state): Tag for_user.
(module_state_hash): Defive from ggc_ptr_hash.
(init_module_processing): GGC alloc hash table. get mapper when
not lazy, add ggc_collect.
(finish_module_parse): Don't zap hash table here ...
(finish_module_processing): ... do it here instead.
gcc/testsuite/
* g++.dg/modules/gc-2_a.C: New.
* g++.dg/modules/gc-2.map: New.
AIX build
gcc/
* configure.ac: Check sighandler_t, memrchr.
* config.in, configure: Rebuilt.
gcc/cp/
* Make-lang.in (MODULE_STAMP): Protect against non--r capable
date.
(cxx-mapper): Add LIBINTL, not LIBBACKTRACE.
* module.c (memrchr, sighandler_t): Provide fallback.
* cxx-mapper.cc (memrchr, sighandler_t): Provide fallback.
* Merge trunk r263974.
2018-08-29 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (atom_cpp_undef): location_t arg is unused.
gcc/cp/
* module.c (module_state::{read,write}_define): Add NUL
terminators to CPP_TOKEN_FLD_STR elements.
libcpp/
* lex.c (cpp_alloc_token_string): Don't clobber ending NUL.
2018-08-28 Nathan Sidwell <nathan@acm.org>
Undefs
gcc/cp/
* cp-lang.c (LANG_HOOKS_PREPROCESS_UNDEF): Override.
* cp-tree.h (atom_cpp_undef): Declare.
* module.c: Include langhooks.h.
(cpp_undefs): New global.
(module_state::{read,write}_defines): Stream undefs.
(atom_cpp_undef): Define.
gcc/
* langhooks-def.h (LANG_HOOKS_PREPROCESS_UNDEF): Default.
(LANG_HOOKS_INITIALIZER): Add it.
* langhooks.h (struct lang_hooks): Add preprocess_undef hook.
gcc/c-family/
* c-lex.c: Include langhooks.h
(init_c_lex, cb_undef): Look at lang hook.
gcc/testsuite/
* g++.dg/modules/macro-3_[ab].H: New.
* g++.dg/modules/macro-3_c.C: New.
Sorted macros
gcc/cp/
* module.c (module_state::{read,write}_define): New, single-macro
streamers.
(module_state::write_define_cb): Delete.
(maybe_add_macro, macro_loc_cmp): New.
(module_state::write_defines): Write in source order.
(module_state::read_defines): Adjust.
Macro define locations
libcpp/
* include/cpplib.h (cpp_macro): Add imported field.
gcc/cp/
* module.c (module_state::write_define_cb): Ignore imported, write
location.
(module_state::read_defines): Read location.
gcc/testsuite/
* g++.dg/modules/macro-2_[abc].H: New.
* g++.dg/modules/macro-2_d.C New.
Reading macros.
gcc/cp/
* module.c (bytes_{in,out}::cpp_node): New.
(bytes_out::buf): New.
(bytes_{in,out}::str): Treat zero-length strings specially.
(module_state::write_define_cb): Concatenate strings.
(module_state::write_defines): Write padding byte.
(module_state::read_defines): New.
(module_state::read): Call it.
libcpp/
* include/cpplib.h (cpp_alloc_token_string): New.
(cpp_compare_macros): Declare.
* lex.c (cpp_alloc_token_string): New, broken out of ...
(create_literal): ... here. Call it.
* macro.c (warn_of_redefinition): Rename to ...
(cpp_compare_macros): ... this, and make it extern.
(_cpp_create_definition): Adjust.
gcc/testsuite/
* g++.dg/modules/macro-1_a.H: Adjust.
* g++.dg/modules/macro-1_b.C: New.
Writing macros.
gcc/cp/
* cp-tree.h (import_module, declare_module, atom_module_preamble,
finish_module_parse, maybe_atom_legacy_module): Add cpp_reader
arg.
* decl2.c (c_parse_final_cleanups): Adjust finish_module_parse.
* module.c (bytes_out::str): Overload for cpp_hashnode.
(module_state::read_imports,write_imports,do_import): Add
cpp_reader arg.
(module_state::atom_preamble): Likwise.
(import_module, declare_module, atom_module_preamble)
(finish_module_parse, maybe_atom_legacy_module): Likewise.
(module_state::write_{define_cb,defines}): New.
(module_state::write): Write defines when in legacy mode.
* parser.c (cp_parser_module_declaration)
(cp_parser_import_declaration, c_parse_file): Pass parse_in.
gcc/testsuite/
* g++.dg/modules/macro-1_a.H: New.
2018-08-27 Nathan Sidwell <nathan@acm.org>
Merge trunk r263897.
gcc/cp/
* module.c (module_state): Remove depth.
(module_state::maybe_create_loc): Replace ...
(module_state::set_loc): ... this.
(module_state::read_imports): Check CRC of indirect imports too.
(module_state::attach): Simplify logic.
libcpp/
* include/linemaph (linemap_module_loc): Drop CURRENT parm.
* line-map.c (linemap_module_loc): Drop reseating capability.
gcc/cp/
* module.c (module_state::check_not_purview): New.
(module_state::read_imports,import_module): Use it.
Remove %M formatter, it is not worth complexity.
gcc/c-family/
* c-format.c (local_module_ptr_node): Remove
(gcc_cxxdiag_char_table): Remove 'M'
(init_dynamic_diag_info): Remove module_state lookup
* c-format.h (T89_M): Remove
gcc/cp/
* cp-tree.h (class module_state): Move to module.c section.
(pp_module_name): Delete.
* error.c (cp_printer): Remove %M.
* module.c: Remove %M error printing.
(pp_module_name): Delete.
* ptree.c (cxx_print_decl): Print module number too.
2018-08-27 Nathan Sidwell <nathan@acm.org>
Mangling substitutions!
gcc/cp/
* cp-tree.h (module_vec_name): Delete.
* mangle.c (mangle_substitution): Fix name typo.
* module.c (class module_state): Drop vec_name field. Make mod
short. Add subst field.
(module_state::mangle): New.
(mangle_module): Deal with substitutions.
(mangle_module_fini): Undeal with substitutions.
(module_vec_name): Delete.
(module_state::attach): Don't set vec_name.
gcc/testsuite/
* g++.dg/modules/sym-subst-1.C: New.
* g++.dg/modules/sym-subst-2_[ab].C: New.
Fix module-state lifetime issue.
gcc/cp/
* cp-tree.h (finish_module): Break into ...
(finish_modle_{parse,procesing}): ... these two.
* decl2.c (c_parse_final_cleanups): Adjust modules finalization.
* modules.c (finish_modules): Break into ...
(finish_module_{parse,procesing}): ... these two.
(module_state::release): Break out ...
(module_state::slurped): ... this.
(module_state::{init,fini}): Fold into callers.
Refactor mangling interface.
gcc/cp/
* cp-tree.h (mangle_module, mangle_module_fini): Declare.
(mangle_substitution, mangle_identifer): Declare.
* mangle.c (mangle_substitution, mangle_identifer): Define.
(struct globals): Add mod field.
(maybe_write_module): Call mangle_module.
(finish_mangling_internal): Call mangle_module_fini.
* module.c (mangle_module, mangle_module_fini): Define.
2018-08-23 Nathan Sidwell <nathan@acm.org>
Module state gains parent.
gcc/cp/
* cp-tree.h (get_module): Add parent argument.
(module_name): Return string.
* error.c (dump_module_suffix): Adjust module_name use.
* module.c (module_state_hash): Adjust for having a parent.
(module_state: Add parent & fullname fields.
(module_state::set_name): Delete.
(get_module): Add parent.
(get_module): Split string.
(module_mapper::{export_done,imex_query}): Adjust module name access.
(module_state::write_readme): Adjust.
(module_state::{read,write}_{imports,config}): Adjust.
(module_state::set_loc): Use fullename.
(module_state::attach): Create fullname.
* parser.c (cp_parser_module_name): Generate parental name.
* ptree.c (cxx_print_decl): Adjust.
gcc/testsuite/
* g++.dg/modules/mod-decl-1.C: Adjust diags.
Kill N: prefix notation
gcc/cp/
* module.c (enum module_kind): Delete.
(module_state): Replace kind with legacy, adjust is_legacy.
(module_state::set_name): Adjust.
(module_state_hash): Adjust hasher & comparator.
(module_legacy_system_p): Delete.
(make_flat_name): Move into ...
(get_module): ... here. Adjust.
(get_module): Add string variant.
(module_mapper::module_mapper): Adjust.
(module_mapper::{module_name_kind,response_name}): Delete.
(module_mapper::{imex_query,bewait_response,divert_include}): Adjust.
(module_state::{read_imports,attach}): Adjust.
(pp_module_name): Adjust.
(maybe_atom_legacy_module, init_module_processing)
(handle_module_option): Adjust.
* cxx-mapper.cc (module2bmi): Remove encoding.
(encode_module_name): Remove encoding.
gcc/c-family/
* c-lex.c (c_lex_with_flags): CPP_HEADER include quoting.
gcc/
* doc/invoke.texi (C++ Modules): Adjust protocol doc.
gcc/testsuite/
* g++.dg/modules/modules.exp: Adjust BMI mapping.
* g++.dg/modules/legacy-0[ab].H: New.
* g++.dg/modules/legacy-*: Adjust.
2018-08-22 Nathan Sidwell <nathan@acm.org>
%M formatter
gcc/c-family/
* c-format.c (local_module_ptr_node): New.
(gcc_cxxdiag_char_table): Add 'M'.
(argument_parser::handle_conversions): Allow wanted type to be
NULL.
(init_dynamic_diag_info): Simplify lookup, add module_state.
* c-format.h (T89_M): New.
gcc/cp/
* cp-tree.h (class module_state): Declare before diagnostics.
* error.c (cp_printer): Add %M.
* module.c: Use %M error printing.
Use modules as handles themselves.
gcc/cp/
* cp-tree.h (class module_state): Forward declare.
(get_module, pp_module_name): Declare.
(import_module, declare_module, push_module_export): Take
module_state.
* module.c (proclaimer): A module.
(get_module, pp_module_name): Define.
(push_module_export, import_module, declare_module): Adjust.
* parser.c (cp_parser_module_name): Return module_state.
(cp_parser_module_declaration, cp_parser_import_declaration)
(cp_parser_module_proclamation): Adjust.
Fix GTY
gcc/cp/
* cp-tree.h (struct mc_index): Don't mark.
(struct mc_slot): Converted from union. Adjust.
(struct module_cluster): Skip mc_index.
* module.c (struct slurping,spewing): Skip range_t members.
(class module_state): Remove static data members.
(global_tree_arys, fixed_trees, global_crc, our_opts, lazy_lru)
(lazy_open, modules, modules_hash): New static vars. Adjust uses.
(finish_module): Add gc point.
gcc/testsuite/
* g++.dg/modules/gc-1_[abcd].C: New.
2018-08-21 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (declare_module, import_module): Separate name from
location.
* module.c (module_state::attach): Drop maybe_vec_name arg.
(module_state::get_module): Flatten here.
(declare_module, import_module): Separate name and from loc.
(maybe_atom_legacy_module): Adjust.
* parser.c (cp_parser_module_name): Return tree only.
(cp_parser_module_declaration, cp_parser_import_declaration): Adjust.
gcc/testsuite/
* g++.dg/modules/legacy-4.H: Adjust error.
gcc/cp/
* module.c (module_mapper::divert_include): Don't append export attrib.
(import_module): Don't scan attribs.
(maybe_atom_legacy_module): Push exporting.
gcc/testsuite/
* g++.dg/modules/legacy-3_[bc].H: Adjust.
* g++.dg/modules/legacy-5_b.C: Adjust.
* g++.dg/modules/legacy-6_[cd].C: Adjust.
gcc/cp/
* module.c (module_state::get_module): Lose dflt & insert args.
(module_state::insert_mapping): Move directly into ...
(module_mapper::module_mapper): ... here.
(module_mapper::bewait_response, module_state::read_imports): Adjust.
(import_module, declare_module): Adjust.
gcc/cp/
* module.c (module_state::is_mapping): Rename to ...
(module_state::is_detached): ... here. Use from_loc.
(module_state::attach): New broken out of ...
(module_state::find_module): ... here. Delete, fold into ...
(module_state::read_imports, import_module, declare_module): ...
these callers.
(module_state::read): Adjust module index setting.
libiberty/
* pex-unix.c (IS_FAKE_VFORK): Rename to VFORK_IS_FORK.
(pex_unix_exec_child): Avoid spuros clobber warning, use stdio
when forking.
2018-08-20 Nathan Sidwell <nathan@acm.org>
Merge trunk r263679.
Merge trunk r263673.
Revert r263619 2018-08-17 Nathan Sidwell <nathan@acm.org>
Revert r263597 2018-08-16 Nathan Sidwell <nathan@acm.org>
They break GTY strangely.
2018-08-17 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (module_state::is_detached): New.
(module_state::attach): New, broken out of ...
(module_state::find_module): ... here. Call it.
(declare_modules): Do module-specific attaching here.
2018-08-16 Nathan Sidwell <nathan@acm.org>
gcc/testsuite/
* g++.dg/modules/modules.exp (dg-module-pre-prune): Delete
(g++-dg-prune): Don't override.
* g++.dg/modules/legacy-4.H: Use dg-regexp.
* g++.dg/modules/loc-2_[def].C: Likewise.
gcc/cp/
* cp-tree.h (class module_state): Forward declare.
(get_module, pp_module_name): Declare.
(push_module_export, declare_module, import_module): Take
module_state.
* error.c (cp_printer): Accept %M.
* module.c (module_state::find_module): Take module_state.
(module_state::get_module): Drop default & insert args.
(module_state::insert_mapping): Delete.
(module_mapper::{module_mapper,bewait_response): Adjust.
(module_mapper::divert_include): Drop indentation.
(module_state::read_imports): Adjust.
(proclaimer): Is a module_state pointer.
(push_module_state, declare_module, import_module): Adjust.
(pp_module_name): New.
(get_module): New.
(maybe_atom_legacy_module): Adjust.
* parser.c (cp_parser_module_name): Return module_state, adjust.
(cp_parser_module_declaration, cp_parser_import_declaration):
Adjust.
gcc/testsuite/
* g++.dg/modules/legacy-4.H: Adjust regexp.
2018-08-08 Nathan Sidwell <nathan@acm.org>
Merge trunk r263429.
2018-08-02 Nathan Sidwell <nathan@acm.org>
Merge trunk r263272.
2018-07-12 Nathan Sidwell <nathan@acm.org>
libcpp/
* include/cpplib.h (cpp_clear_if_stack): Renamed from
cpp_pop_directives.
* directives.c (cpp_clear_if_stack): Likewise, drop all arg.
gcc/c-family/
* c-ppoutput.c (scan_translation_unit): Fixup.
gcc/c-family/
* c.opt (fmodule-preamble): Alias fmodule-preamble=
(fmodule-preamble): Fix type.
* module.c: Add i18n markers.
(init_module_processing): Detect unsupported option combos.
(handle_module_option): Don't zap explicit modules-ts.
gcc/
* diagnostic.c (diagnostic_report_current_module): Add i18n
markers.
gcc/testsuite/
* g++.dg/modules/cpp-preamble-9.C: New.
* g++.dg/modules/modules.exp (mode_list): Preamble is atom.
libcpp/
* directives.c (cpp_pop_directives): Buffer could be NULL.le
gcc/cp/
* lex.c (atom_preamble_prefix_peek): Use cpp_macro_p.
Hide NT_MACRO
libcpp/
* include/cpplib.h (cpp_macro_p): New.
* macro.c (cpp_fun_like_macro_p): Use it.
gcc/c-family/
* c-ada-spec.c (count_ada_macro, store_ada_macro): Use
cpp_macro_p.
* c-ppoutput.c (dump_macro): Likewise.
* c-spellcheck.cc (should_suggest_as_macro_p): Likewise.
gcc/
* config/rs6000/rs6000-c.c (rs6000_macro_to_expand): Use cpp_macro_p.
* config/powerpcspe/powerpcspe-c.c (rs6000_macro_to_expand): Likewise.
gcc/fortran/
* cpp.c (dump_macro): Use cpp_macro_p.
2018-07-06 Nathan Sidwell <nathan@acm.org>
gcc/testsuite/
* g++.dg/modules/modules.exp: Restore g++-dg-prune after test.
* g++.dg/modules/legacy-5_c.C: Fix scan-lang-dump.
2018-07-05 Nathan Sidwell <nathan@acm.org>
No ALIASes for IMPORTS
gcc/cp/
* cxx-mapper.cc (module2bmi): No aliases here.
(client::imex_response): Adjust.
gcc/
* doc/invoke.texi (C++ Modules): Remove ALIAS from IMPORT response
set.
Legacy header warning
gcc/
* invoke.texi (Wlegacy-header): New warning.
gcc/c-family/
* c.opt (Wlegacy-header): New.
gcc/cp/
* cp-tree.h (atom_preamble_end): Declare.
* cp-lang.c (atom_preamble_fsm): Use it.
* lex.c (atom_preamble_prefix_peek): Check OPT_Wlegacy_header.
* module.c (do_divert_include): Likewise.
(atom_divert_include): Default -Wlegacy-header.
(atom_preamble_end): New.
* parser.c (c_parse_file): Use it.
gcc/testsuite/
* g++.dg/modules/legacy-6*: New.
Legacy header aliasing
gcc/
* doc/invoke.texi (C++ Modules): Update protocol docs
gcc/cp/
* cxx-module.cc (module2bmi): Deal with aliasing.
(encode_module_name): New.
(read_mapping_file): Use it. Deal with aliasing.
(client::imex_response): Likewise.
(client::action): Likewise,
* module.c (module_mapper::module_name_kind): New.
(module_mapper::response_name): Use it.
(module_mapper::divert_include): Allow aliasing.
gcc/testsuite/
* g++.dg/modules/legacy-5*: New.
2018-07-03 Nathan Sidwell <nathan@acm.org>
Merge legacy header options to -fmodules-
gcc/
* doc/invoke.texi (C++ Modules): Adjust.
gcc/c-family/
c.opt (fmodules_legacy, fmodules_legacy=): New.
(fmodule-{user,system}-header{,=}): Delete.
gcc/cp/
* cp-tree.h (modules_legacy_p): Renamed from modules_header_p.
* lang-specs.h (@c++-header): Update.
* lex.c (atom_preamble_prefix_peek): Adjust.
* module.c (module_legacy_name): Do not force to empty string.
(module_state::get_option_string): Adjust.
(declare_module, maybe_atom_legacy_module, init_module_processing)
(handle_module_option): Likewise.
gcc/testsuite/
* g++.dg/modules/legacy-[1234]*: update.
* g++.dg/modules/atom-inc-1.C: Update.
Explicit user/system legacy headers
gcc/c-family/
* c-lex.c (c_lex_with_flags): Encode header names in tree lists.
* c.opt (fmodule-{user,system}-header): New.
gcc/cp/
* cxx-mapper.cc (module2bmi): Adjust.
(read_mapping_file): Encode legacy header names.
* lang-specs.h (@c++-header): Update.
* module.c (module_state_hash::hash): Update hashers.
(enum module_kind): New.
(module_state::set_name): Adjust.
(module_state_hash::equal): Adjust.
(module_header_is_system): New.
(make_legacy_name): Delete.
(module_state::get_module): Adjust.
(module_mapper::response_name): New.
(module_mapper::imex_query): Adjust.
(module_mapper::bewait_response): Adjust.
(module_mapper::divert_include): Adjust.
(declare_module, maybe_atom_legacy_module): Likewise.
(handle_module_option): Check new options.
gcc/testsuite/
* g++.dg/modules/modules.exp: update BMI encodings.
* g++.dg/modules/legacy-[1234]*: update.
* g++.dg/modules/atom-inc-1.C: Update.
gcc/
* doc/invoke.texi (C++ Modules): Document new options.
2018-06-29 Nathan Sidwell <nathan@acm.org>
Diverted header column preservation
libcpp/
* directives.c (do_include_common): Adjust divert callback.
* include/cpplib.h (cpp_divert_include_t): Likewise.
gcc/cp/
* module.c (module_mapper::divert_include): Add line_maps.
Preserve column number.
(import_module): Look at attribs.
(do_divert_include): Adjust.
* parser.c (cp_parser_module_declaration): Return loc of name.
(cp_parser_import_declaration): Likewise.
(cp_parser_parse_module_preamble): Adjust.
gcc/
* langhooks.h (lang_hooks): Adjust preprocess_divert_include.
gcc/testsuite/
* g++.dg/modules/legacy-3_b.H: Adjust.
* g++.dg/modules/legacy-3_c.H: Adjust.
* g++.dg/modules/legacy-4.H: Adjust.
Diverted include line numbering
libcpp/
* directives.c (do_include_common): Fixup diversion line
numbering.
(_cpp_pop_buffer): Free to_free even if not a file.
gcc/c-family/
* c-ppoutput.c (print_line_1): More C++y.
gcc/cp/
* module.c (module_mapper::divert_include): Two \n's.
gcc/testsuite/
* g++.dg/modules/legacy-4: New.
* g++.dg/modules/legacy-3_b.H
gcc/testsuite/
* g++.dg/modules/modules.exp (dg-module-pre-prunes): Renamed.
libcpp/
* directives.c (do_include_common): Include diverter will push
buffer.
* include/cpplib.h (cpp_divert_include_t): Adjust signature.
gcc/
* langhooks.h (lang_hooks): Adjust preprocess_divert_include
signature.
gcc/cp/
* module.c (module_mapper::divert_include): Push buffer here.
(do_divert_include): Adjust.
2018-06-28 Nathan Sidwell <nathan@acm.org>
gcc/testsuite/
* g++.dg/modules/legacy-3*: New.
gcc/testsuite/
* g++.dg/modules/modules.exp: Fix execution tests. Add dg-module-literal
* g++.dg/modules/legacy-2_d.C: Fix expected line number.
* g++.dg/modules/loc-2_[def].C: Use dg-module-literal.
(Beginnings of) Include diversion.
gcc/c-family/
* c-opts.c (c_common_post_options): Set divert_include hook.
(cb_file_change): Fixup precedence.
gcc/cp/
* cp-lang.c (LANG_HOOKS_PREPROCESS_DIVERT_INCLUDE): Override.
* cp-tree.h (modules_header_p): New.
(atom_divert_include): Declare.
* cxx-mapper.cc (flag_fallback): New flag.
(module2bmi): Deal with NULL names.
(buffer::get_request): Fix off-by-one error.
(read_mapping_file): Can be multiply called. Target file name can
be null.
(client::action): Deal with INCLUDE.
(main): There can be may files after connection. Fixup networking
errors.
* lex.c (atom_preamble_prefix_peek): Don't rescan legacy header
module.
* module.c (module_preamble_end_loc): Declare here.
(module_mapper::module_mapper): Prepend path for anything looking
defaulty.
(module_mapper::divert_include): New.
(do_divert_include): New.
(atom_divert_include): New.
(init_module_processing): Set header mode here.
* parser.c (module_preamble_end_loc): Extern.
gcc/
* doc/invoke.text (C++ Modules): Document -fmodule-header.
* langhooks-def.h (LANG_HOOKS_PREPROCESS_DIVERT_INCLUDE): Provide
default.
* langhooks.h (lang_hooks): Add preprocess_divert_include.
libcpp/
* directives.c (do_include_common): Add diversion smarts.
* include/cpplib.h (cpp_divert_include_t): New.
(struct cpp_callbacks): Add divert_include.
* line-map.c (linemap_module_loc): Missed commit.
gcc/testsuite/
* g++.dg/modules/legacy-2.*: New.
* g++.dg/modules/modules.exp: Fixup header compilation.
2018-06-27 Nathan Sidwell <nathan@acm.org>
(Beginnings of) Legacy importing
gcc/cp/
* cxx-mapper.cc (module2bmi): Map legacy header names.
* module.c (module_state::legacy): New field.
(module_state::{is_legacy,set_name}): New.
(make_legacy_name): New.
(module_state::get_module): Canonicalize legacy name.
(module_state::get_option_string): Strip -fmodule-header.
(declare_module): Check correct kind.
(maybe_atom_legacy_module): Use make_legacy_name.
* parser.c (cp_parser_module_name): Parse legacy names.
(cp_parser_import_declaration): Don't special case legacy names
here.
gcc/testsuite/
* g++.dg/modules/atom-inc-1.C: Add expected errors.
* g++.dg/modules/legacy-1_[abc].[CH]: New.
* g++.dg/modules/modules.exp: Support legacy header compilation.
(Beginnings of) Legacy header modules
libcpp/
* line-map.c (linemap_module_loc): Expect ordinary loc.
gcc/
* langhooks-def.h (LANG_HOOKS_PREPROCESS_MAIN_FILE): Provide
default.
* langhooks.h (lang_hooks): Add preprocess_main_file hook.
gcc/c-family/
* c-opts.c (cb_file_change): Call new hook.
gcc/cp/
* cp-tree.h (enum atom_preamble_state): Define.
(atom_preamble_prefix_{peek,next}): Use enum.
(atom_main_file, maybe_atom_legacy_module): Declare.
* cxx-mapper.cc (module2bmi): Munge legacy module chars.
* lang-specs.h (@c++-header): Fix -fmodule-header use.
* lex.c (atom_preamble_prefix_{peek,next}): Adjust for enum.
* module.c (prefix_line_maps_hwm, prefix_locations_hwm): New.
(module_state::{read,write,prepare}_locations): Adjust prefix checking.
(ordinary_loc_of): New.
(import_module): Use it.
(declare_module): Set preamble prefix if needed.
(atom_main_file, maybe_atom_legacy_module): New.
(init_module_processing): Don't default module_header_name here.
(atom_module_preamble, finish_module): Push & pop exporting state in
legacy mode.
* parser.c (cp_parser_get_module_preamble_tokens): Adjust for
preamble state. Return indicator of preamble contents.
(c_parse_file): Maybe inject legacy module decl.
* cp-lang.c (LANG_HOOKS_PREPROCESS_MAIN_FILE): Override hook.
(atom_preamble_fsm): Adjust for state enum.
2018-06-26 Nathan Sidwell <nathan@acm.org>
Merge trunk r262148.
gcc/
* configure.ac: Fix AF_INET6 & accept4 tests.
* configure, config.in: Rebuilt.
gcc/cp/
* module.c: Update some comments.
(module_mapper::module_mapper): Fix up conditional code.
(module_state::read_imports): Replace local class with std::pair,
because C++98.
* cxx-mapper.cc (accept_from): Fixup conditional code.
2018-06-25 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cxx-mapper.cc (kill_signal): New.
(server): Fixup inet_ntop use.
gcc/
* configure.ac: Check for inet_ntop.
* configure, config.in: Rebuilt.
gcc/cp/
* cxx-mapper.cc (server): Use inet_ntop when available.
2018-06-24 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cxx-mapper.cc: BMI->GCC
* module.c: Likewise.
gcc/
* doc/invoke.texi: Likewise.
2018-06-23 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cxx-mapper.cc (struct netmask): New.
(server): Validate connection addresses.
(accept_from): New.
(process_args): Add -a arg.
Simplify protocol.
gcc/cp/
* cxx-mapper.c (buffer::empty): New.
(buffer::send_response): Fixup buffer management.
(client::imex_response): New.
(client::action): Reimplement.
* module.c (module_mapper): Update.
gcc/
* doc/invoke.texi (C++ Modules): Update protocol.
gcc/testsuite/
* g++.dg/modules/indirect-1_c.C: Tweak scan.
A proper server
gcc/cp/
* cxx-module-mapper.sh: Delete.
* cxx-mapper.cc: New.
* Make-lang.in: Adjust.
* module.c (module_mapper:get_response): Fixup errors.
(module_mapper::import_query): Drop filename.
2018-06-22 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (module_mapper::send_command): Fix off-by-one.
(module_mapper::get_response): Cleanup batch splitting.
(module_mapper::handshake): Adjust.
* cxx-module-mapper.sh (cmd): Adjust HELLO.
gcc/
* doc/invoke.texi (C++ Modules): Tweak mapper protocol.
gcc/
* configure.ac: Check select, accept4.
* config.in, configure: Rebuilt.
2018-06-21 Nathan Sidwell <nathan@acm.org>
gcc/c-family/
* c.opt: Add -fmodule-header.
gcc/cp/
* lang-specs.h: Add legacy import options.
* module.c (module_header_name): New.
(init_module_processing): Default it.
(handle_module_option): Set it.
Use getaddrinfo, not gethostbyname2
gcc/
* configure.ac (HAVE_AF_INET6): Test for getaddrinfo.
* configure: Rebuilt.
* doc/invoke.text (C++ Modules): Default is loopback.
gcc/cp/
* module.c (module_mapper::module_mapper): Reorganize network startup.
gcc/testsuite/
* g++.dg/modules/bad-mapper-[23].C: Adjust diagnostics.
2018-06-19 Nathan Sidwell <nathan@acm.org>
Early & late location maps.
gcc/cp/
* modules.c (slurping, spewing): Rearrange.
(module_state::{prepare,read,write}_locations): Reimplement.
(module_state::{read,write}): Adjust.
(module_state::atom_preamble): Adjust.
2018-06-18 Nathan Sidwell <nathan@acm.org>
gcc/testsuite/
* g++.dg/modules/loc-2_[a-f].C: New.
2018-06-17 Nathan Sidwell <nathan@acm.org>
gcc/
* configure.ac: Detect epoll & pselect.
* configure, config.in: Rebuilt.
gcc/cp/
* module.c (module_mapper::module_mapper): Fixup length errors.
gcc/cp/
* cxx-module-mapper.sh: Remove recompilation capability.
gcc/testsuite/
* g++.dg/modules/import-2.C: Adjust messages.
* g++.dg/modules/main-aux.cc: Delete.
* g++.dg/modules/main_1.C: Delete.
2018-06-15 Nathan Sidwell <nathan@acm.org>
gcc/
* diagnostic.c (diagnostic_report_current_module): Starting
location could be a module.
gcc/cp/
* module.c (trees_{in,out}::loc): Move to ...
(module_state::{read,write}_location}): ... here.
(trees_{in,out}::core_vals): Adjust.
(module_state::{read,write}_imports): Serialize import location.
(module_state::set_loc): Add floc parm, adjust.
gcc/testsuite/
* lib/prune.exp (prune_gcc_output): Adjust regexp.
gcc/cp/
* cp-tree.h (make_module_loc): Delete.
* lex.c (make_module_loc): Delete.
* module.c (module_state): Add depth field.
(module_state::set_loc): Deal with reseating. Add line_maps parm.
(module_state::read_imports): Do two passes.
(module_state::write_imports): Write length.
gcc/testsuite/
* g++.dg/modules/import-1_e.C Adjust lang dump scan.
* g++.dg/modules/mod-imp-1_d.C: Likewise.
libcpp/
* include/line-map.h (linemap_module_loc): Add incomping loc parm.
* line-map.c (linemap_module_loc): Do reseating.
Location! Location! Location!
gcc/cp/
* module.c (module_state::slurper): New.
(trees_{in,out}::loc): Implement.
(trees_in::core_vals): Set locus.
(spewing::linemaps): Fixup offset calculation.
(module_state::read_locations): Set ord_locs.
gcc/testsuite/
* g++.dg/module/loc-1_[abc].C: New.
libcpp/
* include/line-map.h (IS_ORDINARY_LOC, IS_MACRO_LOC): New.
(IS_ADHOC_LOC): Simplify.
(MAP_ORDINARY_P): Use IS_ORDINARY_LOC.
* line-map.c (linemap_module_restore): Fixup included_at.
gcc/
* diagnostic.c (diagnostic_report_current_module): Fixup include
stack messages.
gcc/testsuite/
* lib/prune.exp (prune_gcc_output): Adjust include stack regexps.
gcc/cp/
* module.c (spewer::linemaps): Return mask.
(module_state::{find,write}_locations): Use mask.
(module_state::read_locations): Implement.
Line_maps args everywhere!
gcc/cp/
* cp-tree.h (declare_module, import_module, atom_module_preamble):
Add line_maps arg.
* module.c (module_state::{read_imports,do_import}): Add line_maps.
(module_state::set_loc): New.
(module_state::atom_preamble): Deal with restoring line_maps.
(module_state::read): Add line_maps. Call read_locations.
* parser.c (cp_parser_module_declaration)
(cp_parser_import_declaration): Adjust.
(c_parse_file): Line_maps restoration is moved.
libcpp/
* include/line-map.h (linemap_save_pre_module): Delete.
(linemap_restore_pre_module): Rename to ...
(linemap_module_restore): ... here.
* line-map.c (linemap_save_pre_module): Delete.
(linemap_restore_pre_module): Rename to ...
(linemap_module_restore): ... here.
gcc/cp/
* module.c (bytes_{in,out}::align): New.
(bytes_{in,out}::buf): Use it.
libcpp/
* line-map.c (linemap_init): Set default allocator here.
(line_map_new_raw): Break out of ...
(new_linemap): ... here. Call it.
* include/line-map.h (line_map_new_raw): Declare
2018-06-14 Nathan Sidwell <nathan@acm.org>
Break out import section.
gcc/cp/
* module.c (module_state::{read,write}_imports): New.
(module_state::{read,write}_config): Don't do imports here ...
(module_state::{read,write}): ... do them here.
Fix section alignment.
gcc/cp/
* module.c (elf_out::grow): Fix padding calc.
(elf_out::add): Assert aligned.
Write out line maps.
gcc/cp/
* cp-tree.g (atom_module_preamble, finish_module): Add line_maps.
* decl2.c (c_parse_final_cleanups): Pass line_table.
* parser.c (c_parse_file): Adjst.
* module.c (struct spewing): New.
(struct slurping): Add GTY tagging.
(module_state::spewer): New.
(module_state::{write,atom_preamble}): Add linemaps.
(module_state::{find,write,read}_locations): New.
gcc/cp/
* module.c (struct slurping): New, broken out of ...
(struct module_state): ... here. Move loading data there and
adjust all users.
2018-06-13 Nathan Sidwell <nathan@acm.org>
Reorg line_map data structures.
libcpp/
* include/line-map.h (LINE_MAP_MAX_LOCATION): Define here.
(struct line_map): Move reason field to line_map_ordinary. Adjust
GTY tagging.
(struct line_map_ordinary): Reorder fields for less padding.
(struct line_map_macro): Likewise.
(MAP_ORDINARY_P): New.
(linemap_check_ordinary, linemap_check_macro): Adjust.
(MAP_MODULE_P): Adjust.
* line-map.c (LINE_MAP_MAX_SOURCE_LOCATION): Delete.
(new_linemap): Take start_location, not reason. Adjust.
(linemap_add, linemap_enter_macro): Adjust.
(linemap_line_start): Likewise.
(linemap_macro_expansion_map_p): Use MAP_ORDINARY_P.
(linemap_macro_loc_to_spelling_point): Likewise.
(linemap_macro_loc_to_def_point): Likewise.
(linemap_dump): Likewise.
2018-06-12 Nathan Sidwell <nathan@acm.org>
Better socket handling. Kill mapping from fd
gcc/cp/
* module.c (class module_mapper): Add from & to fds.
(module_mapper::{module_mapper,kill}): Adjust.
(module_mapper::{send_command,get_response}): Likewise.
(module_from_cmp): New.
(module_state::atom_preamble): Reimplement.
gcc/
* doc/invoke.texi (C++ Modules): Remove fd mapper options.
gcc/testsuite/
* g++.dg/modules/import-2.C: Adjust messages.
* g++.dg/modules/flag-1_b.C: Likewise.
* g++.dg/modules/mod-stamp-1_d.C: Likewise.
gcc/
* configure.ac: Rename HOST_HAS_AF_$FOO to HAVE_AF_$FOO.
* configure, config.in: Rebuilt.
gcc/cp/
* module.c: Adjust.
2018-06-11 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c
(elf_out::grow): Always define, always align.
(elf_out::write): Streaming buffers must be using our
allocator. No need to align here.
MMAP writing
gcc/
* configure.ac: Check for posix_fallocate.
* configure, config.in: Rebuilt.
gcc/cp/
* module.c (MAPPED_WRITING): New.
(data::allocator::{grow,shrink}): New overloads.
(data::use): Check available.
(data::allocator::grow): Deal with allocator failure.
(bytes_in::read): Set overflow on fail.
(bytes_{in,out}::{u32,c,i,u,wi,buf}): Adjust.
(bytes_out::printf): Likewise.
(bytes_out::bytes_out): Allocator is non-optional.
(elf_out): Derive from data::allocator.
(elf_out::{grow,shrink}): New overriders.
(elf_out::elf_out): Find page size.
(elf_out::{create,remove}_mapping): New.
(elf_out::write): New overload.
(elf_out::add): Take bytes_out. Adjust users.
(elf_out::{begin,end}): Add mapping support.
(trees_out::trees_out): Add allocator parm.
(trees_{in::out}::fixed_refs): Delete, adjust uses.
(module_state::write_{readme,config,namespaces,bindings}): Adjust.
(module_state::write_{unnamed,cluster}): Adjust.
Prep for MMAP exporting.
gcc/cp/
* module.c (MODULE_MMAP_IO): Rename to ...
(MAPPED_READING): This.
(data): Add allocator class with default instance.
(data::{write,printf}): Move to bytes_out.
(data::read): Move to bytes_in.
(data::{extend,release}): Delete. Adjust uses.
(bytes_out): Add allocator pointer, alter ctor.
(bytes_out::begin): Add need_crc parm.
(elf::section_vec): Delete.
(elf): Add sectab, strtab data members.
(get_num_sections): Delete.
(elf_{in,out}::strings): Delete here.
(elf_in::{grow,shrink}): New.
(elf_in::{get_section{,_limit}): New, adjust uses.
(elf_in::{keep_sections,forget_section}): Delete.
2018-06-09 Nathan Sidwell <nathan@acm.org>
MMAP importing!
gcc/cp/
* module.c (MODULE_MMAP_IO): New define.
(bytes::{begin,end}): Delete.
(elf_in::{freeze,defrost}): Adjust.
(elf_in::{begin,end}): Adjust.
(elf_in::{keep,forget}_section): Adjust.
(elf_in::read): Adjust.
(module_state::our_opts): New static member. Adjust uses.
gcc/
* doc/invoke.texi (C++ Modules): Document lazy limit change.
2018-06-08 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (elf): Replace FILE *stream with int fd. Update uses.
gcc/cp/
* module.c (bytes::begin): Add CRC parm.
(elf_in): Read buffers, adjust.
gcc/cp/
* module.c (elf_out): Track file position directly.
(elf_out::pad): Remove, fold into ...
(elf_out::write): ... here. Take a buffer.
(elf_out::{add,begin,end}): Adjust.
gcc/cp/
* module.c (elf): Add hdr member.
(elf_in::begin): Adjust.
(elf_out::{begin,end}): Adjust.
gcc/cp/
* module.c (data::printf): Moved from ...
(bytes_out::printf): ... here.
(elf): Replace sections pointer with section_vec local class.
Adjust all uses.
(elf_out): Remove strtab member class.
(elf_out::end): Adjust.
2018-06-07 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (bytes::calc_crc): Take length parm. Adjust callers.
(elf_out::strtab): Reimplement.
(elf_out::add): Use buffer pos for length.
gcc/cp/
* module.c (struct data): Resurrect. Move buffer extension here.
Update users.
(class bytes): Derive from data.
gcc/cp/
* module.c (struct data): Delete. Move into ...
(struct bytes): ... here. Update uses.
gcc/cp/
* module.c (struct data): Make buffer a pointer. Redo interface.
Change integer on-disk format.
gcc/cp/
* module.c (bytes_{in,out}::{i,u,wi}): Reimplement.
(make_bmi_path): Don't prefix absolute paths.
BMI repo directory
libiberty/
* pex-unix.c: Fixup optimization issues.
gcc/cp/
* cxx-module-mapper.sh: Add repo to HELLO.
* module.c (bmi_repo, bmi_repo_length, bmi_path, bmi_path_alloc): New.
(set_bmi_repo, make_bmi_path, drop_bmi_prefix): New.
(module_mapper::{handshake,module_mapper}): Repo location from file.
(relativize_import): Delete.
(module_state::{write_readme,maybe_defrost,do_import,finish_module):
Adjust.
gcc/
* doc/invoke.texi (C++ Modules): Document bmi repo.
2018-06-06 Nathan Sidwell <nathan@acm.org>
Better pex-unix.
libiberty/
* pex-unix.c (VFORK_STRING): Replace with ...
(IS_FAKE_VFORK): ... this.
(pex_child_error): Delete, fold into ...
(pex_unix_exec_child): ... here. Inform parent, when really vforking.
gcc/cp/
* module.c (module_mapper::module_mapper): Merge error message.
gcc/testsuite/
* g++.dg/modules/bad-mapper-1.C: Adjust.
* g++.dg/modules/bad-mapper-{2,3}.C: New.
gcc/cp/
* module.c (module_mapper::module_mapper): Ignore sigpipe.
(module_mapper::kill): Restore sigpipe.
(module_mapper::{response_unexpected,get_response}): Cope with EOF.
gcc/testsuite/
* g++.dg/modules/bad-mapper-1.C: New.
2018-06-05 Nathan Sidwell <nathan@acm.org>
gcc/
* doc/invoke.texi (C++ Modules): Clarify and extend.
2018-06-04 Nathan Sidwell <nathan@acm.org>
Self relative direct import pathnames.
gcc/cp/
* module.c (relativize_import): New.
(module_state::write_readme): Call it.
(module_state::read_imports): Make import relative to importer,
query mapper if needed.
Cookies for mapping files
gcc/cp/
* module.c (module_mapper::response_eol): Add ignore arg.
(module_mapper::module_mapper): Cookie on file mapper.
gcc/
* invoke.texi (C++ Modules): Document file mapper cookie.
gcc/testsuite/
* g++.dg/modules/map-1_b.C: Use specific mapper.
* g++.dg/modules/map-1_b.map: New.
2018-06-03 Nathan Sidwell <nathan@acm.org>
gcc/
* diagnostic.c (diagnostic_report_current_module): Don't claim
module was imported.
* doc/invoke.texi (C++ Modules): Update module-mapper docs.
gcc/cp/
* module.c (module_mapper::module_mapper): Change syntax for
option.
(module_mapper::response_token): Add all parm.
(module_mapper::bmi_response): Use it.
(module_state::check_read): Fix error reporting.
(finish_module): Warn if not exporting due to errors.
gcc/testsuite/
* lib/prune.exp (prune_gcc_output): Adjust module import regexp/
* g++.dg/modules/map-1_[ab].C: Adjust module-mapper arg.
* g++.dg/modules/atom-decl-2.C: Add expected warning
* g++.dg/modules/mod-decl-1.C: Likewise.
* g++.dg/modules/mod-decl-3.C: Likewise.
* g++.dg/modules/proclaim-1.C: Likewise.
2018-06-01 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (module_mapper): Robustify.
gcc/fortran/
* cpp.c (cb_file_change): Adjust for line map inclusion changes.
Module mapping file is back
gcc/
* doc/invoke.text (C++ Modules): Document mapping file.
gcc/cp/
* cxx-module-mapper.sh: Strip -fmodule-preamble=.
* module.c (elf::get_error): Detect no file name.
(module_state): Add imported field.
(module_state::is_{imported,mapping}): New.
(module_mapper::module_mapper): Read mapping file.
(module_mapper::get_response): Distingish empty from end.
(module_state::get_module): Copy a mapping.
(module_state::insert_mapping): New.
(module_state::read_imports): Adjust.
(module_state::do_import): Set imported.
(import_module, declare_module): Adjust.
(module_state::atom_preamble): Adjust.
gcc/testsuite/
* g++.dg/modules/map-1{_a.C,_b.C,.map}: New.
2018-05-31 Nathan Sidwell <nathan@acm.org>
gcc/
* doc/invoke.texi (C++ Modules): Show mapper cookie.
gcc/cp/
* module.c (module_mapper::fini): Assert.
(module_mapper::module_mapper): Remove dup2.
(module_mapper::reset): Delete.
gcc/
* doc/invoke.texi (C++ Modules): Rename -fmodule-server to
-fmodule-mapper.
gcc/c-family/
* c.opt (fmodule-mapper): Renamed from fmodule-server.
gcc/cp/
* cxx-module-mapper.sh: Renamed from cxx-module-server.sh.
* Make-lang.in: Update.
* module.c (struct module_mapper): Renamed from module_server.
Merge trunk r261033.
gcc/cp/
* module.c (bytes_in::begin): Add location_t arg.
(elf_in::begin): Add location args.
(trees_in::{tree_node,finish}): Use error_at.
(module_server::module_server): Likewise.
(module_state::read*): Adjust.
(module_state::{do_import,lazy_load}): Don't set input_location.
(finish_module): Likewise.
ASYNC loading & server cookie.
gcc/cp/
* cp-tree.h (reseat_module_loc, module_from_loc): Delete.
(atom_module_preamble): Declare.
* cxx-module-server.sh (cmd): Fix ASYNC response.
* lex.c (reseat_module_loc, module_from_loc): Delete.
* module.c (module_state::from_loc): Is a field.
(module_server): Require locations throughout. Redesign
interface. Add cookie.
(module_state::read_config): Use from_loc.
(module_state::read): Don't set module_purview here ...
(module_state::find_module): ... do it here.
(module_state::do_import): Add check_crc flag. Don't query server
here.
(import_module, declare_module): Query server here (ts).
(module_state::atom_preamble): New.
(atom_module_preamble): Call it.
(finish_module): Adjust.
* parser.c (cp_parser_peek_module_name): Fold into ...
(cp_parser_module_name): ... here.
(cp_parser_module_declaration): No injected atom end marker.
(cp_parser_module_preamble): Rename to ...
(cp_parser_get_module_preamble_tokens): ... this. Don't append
end marker. Return end loc.
(cp_parser_parse_module_preamble): New.
(cp_parser_declaration_seq_opt): Adjust.
(cp_parser_fill_main): Skip preamble.
(c_parse_file): Do preamble tokenization and parsing here.
gcc/
* doc/invoke.texi (C++ Modules): Document server cookie.
libcpp/
* include/cpplib.h (cpp_relocate_peeked_tokens): Declare.
* include/line-map.h (linemap_save_pre_module)
(linemap_restore_pre_module): Declare.
(LINEMAP_MODULE_SET_FROM): Delete.
* lex.c (cpp_relocate_peeked_tokens): New.
* line-map.c (linemap_module_loc): Set from direcly.
(linemap_save_pre_module, linemap_restore_pre_module): New.
gcc/testsuite/
* g++.dg/modules/flag-1_b.C
* g++.dg/modules/freeze-1_d.C
* g++.dg/modules/import-2.C
* g++.dg/modules/indirect-1_c.C
* g++.dg/modules/mod-stamp-1_d.C
2018-05-30 Nathan Sidwell <nathan@acm.org>
Module location
libcpp/
* include/cpplib.h (cpp_module_file): Delete.
* include/line-map.h (MAP_MODULE_P, LINEMAP_MODULE_SET_FROM): New.
(linemap_module_loc): Declare.
* files.c (cpp_module_file): Delete.
* line-map.c (linemap_module_loc): New.
gcc/cp/
* cp-tree.h (module_file_nest): Delete.
(make_module_loc, reseat_module_loc, module_from_loc): Declare.
* lex.c (module_file_nest): Delete.
(make_module_loc, reseat_module_loc, module_from_loc): New.
* module.c (struct module_state): Replace imp_loc and self_loc
with plain loc.
(module_state::{push,pop}_location): Delete.
(module_state::from_loc): New.
(module_state::find_module): Set module loc here.
(module_state::do_import): Adjust loc setting.
(module_state::lazy_load): Likewise.
(finish_module): Likewise.
gcc/
* diagnostic.c (diagnostic_report_current_module): Show module imports.
gcc/testsuite/
* lib/prune.exp: Prune 'module imported at'.
* g++.dg/modules/atom-check-1_b.C: Adjust.
* g++.dg/modules/circ-1_c.C: Adjust.
* g++.dg/modules/flag-1_b.C: Adjust.
* g++.dg/modules/import-2.C: Adjust.
* g++.dg/modules/mod-decl-1.C: Adjust.
* g++.dg/modules/mod-decl-2_b.C: Adjust.
* g++.dg/modules/mod-stamp-1_d.C: Adjust.
gcc/cp/
* module.c (struct module_state): Replace loc with imp_loc &
self_loc. Rename imported to direct.
(module_state::occupied): Delete.
(module_state::read{_,config}): Replace crc_ptr with bool flag.
(module_state::do_import): ... here. Break out ...
(module_state::find_module): ... this part. Absorb ...
(module_state::occupy): ... this. Delete.
(module_state::get_module): Change default insert. Check vec_name
for occupation.
(module_state::write_imports): Adjust.
(import_module, declare_module): Adjust.
2018-05-29 Nathan Sidwell <nathan@acm.org>
Included from index becomes included_at location
libcpp/
* include/line-map.h (line_map_ordinary): Replace included_from
index with included_at source_location.
(ORDINARY_MAP_INCLUDER_FILE_INDEX, LAST_SOURCE_LINE_LOCATION)
(LAST_SOURCE_LINE, LAST_SOURCE_COLUMN): Delete.
(INCUDED_FROM): Delete.
(INCLUDED_AT, linemap_included_at): New.
(MAIN_FILE_P): Adjust.
* directives.c (do_linemarker): Use linemap_included_at.
* line-map.c (include_at_map): New.
(line_check_files_exited): Use it.
(LAST_SOURCE_LINE_LOCATION): New (moved from header).
(linemap_add, linemap_dump, linemap_dump_location): Adjust.
gcc/
* diagnostic.c (diagnostic_report_current_module): Use
linemap_included_at. Adjust line & col discovery.
gcc/c-family/
* c-common.c (try_to_locate_new_include_insertion_point): Use
linemap_included_at.
* c-lex.c (fe_file_change): Use INCLUDED_AT.
* c-ppoutput.c (pp_file_change): Likewise.
libcpp/
* include/line-map.h (enum lc_reason): Add LC_HWM, LC_CXX_MODULE.
* line-map.c (linemap_dump): Adjust.
gcc/
* diagnostic.c (diagnostic_report_current_module): Reroll loop.
gcc/cp/
* cxx-module-server.sh: Add batching and ASYNC support.
gcc/
* doc/invoke.texi (C++ Modules): More protocol explanation
2018-05-25 Nathan Sidwell <nathan@acm.org>
Server protocol batching
gcc/
* doc/invoke.texi (C++ Modules): Document protocol batching.
gcc/cp/
* cp-tree.h (maybe_peek_import): Delete.
* lex.c (atom_preamble_prefix_peek): Drop import peeking.
* parser.c (cp_parser_module_preamble): Likewise.
* module.c (module_server::{send_command,get_response}): Deal with
batching.
(module_state::peek_import_query, maybe_peek_import): Delete.
(module_state::next_line): New.
gcc/tesutsuite/
* g++.dg/modules/atom-peek-1_[abc].C: Delete.
Merge trunk r260753.
Direct import lambda returns!
gcc/cp/
* module.c (depset::decl_key): Remove assert.
(trees_{in,out}::core_vals): Serialize type context, lambda expr and
decl size & value.
(trees_out::tree_decl): Spot voldemort returns. Ident by index.
(trees_in::tree_node): Ident by index.
(trees_in::finish_type): Don't set type context here.
(depset::hash::add_dependency): Namespaces are also ok.
* decl.c (fndecl_declared_return_type): Default to auto.
* decl2.c (no_linkage_error): Ignore imported decls.
* name-lookup.h (lookup_by_ident): Ident is index.
(get_lookup_ident): Declare.
* name-lookup.c (get_binding_or_decl): New.
(lookup_by_ident): Use it. Ident is index.
(get_lookup_ident): New.
gcc/testsuite/
* g++.dg/modules/vmort-1_[ab].C: New.
* g++.dg/modules/lambda-1_[ab].C: New.
2018-05-24 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (extract_module_decls): Don't strip template of
result.
gcc/
* doc/invoke.texi (C++ Modules): Consider batching.
gcc/
* doc/invoke.texi (C++ ModuleS): Update server docs.
gcc/cp/
* cxx-module-server.sh: Add INCLUDE.
* semantics.c (deferred_access): Move GTY.
* module.c (module_state::global_vec): Move GTY.
(module_state::modules): Likewise.
* parser.c (cp_parser_peek_module_name): Remove incomplete
partition work.
DECL_DISCRIMINATOR for local classes, merge local var disc.
gcc/cp/
* cp-tree.h (language_function): Remove x_local_names.
(DECL_DISCRIMINATOR_P): Allow IMPLICIT_TyPEDEF too.
(DECL_DISCRIMINATOR_SET_P): Delete.
(local_classes): Delete declaration.
(determine_local_discriminator): Declare.
* class.c (local_classes): Delete.
(init_class_processing): Don't init it.
* decl.c (local_names): Delete.
(local_entities): New.
(push_local_name): Replace with ...
(determine_local_discriminator): ... this.
(cp_finish_decl): Adjust.
(save_function_data, finish_function): Remove local_name handling.
* decl2.c (finish_anon_union): Set discriminator.
* mangle.c (write_unnamed_type_name): Use discriminator_for_local_entity.
(local_class_index): Delete.
(discriminator_for_local_entity): Use DECL_DISCRIMINATOR for both
cases.
(write_local_name): Adjust.
* name-lookup.c (do_pushtag): Use determine_local_discriminator.
gcc/testsuite/
* g++.dg/abi/anon5.C: New.
2018-05-23 Nathan Sidwell <nathan@acm.org>
gcc/
* diagnostic-code.h (fullname): Delete.
* diagnostic.c (fullname): Delete.
* toplev.c (general_init): Don't set it.
gcc/cp/
* module.c: Include opts.h.
(module_state::get_option_string): New.
(module_state::write_{readme,config}): Write option string.
(module_state::read_config): Check it.
(module_state::write): Adjust.
(module_server::module_server): Adjust.
gcc/testsuite/
* g++.dg/modules/flag-1_[ab].C: New.
Now with a Sneakoscope!
gcc/cp/
* module.c (depset::hash): Add a sneakoscope.
(module_state::find_dependencies): Turn it on.
(trees_out::tree_decl): Check it.
gcc/testsuite/
* g++.dg/modules/local-1_[ab}.C: New.
gcc/cp/
* cxx-module-server.sh: Remove --no-default.
* module.c (module_server::send_command): New.
(module_server::{reset,handshake,import_export_query,export_done}):
Use it.
gcc/testsuite/
* g++.dg/modules/atom-peek-1_[bc].C: Adjust scans.
* g++.dg/modules/indirect-1_c.C: Likewise.
2018-05-22 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cxx-module-server.sh: Add --no-compile, --no-default and
--mapping options.
gcc/cp/
* module.c (depset::defn_key): Add is_def parm.
(depset::hash::add_definition): Delete.
(depset::hash::add_dependency): Add either decl or defn.
(depset::hash::add_binding): Use add_dependency.
(cluster_cmp): Swap defns and decls.
(cluster_tag): Delete ct_voldemort, ct_no_decl.
(module_state::{read,write}_cluster): Voldemorts are implicit.
(module_state::write): Adjust.
gcc/testsuite/
* g++.dg/modules/unnamed-1_b.C: Adjust module scan.
Revert lazy definition patches. Once one gets into template land
it's all very brittle. We end up with an unmaintained difference
betweek 'we need the definition right now', and 'we need the
definition at some point'. I end up not being able to maintin the
SCC dependency graph, and my head melted, looking a the rat hole
that was appearing. Until proved otherwise, there are other
things to get on with.
gcc/cp/
* cp-tree.h (DECL_MODULE_LAZY_DEFN, HAS_DECL_MODULE_LAZY_DEFN_P)
(MAYBE_DECL_MODULE_LAZY_DEFN): Delete.
(struct lang_decl_min): Remove lazy_module_defn field.
(lazy_load_defn): Delete decl.
* constexpr.c (cxx_eval_call_expression): Remove lazy loading.
* decl2.c (decl_defined_p, mark_used): Likewise.
* module.c (depset::hash::add_definition): Remove DEFERRED parm.
(trees_in::{pre,}seed): Delete.
(trees_out::seeding{,_p}): Delete.
(trees_out::unmark_trees): Seeding not needed.
(trees_out::{begin,end}): Delete seeding variants.
(trees_out::seed): Remove.
(trees_out::insert): Return val, remove seeding.
(trees_{in,out}::lang_decl_vals): Remove seeding.
(has_definition): Return bool.
(ct_seed_decl, ct_self_used): Delete.
(module_state::{read,write}_cluster): Remove lazy handling.
(module_state::{find_dependencies,write}): Adjust.
(module_state::check_read): Adjust.
(module_state::lazy_load, lazy_load_defn): Delete.
* ptree.c (cxx_print_decl): Remove lazy defn index.
Almost lazy function definitions.
gcc/cp/
* constexpr.c (cxx_eval_call_expression): Maybe lazy load.
* decl2.c (decl_defined_p): Lazy definitions are ok.
(mark_used): Try and lazy load.
* module.c (module_state::lazy_load): Lazy load a definition.
(trees_out::seed): Mark template result.
(trees_in::tree_node): Adjust mark_used.
(module_state::write_cluster): Adjust.
(module_state::read_cluster): Accept ct_self_used.
(lazy_load_defn): New.
gcc/cp/
* module.c (trees_out::seed): Reimplement mechanim.
(trees_out::{begin,end}): Don't turn seeding on/off here.
(trees_out::unmark_trees): Add logging.
(trees_in::preseed): Fix addition calculation.
(module_state::write_cluster): Adjust lazy defn seeding.
(module_state::read_cluster): Add lazy defn seeding.
(module_State::find_dependencies): Adjust.
2018-05-21 Nathan Sidwell <nathan@acm.org>
libcpp/
* directives.c (struct if_stack): Add hash_loc field.
(PEEKED): Replace with ...
(PEEK_INVISIBLE): ... this. Inverted sense.
(DIRECTIVE_TABLE): Update.
(linemarker_dir): Add PEEK_INVISIBLE.
(_cpp_handle_directive): Correctly handle if nests.
gcc/testsuite/
* g++.dg/modules/atom-preamble-2_[def].C: New.
gcc/cp/
* cp-tree.h (HAS_DECL_MODULE_LAZY_DEFN_P): New.
(MAYBE_DECL_MODULE_LAZY_DEFN): Use it.
* module.c (trees_in::{pre,}seed): Adjust.
(trees_out::{begin,end}): New overloads.
(trees_out::unmark_trees): Adjust.
(trees_out::{preseed,insert}): Correct force marking.
(trees_in::tree_node): Robustify.
(module_state::write_cluster): Fix name, better messages,
(module_state::read_cluster): Use ct_no_decl.
(module_state::write): Use HAS_DECL_MODULE_LAZY_DEFN_P.
(module_state::check_read): Use decl if it makes sense.
Write lazy decls (no reading yet)
gcc/cp/
* module.c (elf_out::strtab::named_decl): Add IS_DEFN parm.
(elf_out::named_decl): Likewise.
(elf_out::strtab::write): Adjust.
(FIXED_LIMIT): New.
(trees_out::set_seed): Delete.
(trees_out::{pre,un,}seed): New.
(trees_out::insert): Adjust for seeding.
(trees_out::tree_ref): Likewise.
(cluster_tag): Add ct_lazy.
(module_state::write_cluster): Preseed decls of lazy defns.
(module_state::find_dependencies): Adjust seeding changes.
(module_state::write): Determine lazy defn section numbers.
2018-05-20 Nathan Sidwell <nathan@acm.org>
libcpp/
* internal.h (_cpp_handle_directive): Add HASH_LOC arg.
* directives.c (_cpp_handle_directive): Add HASH_LOC arg, store it.
* init.c (read_original_filename): Adjust _cpp_handle_directive call.
* lex.c (_cpp_lex_token): Likewise.
* traditional.c (_cpp_scan_out_logical_line): Likewise.
* directives-only.c (_cpp_preprocess_dir_only): Likewise.
Import peeking
gcc/c-family/
* c-lex.c (c_lex_with_flags) <case CPP_STRING>: Check
C_LEX_STRING_IS_HEADER.
* c-pragma.h (C_LEX_STRING_IS_HEADER): New flag.
gcc/cp/
* cp-tree.h (HEADER_STRING_LITERAL_P): Delete.
(maybe_peek_import): Declare.
* cxx-module-server.sh: Adjust.
* lex.c (atom_preamble_prefix_peek): Add peeking state.
* module.c (module_server::peek_import_query): New.
(make_flat_name): New. Broken out of ...
(module_state::do_import): ... here. Call it.
(maybe_peek_import): New.
* parser.c (cp_parser_peek_module_name): New.
(cp_parser_module_name): Use it.
(cp_parser_import_declaration): Adjust.
(cp_parser_module_preamble): Do peeking.
gcc/
* doc/invoke.texi (C++ Modules): Tweak server protocol
gcc/testsuite/
* g++.dg/modules/atom-peek-1_[abc].C: New.
* g++.dg/modules/mod-decl-1.C: Adjust diags.
* g++.dg/modules/p0713-2.C: Likewise.
* g++.dg/modules/proclaim-1.C: Likewise.
Diagnose pragmas ending preamble.
libcpp/
* lex.c (cpp_peek_token_with_location): Set peeked_location to
incoming location. Fix pragma unwind.
gcc/cp/
* cxx-module-server.sh: Add new commands.
* lex.c (atom_preamble_prefix_peek): Note trailing pragma.
gcc/
* doc/invoke.text (C++ Modules): More server commands.
gcc/testsuite/
* g++.dg/modules/atom-pragma-[123].C: New.
2018-05-19 Nathan Sidwell <nathan@acm.org>
Parse after tokenizing
libcpp/
* lex.c (cpp_peek_token_with_location): Adjust for compiler warning.
gcc/cp/
* parser.c (module_preamble_end_loc): Rename to ...
(module_marker_loc): ... here.
(cp_parser_module_declaration): Reimplement.
(cp_parser_import_declaration): Adjust.
(cp_parser_module_preamble): Don't parse here. Add artificial end
marker.
(cp_parser_declaration_seq_opt): Adjust for atom.
(cp_parser_fill_main): Whole buffer is to be parsed.
(c_parse_file): Don't set end_loc here.
gcc/testsuite/
* g++.dg/modules/atom-decl-1.C: Adjust diagnostics.
* g++.dg/modules/atom-preamble-1.C: Likewise.
* g++.dg/modules/mod-decl-1.C: Likewise.
* g++.dg/modules/p0713-[23].C: Likewise.
2018-05-18 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (trees_out::maybe_insert_typeof): New.
(trees_out::{force_,maybe_,}insert): Merge, adjust callers.
(trees_out::tree_decl): Use maybe_insert_typeof.
(module_state::write_cluster): Likewise.
gcc/testsuite/
* g++.dg/modules/indirect-3_c.C: Adjust scans.
gcc/cp/
* module.c (module_state::write_cluster): Break apart unnamed
numbering from marking.
(module_state::write): Break apart cluster sizing from section
numbering.
gcc/cp/
* module.c (trees_out::mark_node): Lose walk_into parm. Adjust
all callers.
(module_state::write_cluster): Assert binding already marked.
gcc/cp/
* module.c (module_state::mark_definition): Remove include_decl
parm.
(module_state::mark_{template,function,var,class,enum}_def): Likewise.
gcc/cp/
* module.c (trees_in::{preseed,seed}): New.
(trees_out::seeding): New member.
(trees_out::seeding_p): New predicate.
(trees_out::unmark_trees): Add trees_in parm to preseed.
(trees_out::end): Add trees_in parm.
(trees_out::set_seed): New.
(trees_out::tree_decl): Check seeding_p.
(module_state::find_dependencies): Preseed the decl of a defn.
gcc/testsuite/
* g++.dg/modules/defer-1.C :New.
gcc/cp/
* module.c (depset::hash::add_definition): Add DEFERRABLE parm.
(has_definition): Return tristate.
(depset::hash::add_{dependency,binding}): Adjust.
(module_state::find_dependencies): Refactor.
Add lazy_module_defn cookie.
* cp-tree.h (DECL_MODULE_LAXY_DEGN, MAYBE_DECL_MODULE_LAZY_DEFN): New.
(struct lang_decl_min): Add lazy_module_defn field.
* module.c (trees_{in,out}::lang_decl_vals): Serialize it.
* ptree.c (cxx_print_decl): Print it.
gcc/cp/
* cp-tree.h (ovl_op_flags, ovl_op_code): Reindent.
* lex.c (atom_preamble_prefix_peek): FIXME.
* parser.c (cp_parser_module_preamble): FIXME.
* module.c (bytes_out::streaming_p (): New.
(trees_out::streaming_p): Delete.
(tt_backref): Delete. Update uses to know -ve == backref
(module_state::write_cluster): Some refactoring.
2018-05-16 Nathan Sidwell <nathan@acm.org>
Preamble rescanning!
gcc/
* configure.ac: Look for execv.
* config.in, configure: Rebuilt.
* toplev.h (original_argc, original_argv): Declare.
* toplev.c (original_argc, original_argv): Declare.
(toplev::main): Set them.
doc/invoke.texi (EE) Rename to ...
(fmodule-preamble): ... this.
(C++ Modules): Document RESET message. Document N,N.
gcc/c-family/
* c.opt (EE): Rename to ...
(fmodule-preamble) ... here.
(fmodule-preamble=): New hidden option.
* c-ppoutput.c (scan_translation_unit): Use cpp_pop_directives.
gcc/cp/
* cp-tree.h (atom_preamble_prefix_peek): Add from-parser parm.
(maybe_repeat_preamble): Declare.
* cp-lang.c (atom_preamble_fsm): Adjust.
* cxx-module-server.sh (RESET): New command.
* lang-specs.h (@c++): Adjust EE->fmodule-preamble.
* lex.c (atom_preamble_prefix_peek): Add from-parser parm. Check
flag_module_preamble. Call maybe_repeat_preamble.
* module.c: #include "toplev.h"
(module_server_name): Is const.
(module_server::module_server): Copy command. Support N,N for two
pipes.
(module_server::make): Adjust.
(module_server::reset): New.
(module_server::fini): Add reset arg. Reset.
(maybe_repeat_preamble): New.
(handle_module_option): Adjust.
* parser.c (cp_parser_module_preamble): Adjust.
gcc/testsuite/
* g++.dg/modules/cpp-preamble-[1-8].C: Adjust options.
* g++.dg/modules/atom-rescan-1.C: New.
* g++.dg/modules/atom-no-rescan-1.C: New.
2018-05-15 Nathan Sidwell <nathan@acm.org>
Detect cpp directives at end of preamble
libcpp/
* include/cpplib.h (cpp_peek_token_with_location): Declare.
(cpp_pop_directives): Declare.
* internal.h (struct cpp_reader): Add peeked_directive field.
* directives.c (PEEKED): New.
(DIRECTIVE_TABLE): Add it.
(_cpp_handle_directive): Set peeked_directive.
(cpp_pop_directives): New.
* lex.c (cpp_peek_token): Wrapper around ...
(cpp_peek_token_with_location): ... this.
gcc/cp/
* cp-lang.c (atom_preamble_fsm): Update for new state transitions.
* lex.c (atom_preamble_prefix_peek): Check peeked directives.
* parser.c (cp_parser_module_preamble): Update.
gcc/testsuite/
* g++.dg/modules/cpp-preamble-1.C: Add diag
* g++.dg/modules/cpp-preamble-[678].C: New.
libcpp/
* include/cpplib.h (cpp_in_macro_expansion_p): Declare.
* macro.c (in_macro_expansion_p): Rename to ...
(cpp_in_macro_expansion_p): ... here. Externalize.
(cpp_get_token_1): Adjust.
* internal.h: Update docs.
gcc/
* langhooks.h (struct lang_hooks): Adjust preprocess_preamble.
gcc/c-family/
* c-ppoutput.c (scan_translation_unit): Pass token location to
preamble hook.
gcc/cp/
* cp-lang.c (atom_preamble_fsm): Pass token loc through.
* cp-tree.h (atom_preamble_prefix_next): Take token loc.
* lex.c (atom_preamble_prefix_next): Take token loc. Warn if
ending inside macro.
* parser.c (cp_parser_module_preamble): Adjust.
gcc/testsuite/
* g++.dg/modules/cpp-preamble-5.C: New.
gcc/
* langhooks.h (struct lang_hooks): Adjust preprocess_preamble.
gcc/cp/
* cp-tree.h (atom_preamble_prefix_{peek,next}): Declare.
* cp-lang.c (atom_preambls_fsm): Adjust args. Use
atom_preamble_prefix_{peek,next}.
* lex.c (atom_preamble_prefix_len): Turn into ...
(atom_preamble_prefix_peek): ... this.
(atom_preamble_prefx_next): New.
* parser.c (cp_parser_module_preamble): Adjust.
gcc/c-family/
* c-ppoutput.c (scan_translation_unit): Adjust
gcc/testsuite/
* g++.dg/modules/atom-preamble-2_c.C: New.
* g++.dg/modules/cpp-preamble-4.C: New.
gcc/cp/
* Make-lang.in: Dont sed server version
* module.c: Use fixed server version.
* cxx-module-server.sh: Likewise.
gcc/cp/
* module.c (trees_out::dep_walk_p): Replace with ...
(trees_out::{streaming,depending}_p): ... these. Update callers.
2018-05-14 Nathan Sidwell <nathan@acm.org>
Objectify module server.
gcc/cp/
* module.c (class module_server): New.
(server_read, server_write, server_pex, server_size)
(server_buffer, server_pos, server_end)
(server_response, server_token, server_word, server_unexpected)
(server_error, server_init, server_fini): Move into module_server class.
(server_module_filename): Delete.
(module_state::do_import): Use module_server::import_query.
(finish_module): Use module_server::export_{query,done}.
gcc/testsuite/
* g++.dg/modules/indirect-1_c.C: Tweak.
gcc/
* doc/invoke.texi (C++ Modules): Clarify server docs.
gcc/cp/
* cxx-module-server.sh: Robustify.
* module.c (server_module_filename): Send from location.
gcc/testsuite/
* g++.dg/modules/import-2.C: Tweak.
2018-05-13 Nathan Sidwell <nathan@acm.org>
Redo the server protocol.
gcc/cp/
*cxx-module-server.sh: Update protocol.
* module.c (elf_out::end): Protect from NULL stream.
(server_size, server_buffer, server_pos, server_end): New.
(server_response, server_token, server_word): New.
(server_end_p): New.
(server_malformed): Delete.
(server_init, server_module_filename, server_done): Adjust.
(module_state::do_import): Adjust.
gcc/
* doc/invoke (C++ Modules): Update server protocol.
2018-05-12 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (module_server): Make pointer to non-const.
(server_fini, handle_module_option): Add const_cast.
(server_init): Write into module_server. strdup if it came from
environment.
Rename oracle->server, thanks Richard Smith
gcc/
* doc/invoke.texi (fmodule-oracle): Rename.
gcc/c-family/
* c.opt (fmodule-oracle): Rename.
gcc/cp/
* Make-lang.in (cxx-module-oracle): Rename.
* cxx-module-oracle.sh: Rename.
* module.c (ORACLE_VERSION, module_oracle, oracle_read)
(oracle_write, oracle_pex): Rename.
(oracle_fini, oracle_init, oracle_response, oracle_unexpected)
(oracle_malformed, oracle_module_filename, oracle_done): Rename.
Direct import filenames are stored.
gcc/cp/
* module.c (bytes_out::str): Add overload.
(bytes_in::str): Robustify.
(module_state::{read,write}_imports): New.
(noisy_p): New.
(module_state::announce, oracle_init): Use noisy_p.
(oracle_module_file): Rename to ...
(oracle_module_filename): ... here. Adjust parms, return
filename.
(module_state::write_readme): Write import filename.
(module_state::{read,write}_config): Use {read,write}_imports.
(module_state::do_import): Add FILENAME arg, adjust.
(finish_module): Adjust.
gcc/testsuite/
* g++.dg/modules/import-1_e.C: Adjust scan.
* g++.dg/modules/indirect-1_c.C: Verify no query on indirect import.
2018-05-11 Nathan Sidwell <nathan@acm.org>
Remove remaining knowledge of module file names.
gcc/cp/
* module.c (MOD_FNAME_SFX, MOD_FNAME_DOT): Delete.
(module_state): Remove srcname.
(module_state::print_map): Delete.
(oracle_query_module, oracle_stream, find_module_file): Merge to ...
(oracle_module_file): ... this.
(make_module_file, find_file): Delete.
(module_state::do_import): Adjust.
(finish_module): Likewise.
(Kill -fmodule-output -- use the oracle.
gcc/c-family/
* c.opt (fmodule-output): Delete.
gcc/
* doc/invoke.texi (C++ Dialect Options): Delete -fmodule-output.
(C++ Modules): Likewise.
gcc/cp
* module.c (module_output): Delete.
(module_state::do_import): Don't check it.
(finish_module): Likewise.
(handle_module_options): Likewise.
gcc/testsuite/
* g++.dg/modules/fmod-out-1_[ab].C: Delete.
Kill -fmodule-file -- use the oracle.
gcc/c-family/
* c.opt (fmodule-map-dump): Delete.
(fmodule-file): Delete.
gcc/cp/
* module.c (module_file_args, module_map_dump): Delete.
(parse_module_mapping): Delete.
(add_module_mapping): Delete.
(init_module_processing): Delete module map init.
(handle_module_option): Delete module map options.
gcc/
* doc/invoke.texi (C++ Dialect Options): Delete -fmodule-file.
(C++ Modules): Likewise.
gcc/testsuite/
* g++.dg/modules/fmod-file-1_[ab].C: Delete.
* g++.dg/modules/fmod-out-1_[ab].C: Adjust.
Kill -fmodule-path and CXX_MODULE_PATH -- use the oracle.
gcc/
* doc/invoke.texi (C++ Dialect Options): Remove -fmodule-path.
(C++ Modules): Likewise.
* incpath.h (INC_CXX_MPATH): Delete.
(clean_cxx_module_path): Delete.
* incpath.c (clean_cxx_module_path): Delete.
gcc/c-family/
* c-opts.c (c_common_post_options): Don't clean_cxx_module_path.
* c.opt (fmodule-path): Delete.
gcc/cp/
* module.c (module_path, module_path_max): Drop.
(find_file): Adjust.
(init_module_processing): Drop module path init.
(handle_module_option): Drop module_path.
gcc/cp/
* Make-lang.in (cxx-module-oracle): Sed version.
(cxx_module-wrapper): Delete.
* cxx-module-oracle: Allow dev versions.
* cxx_module-wrapper: Delete.
* module.c (ORACLE_VERSION): New.
(oracle_init): Use MODULE_STAMP if available.
A more conventional protocol
gcc/
* doc/invoke.texi (C++ Modules): Update oracle protocol.
gcc/cp/
* cxx-module-oracle.sh: Update protocol.
* module.c (oracle_response): Parse response.
(oracle_unexpected, oracle_malformed): New.
(oracle_init): Check version.
(oracle_query_module): Update.
Kill module wrapper -- you should use the oracle.
gcc/
* doc/invoke.texi (C++ Dialect Options): Remove -fmodule-wrapper.
* gcc.h (driver::maybe_putenv_CXX_MODULE_WRAPPER): Delete decl.
* gcc.c (maybe_putenv_CXX_MODULE_WRAPPER): Delete.
(driver::main): Don't call it.
gcc/cp/
* module.c (module_wrapper): Delete.
(find_module_file): Drop wrapper spawning.
(init_module_processing): Drop wrapper initialization.
(handle_module_option): Drop wrapper option.
gcc/c-family/
* c.opt (fmodule-wrapper=): Delete.
gcc/testsuite/
* g++.dg/modules/modules.exp (DEFAULT_MODFLAGS): Drop -fmodule-wrapper.
* g++.dg/modules/main-[123]-aux.cc: Delete.
* g++.dg/modules/main-[123]-map: Delete.
* g++.dg/modules/main-[123]_a.C: Delete.
gcc/c
* config.in: Rebuilt too.
gcc/
* diagnostic-core.h (fullname): Declare.
* diagnostic.c (fullname): Define.
* toplev.c (general_init): Set it.
gcc/cp/
* cxx-module-oracle.sh: More messages.
* module.c (oracle_init): When defaulting, expect to be next to
cc1plus.
(oracle_stream): Always try and init the oracle.
gcc/testsuite/
* g++.dg/modules/main_a.C: Adjust for oracle use.
gcc/
* configure.ac: Check for AF_UNIX and AF_INET6.
* configure: Rebuilt.
* doc/invoke.texi (C++ Modules): Update oracle.
gcc/cp/
* module.c: Check HOST_HAS_AF_{UNIX,INET6}.
2018-05-10 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c: Include socket headers.
(oracle_init): Create and connect local or ipv6 socket.
gcc/
* doc/invoke.texi (C++ Modules): Document oracle socket options.
gcc/cp/
* module.c (module_prefix): Delete.
(make_module_filename): Don't handle it.
(handle_module_option): Nor here.
gcc/c-family/
* c.opt (fmodule-prefix): Delete.
gcc/
* doc/invoke.texi (C++ Dialect Options): Remove -fmodule-prefix.
(C++ Modules): Remove -fmodule-prefix
Oracle!
gcc/cp/
* Make-lang.in (cxx-module-oracle): New rule.
* cxx-module-oracle.sh: New.
* module.c (module_oracle): New flag.
(oracle_read, oracle_write, oracle_pex): New vars.
(oracle_init, oracle_fini, oracle_response, oracle_query_module)
(oracle_done, oracle_stream): New.
(find_module_file, finish_module): Use oracle.
(handle_module_option): Store oracle option.
gcc/
* doc/invoke.texi (C++ Dialect Options): Add -fmodule-oracle.
(C++ Modules): Document oracle.
gcc/c-family/
* c.opt (fmodule-oracle=): New.
2018-05-09 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (module_state::get_module): Add insert arg.
(module_state::{read,write}_config): Stream direct imports first.
gcc/testsuite/
* g++.dg/modules/import-1_[ce].C: Adjust.
* g++.dg/modules/mod-imp-1_[cd].C: Adjust.
Add -EE
gcc/cp/
* cp-lang.c (atom_preamble_fsm): New.
(LANG_HOOKS_PREPROCESS_PREAMBLE): Override.
* cp-tree.h (atom_preamble_prefix_len): Declare.
* lang-specs.h (@c++): Pass -EE when preprocessing.
* lex.c (atom_preamble_prefix): New. Broken out of ...
* parser.c (cp_parser_module_preamble): ... here. Use it.
* module.c (handle_module_option): EE implies atom.
gcc/c-family/
* c-ppoutput.c: Include langhook.h.
(scan_translation_unit): Use lang_hooks.preprocess_preamble.
* c.opt (EE): New.
gcc/
* langhooks-def.h (LANG_HOOKS_PREPROCESS_PREAMBLE): Define.
(LANG_HOOKS_INITIALIZER): Add it.
* langhooks.h (struct lang_hooks): Add preprocess_preamble.
* doc/cppopts.texi (EE): Document.
* doc/invoke.texi (Preprocessor Options): Add -EE.
(C++ Modules): Document -EE.
gcc/testsuite/
* g++.dg/modules/cpp-preamble-[123].C: New.
gcc/cp/
* cp/parser.c (module_preamble_end_loc): New var.
(cp_parser_module_declaration): Check it.
(cp_parser_import_declaration): Likewise.
(cp_parser_module_preamble): Deal with FILENAME enabling.
(cp_parser_declaration_seq_op): Set it.
(cp_parser_declaration): Parse out-of-preamble module & import
decls.
(cp_parser_initial_pragma): Don't check modules here.
(c_parse_file): Set module_preamble_end_loc.
gcc/c-family/
* c-lex.c (c_lex_with_flags): Remove C_LEX_FILENAME handling.
* c-pragma.h (C_LEX_FILENAME): Delete.
gcc/testsuite/
* g++.dg/modules/atom-decl-[123].C: Adjust.
* g++.dg/modules/atom-preamble-3.C
* g++.dg/modules/atom-preamble-4.C: New.
* g++.dg/modules/mod-decl-1.C: Adjust.
* g++.dg/modules/p0713-[23].C: Adjust.
2018-05-08 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* parser.c (cp_parser_module_preamble): Check for macros
gcc/testsuite/
* g++.dg/modules/atom-preamble-3.C: New.
gcc/cp/
* parser.c (cp_parser_module_preamble): New.
(cp_parser_fill_main): Remove atom parsing here.
(c_parse_file): Adjust.
gcc/testsuite/
* g++.dg/modules/atom-preamble-1.C: New.
* g++.dg/modules/atom-preamble-2_[ab].C: New.
2018-05-07 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (depset): Add is_unnamed and refs_unnamed flags.
(depset::hash::add_dependency): Set them here.
(cluster_cmp): Change order again.
(module_state::write_cluster): Check refs_unnamed here.
gcc/testsuite.
* g++.dg/modules/scc-1.C: Readjust.
gcc/cp/
* module.c (depset::tarjan::connect): Use section==0 for done, not
top bit of cluster.
gcc/testsuite/
* g++.dg/modules/unnamed-1_b.C: Fix scan.
2018-05-06 Nathan Sidwell <nathan@acm.org>
Horcruxes!
gcc/cp/
* module.c (FIXED_LIMIT): Remove.
(trees_out::{,maybe_}insert): Make public.
(trees_out::maybe_mark_unnamed): Delete.
(trees_out::tree_ref): Remove voldemort handling.
(trees_in::tree_node): Likewise.
(tree_tag): Remove tt_voldemort.
(trees_out::maybe_tag_decl_type): Move back into ..
(trees_out::tree_decl): ... here.
(cluster_tag): Add voldemort & horcruxes.
(module_state::{read,write}_cluster): Deal with horcruxes.
gcc/testsuite/
* g++.dg/modules/unnamed-1_[ab].C: Adjust scans.
2018-05-04 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (trees_out::maybe_tag_decl_type): New, broken out of ...
(trees_out::tree_decl): ... here. Call it.
(trees_out::tree_ref): Use it.
gcc/testsuite/
* g++.dg/modules/unnamed-1_[ab].C: New.
gcc/cp/
* ptree.c (cxx_print_decl): Show module.
* module.c (tree_tags): Add tt_voldemort.
(FIXED_LIMIT): New.
(trees_out::maybe_mark_unnamed): New.
(module_state::unnamed): New field.
(module_state::{read,write}_unnamed): New.
(module_state::{read,write}_config): Serialize unnamed count.
(module_state::{read,write}_cluster): Determine unnamedness.
(trees_out::tree_ref): Check for unnamed.
(trees_in::tree_node): Add tt_voldemort.
(depset::hash::add_dependency): Don't add decl to its binding.
(cluster_cmp): Reorder, again.
(cluster_tag): Add ct_unnamed.
(module_state::{read,write}): Adjust.
gcc/testsuite/
* g++.dg/modules/namespace-2.C: Adjust scan.
* g++.dg/modules/unnamed-[12].C: New.
* g++.dg/modules/scc-1.C: Unadjust.
gcc/cp/
* module.c (module_state::mark_definition): Add include_decl arg.
(module_state::mark_{template,function,var,class,enum}_def): Likewise.
(cluster_cmp): Reorder decl < defn < bind.
(enum cluster_tag): New.
(module_state::{read,write}_cluster): Use it.
gcc/testsuite/
* g++.dg/modules/scc-1.C: Adjust.
2018-05-03 Nathan Sidwell <nathan@acm.org>
gcc/c-family
* c-cppbuiltin.c (c_cpp_builtins): Update __cpp_modules value,
define __cpp_modules_{ts,atom} as selected.
gcc/testsuite/
* g++.dg/modules/atom-check-1_a.C: Check for __cpp_modules_atom.
* g++.dg/modules/atom-check-1_b.C: Check for __cpp_modules_ts.
gcc/cp/
* module.c (cluster_size): Delete.
(module_state::write_{cluster,namespaces,bindings}): Adjust.
(module_state::write): Precalculate section numbers.
2018-05-02 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cxx-module-wrapper.sh: Require bash.
Fragment depsets more.
gcc/cp/
* module.c (depset): Replace container & decls with key. Adjust
hashing etc.
(depset::{binding,decl,defn}_key): New.
(depset::is_{binding,decl,defn}): New.
(depset::hash::{maybe_insert,find}): Take a key.
(depset::hash::add_definition): Reimplement.
(depset::hash::add_dependency): Reimplement.
(depset::hash::add_binding): Reimplement.
(cluster_cmp): Extend.
(module_state::write_{cluster,namespaces,bindings}): Adjust.
(module_state::{add_writables,find_dependencies}): Adjust.
gcc/cp/
* module.c (depset::tarjan): Replace binds, spaces & defs fields
with plain result field.
(depset::tarjan::connect): Don't categorize SCCs here.
(cluster_size): New.
(module_state::write_cluster): Take SIZE arg.
(module_state::write): Use cluster_size, split out namespaces here.
2018-05-01 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (trees_out::tree_{type,decl,ctx}): Separate need_body
and owner args.
(trees_{in,out}::core_vals): Don't stream TYPE_CONTEXT.
(trees_in::finish_type, module_state::read_class_def): Reconstruct
it here.
(trees_out::tree_binfo): Use tree_ctx.
gcc/cp/
* module.c (trees_out::tree_decl): Write innermost args.
gcc/testsuite/
* g++.dg/modules/indirect-4_[abc].C: New.
gcc/cp/
* module.c (module_state::occupy): Do not set filename here.
(search_module_path): Rename to ...
(find_file): ... here. Search for bmis too.
(find_module_file): Use find_file.
(add_module_mapping, finish_module): Adjust.
gcc/
* doc/invoke.texi (C++ Modules): Document search path and prefix.
gcc/cp/
* Make-lang.in (c++.install-common): Install wrapper into
libexecsubdir.
Merge trunk r184995.
2018-04-30 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (trees_out::tree_decl): Adjust for member templates.
(trees_out::tree_node): Don't deal with templates here.
(trees_in::tree_node): Adjust template instantiations here.
(module_state::mark_template_def): Adjust.
gcc/testsuite/
* g++.dg/modules/indirect-2_b.C: Adjust module scan.
* g++.dg/modules/indirect-3_[abc].C: New.
2018-04-27 Nathan Sidwell <nathan@acm.org>
Merge trunk r259710.
2018-04-26 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (DECL_TEMPLATE_INFO): Correct comment.
* module.c: Update description, general format cleanups.
(elf_out::SECTION_ALIGN): New.
(elf_out::pad): Use it.
* pt.c (build_template_decl): Make static.
2018-04-25 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (maybe_get_template): Delete.
(trees_out::tree_decl): Move dependency building into named-decl
handling. Don't walk into namespaces.
gcc/cp/
* module.c (trees_out::tree_node): Reorder.
2018-04-24 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (trees_out::tree_decl): Deal with templated types.
(tree_in::tree_node): Likewise.
gcc/testsuite/
* g++.dg/modules/indirect-2_[abc].C: Add template class.
gcc/cp/
* module.c (enum tree_tag): Add tt_template.
(trees_out::tree_decl): Emit tt_template as needed.
(trees_in::tree_node): Read tt_template.
gcc/testsuite/
* g++.dg/modules/class-3_b.C: Adjust.
* g++.dg/modules/indirect-1_b.C: Adjust.
* g++.dg/modules/indirect-2_[abc].C: New.
gcc/cp/
* module.c (trees_out::core_vals): Check module of type context.
(trees_out::tree_decl): Assert we can find the named decl.
(module_state:read_config): Move defrosting to ...
(module_state::read): ... here.
2018-04-23 Nathan Sidwell <nathan@acm.org>
gcc/testsuite/
* g++.dg/modules/indirect-1_[abc].C: Add exported constant.
gcc/cp/
* name-lookup.c (lookup_by_ident): Look in enumerals.
gcc/testsuite/
* g++.dg/modules/indirect-1_[abc].C: Add enum.
gcc/cp/
* module.c (trees_{in,out}::core_vals): More FUNCTION_DECL fields.
gcc/testsuite/
* g++.dg/modules/indirect-1_[abc].C: Add virtual class.
gcc/cp/
* module.c (dumper::pop): Don't print trailing line.
gcc/cp/
* module.c (trees_{in,out}::core_vals): Allow NULL-context VAR_DECLS.
gcc/testsuite/
* g++.dg/modules/indirect-1_[abc].C: Add class.
gcc/cp/
* module.c (enum tree_tag): Remove tt_namespace.
(trees_out::tree_{value,decl,type,ref,ctx}): New. Broken out of ...
(trees_out::tree_node): ... here. Use them.
(trees_out::core_vals): Use tree_ctx.
(module_state::write_cluster): Use tree_ctx.
* name-lookup.h (find_imported_namespace): Delete.
* name-lookup.c (find_imported_namespace): Delete.
gcc/testsuite/
* g++.dg/modules/class-3_d.C: Adjust scans.
* g++.dg/modules/indirect-1_[abc].C: New.
gcc/cp/
* module.c (module_state::importing): New.
(module_state::init): Lazy_open is not just for laziness.
(module_state::read_config): Call maybe_defrost.
(module_state::maybe_defrost): New, broken out of ...
(module_state::load_section): ... here. Call it.
(module_state::freeze_an_elf): Look in importing stack too.
gcc/testsuite/
* g++.dg/modules/nest-1_[abc].C: New.
2018-04-11 Nathan Sidwell <nathan@acm.org>
gcc/c-family/
* c-lex.c (c_lex_with_flags): Check C_LEX_FILENAME. Deal with
CPP_HEADER_NAME.
* c-pragma.h (C_LEX_FILENAME): New.
gcc/cp/
* parser.c (cp_parser_fill_main): Ask for C_LEX_FILENAME.
(cp_parser_import_declaration): Parse legacy import names.
* cp-tree.h (HEADER_STRING_LITERAL_P): New.
libcpp/
* include/cpplib.h (cpp_enable_filename_token): Declare.
* macro.c (cpp_enable_filename_token): Define.
pfile->state.angled_headers.
gcc/testsuite/
* g++.dg/modules/atom-inc-1.C: New.
gcc/cp/
* module.c (module_state::lazy_depth): Remove.
(module_state::lazy_open): Make countdown value.
(module_state::init): Use getrlimit to default PARAM_LAZY_MODULES.
gcc/
* doc/invoke.texi (C++ Modules): Document lazy loading.
* params.def (PARAM_LAZY_MODULE_FILES): Rename to ...
(PARAM_LAZY_MODULES): ... here.
gcc/testsuite/
* g++.dg/modules/freeze-1_d.C: Fix.
2018-04-10 Nathan Sidwell <nathan@acm.org>
Protect against too-many lazy loadings.
gcc/
* params.def (PARAM_LAZY_MODULE_FILES): Define.
gcc/cp/
* module.c: Include params.h
(elf::has_error): Return the error code.
(elf_in): Add device, inode & size fields.
(elf_in::{is_frozen,freeze,defrost}): New.
(module_state): Add lru, lazy_lru, lazy_open fields.
(module_state::{load_section,freeze_an_elf}): New.
(module_state::{read,lazy_load}): Adjust.
(module_state::check_read): Check for EMFILE.
(module_state::do_import): Adjust.
gcc/testsuite/
* g++.dg/modules/freeze-1_[a-d].C: New.
gcc/cp/
* parser.c (cp_parser_declaration_seq_opt): Remove ATOM handling here.
Incremental tokenization of ATOM preamble.
gcc/c-family/
* c-pragma.h (C_LEX_STRING_FILENAME): New.
gcc/cp/
* cp-tree.h (module_file_nest): Declare.
* lex.c (module_file_nest): Define.
* module.c (module_state::{push,pop}_location): Use it.
* parser.c (cp_lexer_fill_main): Rename to ...
(cp_parser_file_main): ... this. Take parser not lexer. Read &
parse one atom declaration at a time.
(cp_parser_declaration_seq_opt): Disable atom preamble here.
(c_parse_file): Adjust.
libcpp/
* files.c (cpp_module_file): New.
* include/cpplib.h (cpp_module_file): Declare.
2018-04-09 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* parser.c (cp_lexer_new_main): Replace with ...
(cp_lexer_fill_main): ... this. Move initial pragma processing to
...
(c_parse_file): ... here.
(cp_parser_new): Adjust.
gcc/cp/
* parser.c (cp_lexer_get_preprocessor_token): Take cpp-flags
directly.
(cp_lexer_new_main, cp_parser_initial_pragma): Adjust.
gcc/cp/
* cp-tree.h (modules_p, modules_atom_p): New predicates.
* decl.c (cxx_init_decl_processing): Use modules_p.
* decl2.c (c_parse_final_cleanups): Likewise.
* lex.c (init_reswords):
* module.c (module_state::write_readme): Use modules_atom_p.
(module_state::{read,write}_config): Likewise.
(handle_module_option): Don't handle OPT_fmodules_atom here,
* name-lookup,c (reuse_namespace, make_namespace_finish): Use
modules_p.
* optimize.c (maybe_clone_body): Likewise.
* semantics.c (expand_or_defer_fn_1): Likewise.
* parser.c (cp_parser_diagnose_invalid_type_name)
(cp_parser_declaration_seq_opt, cp_parser_declaration): Use
modules predicates.
(cp_parser_initial_pragma): Reject pragma with modules.
(c_parse_file): Adjust error message.
gcc/c-family/
* c.opt (fmodules-ts, fmodules-atom): Adust.
(fno-modules): New.
gcc/
* doc/invoke.texi (fno-modules): Document.
gcc/cp/
* module.c (init_module_processing): Disallow PCH.
gcc/c-family/
* c-pch.c (c_common_valid_pch): Never valid with modules.
gcc/cp/
* module.c (module_state::{read,write}_config): Check ATOM/TS
matches.
gcc/testsuite/
* g++.dg/modules/atom-check-1_[ab].C: New.
gcc/cp/
* module.c (module_state::write_readme): New. Broken out of ...
(module_state::write_context): ... here. Absorb remainder into ...
(module_state::write_config): ... here.
(module_state::read_context): Merge into ...
(module_state::read_config): ... here.
(module_state::{read,write}): Adjust.
gcc/cp/
* module.c (module_state::release): Simplify.
(module_state::check_read): Release if done.
gcc/testsuite/
* g++.dg/modules/import-2.C: Expect no bmi.
* g++.dg/modules/modules.exp (dg-module-bmi): Always delete the bmi.
gcc/cp/
* module.c (module_state::read): Allocate elf_in here.
(module_state::do_import): Adjust.
gcc/testsuite/
* g++.dg/modules/import-2.C: New.
gcc/cp/
* module.c (trees_out::tree_node): Avoid uninitialized false
positive.
2018-04-06 Nathan Sidwell <nathan@acm.org>
Merge trunk r259189.
Lazy loading!
gcc/cp/
* cp-tree.h (union mc_slot): New.
(struct module_cluster): Use it.
(lazy_load_binding): Take an mc_slot.
* module.c (module_state::release): End the elf source.
(module_state::read_function_def): Save and restore
current_function_decl.
(module_state::read): Enable lazy loading.
(module_state::lazy_load): Take an mc_slot, adjust.
(lazy_load_binding): Likewise.
* name-lookup.c (module_binding_slot): Return an mc_slot pointer.
(fixed_module_binding_slot): New.
(name_lookup::search_namespace_only): Lazily load.
(do_pushdecl): Use fixed_module_binding_slot.
(merge_global_decl): Adjust.
(import_module_binding): Install lazy cookie.
(set_module_binding): Adjust. Kill stale & wrong global module
bits.
(lookup_by_ident): Lazily load.
(reuse_namespace): Use fixed_module_binding_slot.
(make_namespace_finish): Likweise.
(add_imported_namespace, find_imported_namespace): Adjust.
gcc/c-family/
* c.opt (fmodule-lazy): Default on.
gcc/testsuite/
* g++.dg/modules/lazy-1_[ab].C: New.
gcc/cp/
* module.c (elf::E_BAD_LAZY): New error.
(elf::has_error): New.
(elf::get_error): Return string.
(elf::end): Return bool.
(elf_in::forget_section): New.
(module_state::check_error): New.
(module_state::do_module_import): Use it.
(module_state::lazy_load): New.
(module_state::{read,write}_decls): Absorb into callers.
(module_state::read_{context,config,namespaces,bindings,cluster}): Lose
from parm.
(module_state::lazy_depth): New.
(lazy_load_binding): New.
(finish_module): Adjust.
* cp-tree.h (lazy_load_binding): Declare.
gcc/testsuite/
* g++.dg/modules/circ-1_c.C: Adjust errors.
* g++.dg/modules/mod-stamp-1_d.C: Adjust errors.
gcc/cp/
* module.c (elf_in::keep_sections): New.
(elf_in::read): Add type arg.
(elf_in::find): Remove type arg.
(elf_in::begin): Coalesce error messages.
(module_state::loading): New field.
(module_state::{read,write}_config): Serialize section range ...
(module_state::{read,write}_namespace): ... not here.
(module_state::read_decls): Do not read the actual decls.
(module_state::read): ... do them here.
gcc/cp/
* module.c (trees_{in,out}, depset): Reorder definitions.
gcc/cp/
* module.c (module_state::{read,write}_binfos): Merge loops.
gcc/cp/
* module.c (trees_{in,out}::tree_binfo): Delete.
(module_state::{read,write}_binfos): New.
(module_state::{read,write}_class_def): Use them.
2018-04-05 Nathan Sidwell <nathan@acm.org>
gcc/
* doc/invoke.texi (C++ Modules): New section.
gcc/c-family/
* c.opt (-fmodule-lazy): New option.
gcc/cp/
* module.c (module_state::read_decls): Prepare for laziness.
gcc/cp/
* module.c (module_state::tng_*): Rename.
gcc/cp/
* module.c (enum tree_tag): Delete tt_definition, tt_binding.
(trees_in::tag_{binding,definition}): Delete.
(trees_out::{,maybe_}tag_definition): Delete.
(trees_{in,out}::define_{function,var,class,enum}): Delete.
(trees_in::tree_node): Remove tt_definition handling.
(trees_in::read, trees_out::write): Delete.
gcc/cp/
* module.c (module_state::write_namespace): Delete.
(module_state::{write_bindings,read_bindings}): Likewise.
gcc/cp/
* module.c (TNG): Delete.
(module_state::{tng_read_bindings,write): Constant fold TNG.
(trees_out::tree_node, trees_in::finish_type): Likewise.
gcc/cp/
* module.c (refs_tng): Replace with TNG.
Switch over to new binding scheme.
gcc/cp/
* module.c (TNG): Enable.
gcc/cp/
* module.c (module_state::{read,write,mark}_template_def): Deal
with CLASSTYPE_DECL_LIST.
(trees_out::tree_node): Check implicit TEMPLATE_DECLs.
gcc/cp/
* module.c (trees_out::tree_node): Reorder by-name checks.
* name-lookup.c (pushdecl_top_level): Replace IS_FRIEND parm with
MAYBE_INIT. Set DECL_CONTEXT. Finish if requested.
(pushdecl_top_level_and_finish): Use pushdecl_top_level.
* name-lookup.h (pushdecl_top_leve): Adjust declaration.
2018-04-04 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (module_state::{read,write,mark}_template_def): New.
(module_state::{read_write_mark}_definition): Call them.
(depset::hash::add_dependency): Don't depend on no-context decls.
(trees_out::tree_node): Don't try and name no-context decls.
gcc/cp/
* module.c (module_state::{read,write}_class_def}): Fixup
vptr-containing logic.
(trees_in::tree_binfo): Forward walk.
gcc/cp/
* module.c (enum tree_tag): Replace tt_tinfo_pseudo with
tt_tinfo_typedef. Add tt_vtable.
(module_state::mark_class_def): Mark vtables.
(trees_out::tree_node): Move TINFO processing to decl section.
Replace tinfo_psuedo handling with tinfo_typedef handling. Add
vtable special.
(trees_in::tree_node): Likewise.
* rtti.c (struct tinfo_s): Note type is const qualified variant.
gcc/testsuite/
* g++.dg/aaa/class-3_d.C: Adjust message.
gcc/cp/
* module.c (module_state::read_definition): New.
(module_state::read_{function,var,class,enum}_def): New.
(module_state::tng_read_cluster): New.
(module_state::tng_read_bindings): Call it.
(trees_in::tree_node): Check refs_tng.
gcc/cp/
* module.c (module_state::write_var_def): Write definition.
gcc/cp/
* module.c (trees_out::mark_node): Allow preseeding.
(trees_out::tree_node): Fix as_base.
2018-04-03 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (tt_type_name, tt_named): Rename to ...
(tt_named_type, tt_named_decl): ... here. Adjust uses.
(module_state::mark_class_def): Mark fake base.
(module_state::write_class_def): Write fake base.
(trees_{in,out}::tree_node): Avoid goto again.
(trees_in::finish_type): Protect fake base serialize.
* Make-lang.in (version.o): Depend on cp dir.
gcc/testsuite/
* g++.dg/aaa/class-3_d.C: Adjust message.
gcc/cp/
* module.c (bytes_in::{use,i,u,wi,str}): Use set_overrun.
(module_state::tng_write_cluster): Sort cluster here ...
(module_state::tng_write_bindings): ... not here.
(module_state::tng_read_bindings): Set refs_tng.
(trees_{in,out}::define_class): Don't deal with refs_tng here.
(trees_out::tree_binfo): Protect from dep_walk_p. Force insert
new tag.
Reorder for better logging
gcc/cp/
* module.c (trees_{in,out}::core_vals): Stream name-like members
early.
(module_state::do_import): Set module purview before streaming.
* name-lookup.c (set_module_binding): Don't barf on null.
gcc/
* gdbinit.in: Add conditions on error catching breakpoints.
Fix enum types, more globals
gcc/cp/
* module.c (module_state::maybe_add_global): New.
(module_state::init): Use it.
(trees_{in,out}::core_vals): Special case TYPE of unscoped enum.
2018-04-02 Nathan Sidwell <nathan@acm.org>
Read new .bindings section
gcc/cp/
* module.c (elf::get_num_sections): New.
(module_state::tng_{read,write}_namespaces): Serialize section range.
(module_state::tng_read_bindings): New.
(module_State::tng_{read,write}_bindings): Adjust.
(trees_in::define_enum, trees_in::tag_binding): Adjust.
* name-lookup.h (push_module_binding): Rename to ...
(set_module_binding): ... here.
(import_module_binding): Declare.
* name-lookup.c (import_module_binding): New.
(push_module_binding): Rename to ...
(set_module_binding): ... here. Adjust.
Kill old .bindings section
gcc/cp/
* module.c (module_state::record_namespace): Delete.
(module_state::write_namespace): Remove bind parm. Adjust.
(module_state::read_namespace): Delete.
(module_state::tng_read_namespaces): New.
(module_state::write_bindings): Don't write bindings section.
(module_state::read_bindings): Use tng_read_bindings).
* name-lookup.c (make_namespace): Public namespaces are exported.
(push_namespace): Adjust.
gcc/cp/
* module.c (trees_{in,out}::define_class): Check refs_tng.
(trees_out::tree_binfo): Add definition dependency.
(trees_{in,out}::tree_node): Don't write binfos in refs_tng mode.
(trees_in::finish_type): Chek refs_tng.
gcc/cp/
* module.c (trees_{in,out}::tree_binfo): Serialize entire path.
(trees_{in,out}::tree_node): Adjust.
2018-03-30 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (has_definition): VAR_DECLs too.
{module_state::mark_{,function_,var_,class_,enum_}definition): New.
(trees_out::walk_into): Turn into ...
(trees_out::mark_node): ... this. Adjust callers.
(module_state::write{_function_,class_,var_}_def): Define.
(module_state::find_dependencies): Look in definitions.
2018-03-28 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (maybe_get_template): New.
(depset::hash::maybe_add_definition): Return a depset.
(depset::hash::add_dependency): Don't deal with template here.
(module_state::write_{function,class}): New stubs.
(module_state::write_enum): New.
(module_state::write_definition): New.
(module_state::tng_write_cluster): Write binding header.
(module_state::add_writables): Don't return a bool. No need to
nadger namespace ownership.
(module_state::find_dependencies): Adjust.
(bind_cmp, space_cmp): New.
(ns_cmp): Delete.
(module_state::tng_write_bindings): Sort here.
(trees_out::tree_node): Check dependency of containers.
(module_purview_p): Defend against early checks.
* name-lookup.c (extract_module_decls): Don't special-case
namespaces.
(push_namespace): Set EXPORT & OWNER inside a module.
gcc/testsuite/
* g++.dg/modules/namespace-2.C: Adjust.
* g++.dg/modules/namespace-3.C: New.
* g++.dg/modules/scc-1.C: Adjust.
* g++.dg/modules/scc-2.C: New.
2018-03-27 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c
(depset::hash::{add_writables,find_dependencies}): Moved to ...
(module_state::{add_writables,find_dependencies}): ... here. Adjust.
(depset::hash::write_bindings): Moved to ...
(module_state::tng_write_bindings): ... here. Adjust.
(depset::hash::{add_decls,get_work}): New.
gcc/cp/
* module.c (hash_definition): New.
(struct depset::tarjan): New.
(depset::tarjan_connect, depset::hash::find_sccs): Delete.
(depset::hash::maybe_add_definition): New.
(module_state::tng_write_namespaces): New.
(depset::hash::{maybe_namespace,write_namespaces): Delete.
(module_state::tng_write_bindings): Adjust.
gcc/cp/
* module.c (depset::traits): Hash & compare using name too.
gcc/cp
* module.c (refs_tng): Temporary modal hack.
(tree_tag): Rename tt_import to tt_named.
(module_state::write_cluster): Fix iteration.
(module_state::tng_write_bindings): Set and clear refs_tng.
(trees_out::tree_node): Refs by name when applicable.
(trees_out::tree_node): Use tt_named.
gcc/testsuite/
* g++.dg/modules/by-name-1.C: New.
* g++.dg/modules/class-3_b.C: Adjust.
* g++.dg/modules/scc-1.C: More checking.
2018-03-26 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (depset::table): Rename to ...
(depset::hash): ... here.
(trees_out::deps_only): Rename to ...
(trees_out::dep_walk_p): ... here.
gcc/cp/
* module.c (depset::table::find_exports): Renamed ...
(depset::table::add_writables): .. here. Return bool, add
exported namespaces.
(depset::table::append): Add namespaces to worklist.
(mdule_state::write_namespace): Use TREE_PUBLIC.
* name-lookup.c (extract_module_decls): Only extract decls in our
purview.
(make_namespace): Remove FIXME.
(push_namespace): Set MODULE_OWNER if exporting.
gcc/testsuite/
* g++.dg/modules/namespace-2.C: New.
gcc/testsuite/
* lib/scanlang.exp (scan-lang-dump-not): new.
gcc/cp/
* module.c (depset::visited): Use depset::cluster. Adjust users.
gcc/cp/
* module.c (elf_out::strtab::named_decl): Cope with TYPE constext.
(elf_out::strtab::write_named_decl): Likewise.
(module_state::write_cluster): Adjust dump.
(fixup_unscoped_enum_owner): New.
* decl.c (finish_enum_value_list): Call
fixup_unscoped_enum_owner, as necessary.
* cp-tree.h (fixup_unscoped_enum_owner): Declare.
gcc/testsuite/
* g++.dg/modules/scc-1.C: New.
gcc/cp/
* module.c (elf_out::strtab): Add name-by-decl.
(module_state::write_cluster): Find naming decl, and use it.
gcc/cp/
* module.c (class depset): Make a class, add accessors. Implicitly
hold name as first decl.
(depset::table::{maybe_insert,find}): New.
(depset::table::{append,find_exports,find_dependencies}): Adjust.
(depset::table::{write_bindings,write_namespaces}): Adjust.
(module_state::write_cluster): Adjust.
Add depset analysis (incomplete)
gcc/cp/
* module.c (struct depset): New.
(module_state::tng_write_bindings, write_cluster): New.
(trees_out::{decls,mark_decls,mark_trees,unmark_trees): New.
(trees_out::{begin,end,walk_into,force_insert): New.
(module_state::write): Call tng_write_bindings.
(trees_out::{core_vals,lang_decl_vals,lang_type_vals,tree_node_raw,
tree_node): Deal with deps_only.
2018-03-23 Nathan Sidwell <nathan@acm.org>
Allow dump '-'
gcc/
* dumpfile.c (dump_open): New. Allow '-' for stdout.
(dump_open_alternate_stream, dump_start, dump_begin): Call it.
(dump_finish): Identify std{out,err} by stream.
* doc/invoke.texi (fdump-rtl): Document stdout/stderr.
2018-03-16 Nathan Sidwell <nathan@acm.org>
Remove -fmodules, forcing -fmodules-{ts,atom}
gcc/cp/
* parser.c (cp_parser_diagnose_invalid_type_name): Adjust error.
gcc/c-family/
* c.opt (fmodules): Remove.
gcc/
* doc/invoke (fmodules): Remove.
gcc/testsuite/
* g++.dg/modules/modules.exp: Iterate over -fmodules-{ts,atom}.
* g++.dg/modules: Mark tests that are -fmodules-ts only.
2018-03-15 Nathan Sidwell <nathan@acm.org>
Implement Atom module & import placement
gcc/
* doc/invoke.texi (-fmodules): Document -fmodules-atom.
gcc/c-family/
* c.opt (fmodules-atom): Renamed from fmodules++.
gcc/cp/
* cp-tree.h (import_module): Add parameter.
* module.c (import_module): Add exporting param.
(handle_module_option): Adjust.
* parser.c (cp_parser_module_declaration): Remove fmodules++
global module parsing.
(cp_parser_import_declaration): Adjust.
(cp_parser_declaration_seq_opt): Parse imports under -fmodules++ ...
(cp_parser_declaration): and not here.
gcc/testsuite/
* g++.dg/modules/mod++-decl-0_[abc].C: Adjust.
* g++.dg/modules/mod++-decl-2.C: Adjust.
* g++.dg/modules/mod++-decl-3.C: New.
Implement p0713 - identifiying module source
gcc/cp/
* parser.c (cp_parser_module_declaration): Allow global module
preamble. Return bool.
(cp_parser_declaration_seq_opt): Adjust.
gcc/testsuite/
* g++.dg/modules/circ-1_d.C: Adjust.
* g++.dg/modules/global-1_a.C: Adjust.
* g++.dg/modules/main-[123]-aux.cc: Adjust.
* g++.dg/modules/main-aux.cc: Adjust.
* g++.dg/modules/mod-decl-[13].C: Adjust.
* g++.dg/modules/mod-decl-5_b.C: Adjust.
* g++.dg/modules/mod-exp-1_b.C: Adjust.
* g++.dg/modules/mod-sym-2.C: Adjust.
* g++.dg/modules/proclaim-1.C: Adjust.
* g++.dg/modules/static-1_a.C: Adjust.
* g++.dg/modules/p0713-[123].C: New: Adjust.
2018-03-01 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (add_module_mapping): Fix double increment.
2018-02-28 Nathan Sidwell <nathan@acm.org>
Merge trunk r258084.
gcc/
* Makefile.in (REVISION_c): Don't exec REVISION.
* REVISION: Simple text file.
gcc/cp/
* Make-lang.in (MODULE_STAMP): New var.
(REVISION_s): Wedge stamp into it here.
(CFLAGS-cp/module.o): Adjust.
Using flags on overloads.
gcc/cp/
* cp-tree.h (OVL_HAS_USING_P): New.
* tree.c (alloc_ovl): New, broken out of ...
(ovl_make): ... this. Use it. Maybe set OVL_HAS_USING_P.
(ovl_copy): Use alloc_ovl. Copy OVL_HAS_USING_P.
(ovl_insert): Set OVL_HAS_USING_P appropriately.
(lookup_maybe_add): Comment on OVL_HAS_USING_P.
* name-lookup.c (name_lookup::add_overload)
(get_class_binding_direct): Check OVL_HAS_USING_P.
gcc/testsuite/
* g++.dg/lookup/using60.C: New.
gcc/
* Makefile.in: Exec REVISION maybe.
* REVISION: New.
gcc/cp/
* Make-lang.in: Directly set MODULE_STAMP.
Map tag recognised in and out of comments
gcc/cp/
* module.c
gcc/testsuite/
* g++.dg/modules/hello.cc: Clone to ...
* g++.dg/modules/main{,-[123]}-aux.cc: ... here.
* g++.dg/modules/main-[123]_a.C: New.
* g++.dg/modules/main-[123]-map: New.
* g++.dg/modules/main-map: Delete.
* g++.dg/modules/main_a.C: Update.
2018-02-27 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (version_string): Rename.
(module_state::write_context): Write compiler version.
2018-02-16 Nathan Sidwell <nathan@acm.org>
Use TREE_VISITED
gcc/cp/
* module.c (trees_out::fixed_refs): New.
(trees_out::{begin,end}): New.
(module_state::init): Use TREE_VISITED.
(trees_out::{maybe_insert,tree_node}): Likewise.
gcc/cp/
* module.c: More commenting.
(trees_{in,out}::define_class): Don't do AsBase here.
(trees_in::finish_type, trees_out::tree_node}: Do it here.
(get_module_owner): Cleanup.
2018-02-15 Nathan Sidwell <nathan@acm.org>
Module ownership on containers
gcc/cp/
* cp-tree.h (decl_set_module, module_context): Delete.
(get_module_owner, set_module_owner)
(set_implicit_module_owner): Declare.
* decl.c (grokfndecl, grokvardecl, grokdeclarator): Call
set_module_owner.
* error.c (dump_module_suffix): Use get_module_owner.
* mangle.c (maybe_write_module): Likewise.
* method.c (implicitly_declare_fn): Use set_implicit_module_owner.
* module.c (module_context, decl_set_module): Delete.
(trees_in::define_function): Adjust.
(trees_{in,out}::lang_decl_bools): Set module_owner.
(trees_{in,out}::tree_node_raw): Adjust.
(trees_out::tree_node): Adjust.
(get_module_owner, set_module_owner)
(set_implicit_module_owner): Define.
* name-lookup.c (do_pushtag): Use set_module_owner.
* pt.c (lookup_template_class_1, instanitate_decl): Use
set_implicit_module_owner.
gcc/cp/
* module.c (trees_out::tree_node): Reorder.
gcc/cp/
* module.c: Commenting and a few cleanups.
gcc/cp/
* module.c (elf): Make more constants private.
(elf_in::find): Swap args, default to PROGBITS.
(elf_out::add): Replace type and flags with string_p arg.
(bytes_in::begin, bytes_out::end): Adjust.
(data::set_crc): Store zero for no-crc.
Module map files have more syntax
gcc/cp/
* cxx-module-wrapper.sh: Accept src filename, don't search
MODULE_PATH.
* module.c (module_state::srcname): New.
(module_state::print_map): New.
(make_module_name): Rename to ...
(make_module_filename): ... here. Don't assume trailing NUL.
(find_module_file): Pass srcname.
(parse_module_mapping): New.
(add_module_mapping): Call it. Detect too-deeply nested.
gcc/c-family/
* c.opt (fmodule-map-dump): New.
gcc/
doc/invoke.texi: Document new module-map file syntax
gcc/testsuite/
* g++.dg/modules/hello.c: Adjust.
* g++.dg/modules/main_a.c: Adjust.
* g++.dg/modules/main-map: New.
* g++.dg/modules/modules.exp: Set CXX_MODULE_PATH.
2018-02-13 Nathan Sidwell <nathan@acm.org>
Module path is for mapping files. Replace -fmodule-root with
-fmodule-prefix.
gcc/cp/
* cxx-module-wrapper.sh: Adjust.
* module.c (module_state::lazy_{init,fini}): Drop the lazy.
(module_state::maybe_early_init): Move into init.
(module_prefix, module_file_args, module_wrapper): New.
(make_module_name): New.
(module_state::occupy): Call it.
(module_to_filename): Delete.
(search_module_path): Adjust for finding module-maps.
(find_module_file): New.
(add_module_mapping): Reimplement.
(init_module_processing): Process module_file_args array.
(module_state::do_import, finish_module): Adjust.
(maybe_prepend_dir): Delete.
(handle_module_option): Adjust.
gcc/c-family/
* c-opts.c (c_common_post_options): Adjust clean_cxx_module_path
call.
* c.opt (fmodule-root=): Delete.
(fmodule-prefix=): New.
gcc/
* doc/invoke.texi (fmodule-root): Replace with ...
(fmodule-prefix): ... this.
* incpath.c (clean_cxx_module_path): Drop root appending. Drop
multilib handling.
* incpath.h (clean_cxx_module_path): Adjust.
gcc/testsuite/
* g++.dg/modules/fmod-file-1_b.C: Adjust.
* g++.dg/modules/main_a.C: Adjust.
* g++.dg/modules/modules.exp: Adjust.
2018-02-12 Nathan Sidwell <nathan@acm.org>
AS_BASE is by reference.
gcc/cp/
* module.c (trees_out::define_class): Break AS_BASE loop during
streaming.
(trees_{in,out}::tree_node): Use tt_as_base.
Mapping files are recursive.
gcc/cp/
* module.c (maybe_prepend_dir): New.
(add_module_mapping): Recurse. Deal with relative paths.
(handle_module_option): Move file reading into add_module_mapping.
gcc/
* doc/invoke.texi (fmodule-file): Document.
BINFOs imported by reference.
gcc/cp/
* module.c (trees_{in_out}::tree_binfo): New.
(trees_out::maybe_insert): New.
(trees_out::insert): Use it.
(trees_{in,out}::define_class): Stream remaining binfo contents.
(trees_{in,out}::start): Don't expect BINFOs.
(trees_{in,out}::core_vals): Likewise.
(trees_{in,out}::tree_node): Use tt_binfo.
(trees_out::tree_node): Stream a class's child binfos.
(trees_in::finish_type): Likewise.
2018-02-11 Nathan Sidwell <nathan@acm.org>
Add module map file reading.
gcc/cp/
* module.c (add_module_mapping): New, swallow ...
(add_module_file): ... insertion bits. Move other bits to ...
(handle_module_option): ... here. Read module map file.
gcc/c-family/
* c.opt (fmodule-file): Document new semantics.
gcc/
* doc/invoke.texi (fmodule-file): Document new semantics.
gcc/testsuite/
* g++.dg/modules/fmod-file-1_[ab].C: New.
* g++.dg/modules/fmod-out-1_[ab].C: New.
* g++.dg/modules/modules.exp (decode_mod_spec): Augment.
Keep module-file map in module hash.
gcc/cp/
* module.c (module_state): Add empty_p, get_module members.
Rename set_name, delete set_location.
(module_file_map, module_file): Delete.
(module_state::do_import): Use get_module, set filename here.
(declare_module): No need to set filename here.
(add_module_file): Use module_state::get_module.
Move module option processing into module.c.
gcc/cp/
* cp-objcp-common.c (add_module_file): Move to module.c
(cp_handle_option): Call handle_module_option.
* cp-tree.h (module_output, module_files_map, module_files): Move
to module.c
* module.c (module_state::maybe_early_init): New.
(module_output, module_files): Make static.
(module_files_map): From cp-tree.h.
(init_module_processing): Call maybe_early_init.
(add_module): Moved from cp-objcp-common.c.
(handle_module_option): New.
Move module option processing out of c-common.c.
gcc/c-family/
* c-common.h (module_output, module_files_map, module_files): Move
to cp-tree.h.
* c-common.c (module_output, module_files): Move to module.c
* c-opts.c (add_module_file): Move to cp-objcp-common.c.
(c_common_handle_option): Move modules options to
cp-objcp-common.c.
gcc/cp/
* cp-objcp-common.c (add_module_file): Moved from c-opts.c.
(cp_handle_option): New, from c_common_handle_option.
* cp-objcp-common.h (LANG_HOOKS_HANDLE_OPTION): Point at
cp_handle_option.
* cp-tree.h (module_output, module_files_map, module_files): Moved
from c-common.h.
* cp-module.c (module_output, module_files): Moved from c-common.c.
2018-02-09 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c: Update more comments.
gcc/cp/
* module.c: Update a lot of comments.
2018-02-07 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (trees_in::tree_node): Absorb ...
(trees_in::tree_node_special): ... this.
gcc/cp/
* module.c (trees_in::tree_node_special): Deserialize tt_node here ...
(trees_in::tree_node): ... not here.
2018-02-06 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (trees_out::tree_node_special): Move into tree_node.
gcc/cp/
* module.c (trees_{in,out}::core_vals): Serialize decl name &
context here.
(trees_in::tree_node_raw): Don't set name & context here.
(trees_{in,out}::tree_node): Don't serialize decl name and context
here.
Remove old import machinery.
gcc/cp/
* module.c (trees_in::tree_node_raw): Set module owner.
(trees_{in,out}::tree_node): Remove importing here.
Imports use special tags
gcc/cp/
* module.c (module_context): Cope with C++ anon types.
(trees_{in,out}::tree_node_special): Deal with imports here ...
(trees_{in,out}::tree_node): ... not here.
gcc/testsuite/
* g++.dg/modules/class-3_[bd].C: Adjust.
Kill namespace module slot hackery
gcc/cp/
* name-lookup.c (module_binding_slot): Make CREATE a bool. Remove
namespace hackery.
(find_namespace_partition): Delete.
(merge_global_decl): Do not expect a namespace. Remove such
handling.
(push_module_binding): Likewise.
Namespaces use special tags
gcc/cp/
* module.c (trees_{in,out}::tree_node_special): Deal with
namespaces.
* name-lookup.h (find_imported_namespace): Declare.
* name-lookup.c (find_imported_namespace): New.
Less implicit tree numbering, negative indices for back refs
gcc/cp/
* module.c (ptr_uint_traits, ptr_uint_hash_map): Rename ...
(ptr_int_traits, ptr_int_hash_map): ... here. Map to ints.
(uint_ptr_traits, uint_ptr_hash_map): Delete.
(enum record_tag): Delete.
(enum tree_tag): New.
(trees_{in,out}::insert): Return int.
(trees_{in,out}::tree_node_special): Adjust.
(trees_{in,out}::tree_node): Adjust.
(trees_out::write, trees_in::read): Adjust.
gcc/testsuite/
* g++.dg/modules/class-3_[bd].C: Adjust.
2018-02-05 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* decl2 (c_parse_final_cleanups): Only finish_module if we started
it.
* module.c (module_hash_state): Move earlier.
(module_state): Add hash and modules static members.
(module_state::set_import): Replace do_import.
(module_state::lazy_init): Create the hash table and default
module.
(trees_in::tree_node_raw): Don't remap a public namespace.
(module_purview_p, module_interface_p): Adjust.
(module_state::do_import): Move more stuff to lazy_init.
(import_module): Deal with setting current module flags.
(finish_module): Adjust.
Fix bootstrap
gcc/cp/
* module.c (elf): Clean up consts.
(module_state::record_namespace): Comment args.
(module_state::read_namespace): Comment unused vars.
(trees_in::finish_tree): Fix logic error.
(trees_in::tree_node_special): Fix undefined var.
2018-02-04 Nathan Sidwell <nathan@acm.org>
Module purview is implicit.
gcc/cp/
* cp-tree.h (lang_decl): Remove module_purview_p field.
* mangle.c (maybe_write_module): Fix signed/unsigned mismatch.
* module.c (trees_in::finish): Adjust.
(trees{in,out}::lang_decl_bools): Drom module_purview_p field.
(decl_set_module): Done set DECL_MODULE_PURVIEW_P.
* name-lookup.c (extract_module_decls): check MODULE_PURVIEW_P.
(make_namespace_finish): Remove inline_p arg. Adjust callers.
* pt.c (build_template_decl): Don't copy MODULE_PURVIEW_P.
* rtti.c (tinfo_base_init): Don't clear MODULE_PURVIEW_P.
gcc/cp/
* name-lookup.c (make_namespace_finish): Always create the scope.
(add_imported_namespace): Check namespace inlineness here.
gcc/cp/
* module.c (decl_set_module): Set DECL_MODULE_OWNER.
* rtti.c (tinfo_base_init): Clear DECL_MODULE_OWNER.
gcc/cp/
* decl.c (grokfndecl): Protect decl_set_module call.
* name-lookup,c (do_pushtag): Likewise.
* module.c (decl_set_module): Assert namespace context.
2018-02-03 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h: Adjust comments.
* module.c (module_purview_p, module_interface_p): Adjust.
Deserializing uses an array (Nathan is a dumbass)
gcc/cp/
* module.c (trees_in): Delete count and tree_map. Add back_refs.
(trees_in::next): Delete.
(trees_in::insert): Append to array.
(trees_in::tree_node_special): Adjust.
(trees_in::tree_node): Likewise.
2018-02-02 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (nodel_ptr_hash): New.
(non_null_hash): Delete.
(ptr_uint_traits, uint_ptr_traits): Adjust.
(module_state_hash): Use nodel_ptr_hash.
(module_hash): Do not GTY.
(module_state::do_import, finish_module): Adjust.
Use TREE_VEC for structured module names.
gcc/cp/
* cp-tree.h (module_name_parts): Replace with ...
(module_vec_name): ... this.
* mangle.c (maybe_write_modules): Adjust.
* module.c (module_state): Replace name_parts with vec_name.
(module_state::set_name): Add maybe_vec parm, construct TREE_VEC.
(module_vec_name): Replace ...
(module_name_parts): ... this.
(module_state::do_import): Construct flat name.
* parser.c (cp_parser_module_name): Construct TREE_VEC.
gcc/testsuite/
* g++.dg/modules/mod-decl-1.C: Add error.
MODULE_PURVIEW bug fixing.
gcc/cp/
* decl2.c (c_parse_final_cleanups): Reset current_module.
* module.c (module_state::do_import): New, swallow ...
(do_module_import): ... this. Update callers.
* name-lookup.c (name_lookup::search_namespace_only): Fix search
of SLOT_CURRENT.
(do_pushdecl): Fix assert.
(merge_global_decl, push_module_binding, lookup_by_ident): Fix
module remap thinko.
Module purview has MODULE_PURVIEW number.
gcc/cp/
* module.c (module_state::read): Use MODULE_PURVIEW.
(trees_{in,out}::tree_node): Adjust.
(do_module_import, import_module): Likewise.
* name-lookup.c (module_binding_slot): Adjust.
(do_pushdecl): Always push to MODULE_SLOT_CURRENT.
(merge_global_decl): Remap MODULE_PURVIEW.
(lookup_by_ident, add_imported_namespace): Likewise.
Rename MODULE_INDEX->MODULE_OWNER
gcc/cp/
* cp-tree.h (MODULE_NONE, MODULE_PURVIEW, MODULE_IMPORT_BASE)
(MODULE_LIMIT): New, renamed from MODULE_INDEX_$FOO.
(DECL_MODULE_OWNER): New, renamed from DECL_MODULE_INDEX.
(MAYBE_DECL_MODULE_OWNER): Likewise.
(struct lang_decl_base): Rename module_index to module_owner.
* error.c, mangle.c, module.c, name-lookup.c, pt.c: Adjust.
Keep namespaces on global slot.
gcc/cp/
* cp-tree.h (MODULE_SLOT_CURRENT, MODULE_SLOT_GLOBAL): Renamed
from MODULE_SLOT_TU, MODULE_SLOT_GLOBALS.
* name-lookup.h (set_module_namespace): Undeclare.
(add_imported_namespace): Declare.
* name-lookup.c (module_binding_slot): Remove assert, propagate
external namespace to GLOBAL slot on creation.
(update_binding): Don't add namespaces to level.
(reuse_namespace): New.
(make_namespace): New, absorb ...
(create_namespace): ... this. Delete.
(make_namespace_finish): New.
(push_namespace): Adjust.
(add_imported_namespace): New. Absorb ...
(set_module_namespace): ... this. Delete.
* module.c (module_state::read_namespace): Adjust.
gcc/testsuite/
* g++.dg/modules/namespace-1_[abc].C: New.
Fix circularity detection, and other errors
gcc/cp/
* module.c (elf::E_BAD_DATA, elf::E_BAD_IMPORT): New.
(elf::set_error): Default to E_BAD_DATA.
(elf::end, elf_out::end): Return error string.
(module_state::set_location): New.
(module_state::{push,pop}_location): Adjust.
(do_module_import): Fixup circularity and other errors.
(declare_module, finish_module): Adjust.
gcc/testsuite/
* g++.dg/modules/circ-1_[abcd].C: New.
* g++.dg/modules/mod-decl-1.C: Adjust errors.
* g++.dg/modules/mod-decl-2_b.C: Adjust errors.
* g++.dg/modules/mod-decl-5_b.C: Adjust errors.
* g++.dg/modules/mod-stamp-1-d.C: Adjust errors.
2018-02-01 Nathan Sidwell <nathan@acm.org>
Alloc a slot for global module
gcc/cp/
* cp-tree.h (MODULE_INDEX_NONE, MODULE_INDEX_PURVIEW): New.
(MODULE_SLOT_TU, MODULE_SLOT_GLOBALS): New.
(MODULE_INDEX_IMPORT_BASE): Increment.
* module.c (do_module_import): Push reserved slot.
* name-lookup.c (module_binding_slot): Reserve slots below
MODULE_INDEX_IMPORT_BASE.
Bindings point to decls
gcc/cp/
* module.c (data::check_crc): Only check.
(data::get_crc): New.
(elf_in::find): Return section index.
(bytes_in::begin): Add by-section-number variant.
(module_state): Add lazy counter (unused).
(module_state::write_bindings): Emit decl section number.
(module_state::read_bindings): Adjust, swallow ...
(module_state::read_decls): ... this. Delete.
Read and parse the binding section in module_state.
gcc/cp/
* module.c (modules_state::record_namespace): New.
(module_state::write_namespace): Adjust, renamed from ...
(module_state::walk_namespace): ... here.
(module_state::read_namespace): New.
(module_state::{read,write}_bindings): Adjust.
(module_state::finish_module): Adjust.
* name-lookup.h (set_module_namespace): Declare.
* name-lookup.c (merge_global_decl): Adjust.
(create_namespace): New.
(set_module_namespace): New, use it.
(push_namespace): Use create_namespace.
Write binding section in module_state.
gcc/cp/
* name-lookup.h (extract_module_decls): Renamed from
extract_module_bindings. Adjust signature.
* name-lookup.c (extract_module_decls): Likewise.
* module.c (module_state::walk_namespace): New, absorb ...
(trees_out::walk_namespace): ... this. Delete.
(trees_out::write): Reimplement, absorb ...
(trees_out::{tag_binding,bindings}): ... these. Delete.
(module_state::write_bindings): Adjust.
Merge trunk r257292.
2018-01-31 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (cpms_{in,out}): Rename to ...
(trees_in, trees_out): ... here.
gcc/cp/
* module.c (module_state::global_{trees,vec,crc}): New, moved from ...
(globals{,_arys,_crc}): ... these globale scope vars.
(cpms_in): Add global_vec member.
Derive cpm_{in,out} from bytes_{in,out}
gcc/cp/
* module.c (cpms_{in,out}): Derive from bytes_{in,out}. Adjust
all uses of r & w.
Kill cpm_stream.
gcc/cp/
* module.c (class cpm_stream): Delete.
(class cpms_{in,out}): Adjust.
Move elf out of cpms_in, cpms_out.
gcc/cp/
* module.c (module_state::{read,write}_bindings): New.
(module_stste::read_decls): New.
(cpms_{in,out}::get_elf): Delete.
(cpms_out::{write,bindings}): Adjust.
(cpms_in::read): Adjust.
Add module_stat read & write
gcc/cp/
* module.c (module_state::{read,write}): New.
(cpms_in::read): Adjust.
(do_import_module, finish_module): Adjust.
gcc/cp/
* module.c: Move cpm_stream, cpms_in, cpms_out earlier.
Move some reading to module_state.
gcc/cp/
* module.c (module_state::read_{context,config}): New, swallow ...
(cpms_in::imports,header): ... these. Delete.
(cpms_in::read): Adjust.
(do_import_module): Adjust.
Move some writing to module_state.
gcc/cp/
* module.c (module_state::write_{context,config}): New, swallow ...
(cpms_out::imports,header): ... these. Delete.
(cpms_out::write): Adjust.
(finish_module): Adjust.
Move global tree init.
gcc/cp/
* module.c (module_state::lazy_init): New, swallow ...
(cpm_serial::lazy_globals): ... this. Adjust callers.
Reorder class declarations
gcc/cp/
* module.c (bytes, bytes_in, bytes_out): Move before module_state.
Simplify import interface
gcc/cp/
* module.c (MODULE_INDEX_IMPORTING, MODULE_INDEX_ERROR): Delete.
(MODULE_INDEX_UNKNOWN): New.
(module_state): Initialize mod to MODULE_INDEX_UNKNOWN.
(cpms_in::read): Return void.
(do_module_import): Return pointer to module object.
(cpms_in::imports): Adjust.
(import_module, declare_module, finish_module): Adjust.
Module_state owns elf and elf owns stream
gcc/cp/
* module.c (elf): Add begin, end members.
(elf_in, elf_out): Adjust.
(module_state::announce): New.
(cpms_{in,out}::get_elf): Adjust.
(cpms_{in,out}::{begin,end}): Delete.
(do_module_import, finish_module): Adjust.
Commonize module location
gcc/cp/
* module.c (module_state::{push,pop}_location): Set and restore
input_location.
(make_module_file): Lose module_root prepending.
(do_module_import): Always set module location.
(declare_module): Create location and filename.
(finish_module): Adjust.
Staticize instrumentation
gcc/cp/
* module.c (bytes_out): Staticize spans, lengths, is_set.
(bytes_out::instrument): Make static.
(cpms_out): Staticize unique, refs, nulls, records.
(cpms_out::instrument): Make static. Adjust.
Separate dumper object
gcc/cp/
* cp-tree.h (dump, print_other_binding_stack): Undeclare.
* name-lookup.c (print_other_binding_stack): Make static.
* module.c (class dumper): New.
(cpm_serial): Remove dumping machinery here. Adjust all uses.
gcc/testsuite/
* g++.dg/modules/mod-imp-1_[abcd].C: Adjust dump scans.
Start refactoring cpm_serial
gcc/cp/
* module.c (cpms_{in,out}::elf): Pointer to elf object,
(cpms_{in,out}::get_elf): New. Use it.
(do_module_import, finish_module): Adjust.
2018-01-30 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (data::release): Return NULL, update users.
(cpms_in::{mod_ix,crc}): Delete, adjust users.
Reorder source
gcc/cp/
* module.c (struct data): First.
(class elf, elf_in & elf_out): Next.
gcc/cp/
* module.c (module_state): Remove name_hash, crc_known, set_crc,
set_location.
(cpms_in::{read,header}): Add crc_ptr arg.
(do_module_import): Expected CRC is a pointer.
(cpms_in::imports): Adjust.
Push remaps as they happen.
gcc/cp/
* module.c (cpms_{in,out}::imports): Write in ascending order.
Move remap vector into module state.
gcc/cp/
* module.c (module_state): Add remap;
(cpms_in): Remove remap_num, remap_vec.
(module_state::release): New.
(cpms_in::{imports,tree_node,read}): Adjust.
(finish_module): Release module state.
gcc/cp/
* module.c (bytes_out::end): Create PROGBITS or STRTAB.
(cpms_out::write): README is a STRTAB.
Remove SYMTAB knowledge, the README is better.
gcc/cp/
* module.c (elf_out::symtab): Delete.
(elf_out::end): Adjust.
(cpms_out::imports): Don't create symtab.
Section structure completish.
gcc/cp/
* module.c (elf::isection): Add flags.
(elf_out::add): Add section flags.
(bytes_out::end): Likewise,
(elf_out::end): Adjust.
(cpms_out::bindings): Generate bindings section too.
(cpms_out::write): Add imports to README. Make string section.
(cpms_in::read): Adjust.
Config in header
gcc/cp/
* module.c (cpms_{in,out}::tag_conf): Delete.
(cpms_{in,out}::header): Serialize host & target conf.
(cpms_in::read, cpms_out::write): Adjust.
Globals in header
gcc/cp/
* module.c (module_state::set_name): Kill string names.
(cpms_{in,out}::tag_globals): Delete.
(cpms_{in,out}::header): Do globals. Add outer crc.
(cpms_in::read): Absorb cpms_in::read_item.
(search_module_path, do_module_import): Kill string names.
2018-01-29 Nathan Sidwell <nathan@acm.org>
Import table is separate section
gcc/cp/
* module.c (bytes): Reorganize CRC calcs.
(struct elf::symbol): New.
(struct elf_out::symtab): New.
(elf_out::end): Deal with symbol table.
(bytes_{in,out}::{begin,end}): Adjust crc calcs.
(cpms_{in,out}::imports): New.
(cpms_{in,out}::tag_import): Delete.
(cpms_in::read, cpms_out::write): Adjust.
Header is separate section
gcc/cp/
* module.c (module_state_hash::equal): Remove string names.
(elf_in::find): Find by name.
(elf_in::name): New.
(class elf_out::strtab): Rename type.
(elf_out::strings): New member.
(elf_in::begin): Veriy string table. Create default.
(elf_out::end): Write string table here.
(bytes_in::begin, bytes_out::end): Always PROGBITS.
(cpm_stream::rt_eof): Delete.
(cpms_{in,out}::header): Reimplement.
(cpms_in::read, cpms_out::write): Adjust.
Remove string-literal module names :(
gcc/cp/
* cp-tree.h (validate_module_name): Remove.
* module.c (validate_module_name): Delete.
(bytes_{in,out}::module_name): Delete, adjust callers.
* parser.c (cp_parser_module_name): Adjust.
(cp_parser_module_declaration, cp_parser_import_declaration)
(cp_parser_module_proclamation): Adjust.
gcc/testsuite/
* g++.dg/modules/mod++-decl-3_[ab].C: Delete.
{read,write}_module become member fns
gcc/cp/
* module.c (cpms_{in,out}::elf}: Direct member. Adjust ctors.
(cpms_{in,out}::{begin,end}): New.
(cpms_in::read, cpms_out::write): New.
(read_module, write_module): Delete.
(do_module_import, finish_module): Adjust.
README section
gcc/cp/
* module.c (version2date, version2time, version2string): Moved
from cpm_serial.
(struct_data): Broken out of elf.
(struct elf::isection): Remove link field. Adjust all uses.
(class elf_out::strings): New.
(elf_out::add): New.
(bytes_out::printf): New.
(cpm_stream::dump, cpms_in::header): Adjust version handling.
(write_module): Write README section.
Fix layering violation
gcc/cp/
* module.c (elf): Rename bad -> set_error.
(elf_out, elf_in): Update.
(cpm_serial, cpm_writer, cpm_reader): Rename to ...
(bytes, bytes_out, bytes_in): ... here.
(bytes_{in,out}): Remove source, sink members.
(bytes_in): Rename overran -> get_overrun. Add end, set_overrun.
Delete bad, get_error. Adjust users.
(cpms_in, cpms_out): Add elf field. Adjust.
2018-01-26 Nathan Sidwell <nathan@acm.org>
Simplify buffer filling & drainging
gcc/cp/
* module.c (cpm_serial): Add begin, end, use, unuse.
(cpm_writer): Add use, unuse, begin, end. Delete reserve, flush,
seek, tell, checkpoint.
(cpm_reader): Add overrun, use, begin, overran. Delete fill,
checkpoint.
(cpm_{reader,writer}): Update all seralizers.
(cpms_{in,out}): Remove checkpointing.
CRC at section level
gcc/cp/
* module.c (elf::data): Add crc routines.
(cpm_serial): Remove crc routines.
(cpm_in, cpm_out): Don't calculate crcs.
(read_module, write_module): Adjust (incomplete).
BMI is ELF
gcc/cp/
* module.c (get_version): Moved from cpm_stream::version.
(struct non_null_hash, ptr_uint_traits, ptr_uint_hash_map)
uint_ptr_traits, uint_ptr_hash_map): New.
(elf, elf_in, elf_out): New classes.
(cpm_serial, cpm_in, cpm_out): Modify (incomplete).
(cpms_in, cpms_out): Adjust.
(read_module, write_module, finish_module): Adjust.
2018-01-24 Nathan Sidwell <nathan@acm.org>
Global tree via crc
gcc/cp/
* module.c (cpm_stream): Add globals & globals_crc.
(cpm_stream::next): Add default arg.
(cpm_stream::cpm_stream): Lazily init globals vector.
(cpms_{in,out}::mark_present, globals): Delete.
(cpms_{in,out}::tag_globals): Reimplement.
(cpms_in::tree_node_special): Read global tree directly.
* name-lookup.c (extract_module_bindings): Skip RTTI types.
gcc/cp/
* module.c (module_state): Replace direct_import with imported &
exported flags.
(module_state::do_import): Adjust.
(enum import_kind): Delete.
(do_module_import): Adjust.
(cpms_{in.out}::tag_import): Adjust.
(module_interface_p, import_module, declare_module)
(finish_module): Adjust.
2018-01-23 Nathan Sidwell <nathan@acm.org>
Static bindings not visible in imports
gcc/cp/
* name-lookup.h (decapsulate_binding): Delete.
(module_binding_vec, extract_module_bindings): Declare.
* module.c (cpms_{in,out}::tag_binding): Reimplement.
(cpms_out::bindings): Likewise.
* name-lookup.c (decapsulate_binding): Delete.
(extract_module_bindings): New.
gcc/testsuite/
* g++.dg/modules/mod++-decl-0_c.C: Remove XFAIL.
* g++.dg/modules/static-1_[abc].C: New.
2018-01-22 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* tree.c (ovl_insert): No need to sort by USING_P.
(ovl_iterator::reveal_node): Likewise.
Update bug reporting instructions
gcc/
* configure.ac (ACX_BUGURL): Set new url
* diagnostic.c (diagnostic_action_after_output): Special ICE
instructions.
* configure: Rebuilt.
2018-01-19 Nathan Sidwell <nathan@acm.org>
Kill mangle_namespace.
gcc/cp/
* cp-tree.h (CPTI_MANGLE, mangle_namespace): Delete.
* decl.c (cxx_init_decl_processing): Don't create it.
* module.c (cpms_out::bindings): Don't skip it.
* name-lookup.c (suggest_alternatives_for): Likewise.
Import ident by type not index.
gcc/cp/
* name-lookup.h (get_ident_in_namespace, get_ident_in_class,
find_by_ident_in_namespace, find_by_ident_in_class): Delete.
(lookup_by_ident): Declare.
* name-lookup.c (get_ident_in_namespace, get_ident_in_class): Delete.
(find_by_ident_in_namespace, find_by_ident_in_class): Replace with ...
(lookup_by_ident): ... this.
* module.c (cpms_{in,out}::ident_imported_decl): Delete.
(cpms_out::tree_node): Write imported decl info directly.
(cpms_in::tree_node): Use lookup_by_ident.
gcc/cp/
* module.c (cpms_{in.out}::tree_node_special): New, broken out of ...
(cpms_{in,out}::tree_node): ... here. Call them.
Merge trunk r256894.
gcc/cp/
* Make-lang.in: Set MODULE_STAMP if non-branch experimental.
Beginnings of global module correctness
gcc/cp/
* cp-tree.h (struct mc_index): New.
(module_cluster): Use it.
(MODULE_VECTOR_SLOTS_PER_CLUSTER): New.
(GLOBAL_MODULE_INDEX, THIS_MODULE_INDEX, IMPORTED_MODULE_BASE): Delete.
(MODULE_INDEX_IMPORT_BASE): New.
(DECL_MODULE_PURVIEW_P, MAYBE_DECL_MODULE_PURVIEW_P): New.
(MAYBE_DECL_MODULE_INDEX): Adjust.
(MODULE_INDEX_BITS): New.
(struct lang_decl_base): Add module_purview_p field.
* decl2.c (c_parse_final_cleanups): Adjust.
* error.c (dump_module_suffix): Adjust.
* mangle.c (maybe_write_module): Adjust.
* module.c (MODULE_INDEX_IMPORTING, MODULE_INDEX_ERROR): New.
(module_state::freeze): Delete.
(this_module): Delete. Replace with (*modules)[0].
(cpms_in::alloc_remap_vec): Adjust.
(cpms_in::tag_import): Use MODULE_INDEX_ERROR.
(cpms_{in,out}::tag_binding): Lose MAIN_P parm. Adjust.
(cpms_in::define_function): Remove GLOBAL_MODULE_INDEX handling.
(cpms_in::read_item): Use MODULE_INDEX_IMPORTING.
(cpms_in::finish): Remove NODE_MODULE parm. use
MAYBE_DECL_MODULE_PURVIEW_P.
(cpms_{in,out}::lang_decl_bools): Read & write module_purview_p.
(cpms_in::tree_node_raw): Lose NODE_MODULE parm. Set module
directly.
(cpms_{in,out}::tree_node): Adjust module identification.
(cpms_out::bindings): Bindings are on a single slot.
(module_loc): Delete.
(decl_set_module): Set purview as needed.
(module_purview_p, module_interface_p): Adjust.
(read_module): Simplify.
(do_module_import): Adjust for lack of global module slot. Use
MODULE_INDEX_ERROR, MODULE_INDEX_IMPORTING. Detect already
declared module here.
(import_module): Adjust.
(declare_module): Don't detect already declared here.
(write_module): Adjust.
(finish_module): Adjust.
* name-lookup.c (module_binding_slot): Reimplement.
(name_lookup::process_module_binding)
(name_lookup::search_namespace_only, name_lookup::add_module_fns)
(name_lookup::adl_namespace_only, do_pushdecl): Adjust.
(merge_global_decl): Kludge into reworking.
(push_module_binding): Likewise.
* name-lookup.h (merge_global_decl): Add module parm.
* pt.c (build_template_decl): Propagate purview.
* ptree.c (cxx_print_xnode): Adjust.
* rtti.c (tinfo_base_init): Kludge into working.
(get_tinfo_desc): Drop unnecessary push/pop abi namespace.
(emit_tinfo_decl): Simplify.
gcc/testsuite/
* g++.dg/modules/global-1_[ab].C: New
* g++.dg/modules/mod++-decl-0_b.C: Remove xfail.
2018-01-18 Nathan Sidwell <nathan@acm.org>
Merge access & discriminator.
gcc/cp/
* cp-tree.h (struct lang_decl_base): Rename u2sel to spare.
(struct lang_decl_min): Replace lang_decl_u2 union with plain
tree.
(LANG_DECL_U2_CHECK): Delete.
(DECL_DISCRIMINATOR_SET_P, DECL_DISCRIMINATOR): Adjust.
(DECL_CAPTURED_VARIABLE, DECL_ACCESS, THUNK_VIRTUAL_OFFSET): Adjust.
* decl.c (push_local_name): Represent discriminator as INTEGER_CST.
(duplicate_decls): Copy DECL_ACCESS. fix formatting.
* mangle.c (discriminator_for_local_entity): Extract integer value.
* module.c (cpms_{in,out},lang_decl_bools): Drop u.base.u2sel.
(cpms_{in,out}::lang_decl_vals): Drop u.min.u2 handling.
* semantics.c (finish_omp_threadprivate): Drop u.base.u2sel copying.
2018-01-02 Nathan Sidwell <nathan@acm.org>
Merge trunk r256078.
Typedefs!
gcc/cp/
* decl.c (grokdeclarator): Set typedef's module/export.
gcc/testsuite/
* g++.dg/modules/tdef-2_[abc].C: New.
gcc/testsuite/
* g++.dg/modules/tdef-1_[ab].C: New.
2017-12-20 Nathan Sidwell <nathan@acm.org>
Variables!
gcc/cp/
* decl.c (grokvardecl): Set exporting.
* module.c (dump_nested_name): Dump integer values.
(cpms_{in,out}::define_var): New.
(cpms_{in,out}::tag_definition): Deal with vars.
(cpms_out::maybe_tag_definition): Likewise.
(cpms_out::core_bools): Externalize static vars.
(cpms_out::lang_decl_bools): Likewise for not-really-extern.
gcc/testsuite/
* g++.dg/modules/var-1_[ab].C: New.
Enumerations!
gcc/cp/
* module.c (module_state::set_name): Don't deal with crc.
(module_state::set_crc): New.
(cpm_serial::get_crc): Don't obscure zero.
(cpm_writer::tell): New.
(cpms_out::crc_tell): New.
(cpms_{in,out}::define_enum): New.
(cpms_out::header): Save crc location.
(cpms_in::header): Use set_crc.
(cpms_out::tag_eof): Adjust.
(cpms_out::maybe_tag_definition): Deal with enums.
(cpms_{in,out}::tag_definition): Deal with enums.
(cpms_{in,out}::core_vals): Do not write enum bits.
(do_module_import): Use set_crc.
* name-lookup.c (push_module_binding): Fix assert.
gcc/testsuite/
* g++.dg/modules/enum-1_[ab].C: New.
2017-12-19 Nathan Sidwell <nathan@acm.org>
Merge trunk r255836.
2017-11-27 Nathan Sidwell <nathan@acm.org>
Merge trunk r255166.
2017-11-22 Nathan Sidwell <nathan@acm.org>
Non-type template parms, & nested template classes.
gcc/cp/
* module.c (cpms_{in,out}::core_vals): Deal with CONST_DECLs.
gcc/testsuite/
* g++.dg/modules/tplmem-3_[ab].C: New.
2017-11-21 Nathan Sidwell <nathan@acm.org>
Member types
gcc/testsuite/
* g++.dg/modules/nested-2_[ab].C: New
Nested classes.
gcc/cp/
* module.c (cpm_reader::wi): Promote before shifting.
(cpms_out::define_class): Maybe define all members.
(cpms_out::maybe_tag_definition): Only implicit typedefs are
defined.
(cpms_{in.out}::core_vals): Don't stream value cache.
gcc/testsuite/
* g++.dg/modules/nested-1_[abc].C: New
2017-11-20 Nathan Sidwell <nathan@acm.org>
Merge trunk r254959.
Template member functions.
gcc/cp/
* cp-tree.h (TI_PENDING_TEMPLATE_FLAG): Add TI_CHECK.
* module.c (cpms_out::maybe_tag_definition): Check DECL_INITIAL,
write clones.
(cpms_in::tag_definition): Don't zap clones.
(cpms_in::finish): Clear TI_PENDING_TEMPLATE_FLAG.
(cpms_{in,out}::core_vals): Check tcc_unary, tcc_binary.
* optimize.c (maybe_clone_body): Don't alias when modules.
gcc/testsuite/
* g++.dg/modules/tplmem-1_[ab].C: New.
2017-11-17 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (cpms_out::tree_node): Fix conv-op identifiers.
gcc/testsuite/
* g++.dg/modules/convop-1_[ab].C: New.
2017-11-16 Nathan Sidwell <nathan@acm.org>
Constexprs!
gcc/cp/
* cp-tree.h (check_constexpr_fundef, find_constexpr_fundef): Declare.
* constexpr.c (find_constexpr_fundef): New.
(register_constexpr_fundef): Split checking off to ...
(check_constexpr_fundef): ... here. Call
register_constexpr_fundef.
* decl.c (): Adjust.
* module.c (cpms_{in,out}::define_function): Serialize constexpr
body.
(cpms_{in,out}::core_vals): Serialize function-scope var initializers.
gcc/testsuite/
* g++.dg/modules/cexpr-[12]_[ab].C: New.
Merge trunk r254823.
Merge trunk r254819.
2017-11-03 Nathan Sidwell <nathan@acm.org>
Virtual bases!
gcc/cp/
* Make-lang.in: module.o depends on revision
* class.c (layout_class_type): Unnamed types do not get base
types.
* cxx-module-wrapper.sh: Invoke make. Strip bad args.
* module.c (module_context): Allow NULL context.
(cpms_{in,out}::define_class): Deal with classtype_as_base.
(cpms_{in,out}::tag_definition): Allow raw class.
(cpms_{in,out}:ident_imported_decl: Rework class scope.
(cpms_out::tree_node): Deal with NULL module context.
* name-lookup.c (maybe_lazily_declare): Break out of ...
(get_class_binding): ... here. Call it.
(get_ident_in_class, find_by_ident_in_class): New.
* name-lookup.h (get_ident_in_class, find_by_ident_in_class): Declare.
gcc/testsuite/
* g++.dg/modules/class-7_[abc].C: New.
* g++.dg/modules/main.cc: Move to ...
* g++.dg/modules/main_a.C: ... here. Adjust.
* g++.dg/modules/modules.exp: Remove main.cc exceptionalism.
2017-10-26 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (module_state): Add filename & loc.
(module_state::{set,push,pop}_location): New.
(cpm_stream): Add state member. Adjust.
(cpms_{in,out}): Adjust.
(cpms_in::{header,tag_conf}): Adjust.
(read_module, write_module): Lose fname arg.
(search_moule_path): Don't prefix .
(do_module_import, finish_module): Set location.
gcc/
* diagnostic.c (maybe_line_and_column): New.
(diagnostic_get_location_text, diagnostic_report_current_module):
Use it.
gcc/testsuite/
Markup no-column tests.
2017-10-24 Nathan Sidwell <nathan@acm.org>
gcc/cp
* cxx-module-wrapper.sh: Cleanups.
* module.c (cpm_stream::global_tree_arys): Add integer_types.
(cpms_{in,out}::tree_node): Robustify.
(read_module): Note end of importing.
(search_module_path): Note if wrapper failed to install.
* name-lookup.c (merge_global_decl): Zap anticipated decl here ...
(push_module_binding): ... not here.
gcc/
* incpath.c (clean_cxx_module_path): Correct env var name.
gcc/c-family/
* c.opt (fmodules++): Add Driver.
gcc/testsuite/
* g++.dg/modules/{main.c,hello.cc}: New.
* g++.dg/modules/modules.exp: Special case main.cc
2017-10-23 Nathan Sidwell <nathan@acm.org>
Wrapper program
gcc/
* doc/invoke.texi (fmodule-root, fmodule-path, fmodule-wrapper):
Document.
* gcc.c (driver::maybe_putenv_CXX_MODULE_WRAPPER): New.
(driver::main): Call it.
* gcc.h (driver::maybe_putenv_CXX_MODULE_WRAPPER): Declare.
* incpath.h (clean_cxx_module_path): Add multilib parm.
* incpath.c (add_path): Initialize length.
(clean_cxx_module_path): Append multilib fragment. Add '.'.
gcc/c-family/
* c-opts.c (c_common_post_options): Pass multilib suffx to
clean_cxx_module_path.
* c.opt (fmodules): Notify driver.
(fmodule-hook): Rename to ...
(fmodule-wrapper): ... here.
gcc/cp/
* Make-lang.in (cxx-module-wrapper): New program.
* cxx-module-wrapper.sh: New.
* module.c: Include libiberty.h, tree-diagnostic.h.
(read_module): Add announcement.
(module_to_filename): Identifier mapping does not depend on
module_path.
(search_module_path): Shell out to wrapper function.
(do_module_import): Adjust.
(init_module_processing): Default flag_module_wrapper.
gcc/testsuite/
* g++.dg/modules/modules.exp: Adjust.
2017-10-20 Nathan Sidwell <nathan@acm.org>
Template class!
gcc/cp/
* decl.c (xref_tag_1): Don't decl_set_module here.
* module.c (cpms_in::define_function): Check templatedness.
(cpms_{in,out}::define_class): Add maybe_template arg. Add
templatey bits.
(cpms_out::maybe_tag_definition): Deal with template classes.
{cpms_{in,out}::tag_definition): Add maybe_template arg, adjust.
{cpms_{in,out}::core_vals): Write record template_info.
* name-lookup.c (set_class_binding): Protect against empty
member_vec.
(do_pushtag): Call decl_set_module here.
* pt.c (build_template_decl): Copy module bits here ...
(push_template_decl_real): ... not here.
gcc/testsuite/
* g++.dg/modules/mod-tpl-2_[ab].C: New.
Early CRC not time stamps.
gcc/cp/
* module.c (module_state::set_name): CRC too.
(cpm_serial::get_crc): New.
(cpm_writer::seek): New.
(cpm_{reader,writer}::bytes4): Rename to ...
(cpm_{reader,writer}::raw): ... this. Adjust all users.
(cpm_reader::get_crc): Delete.
(module_state::stamp): Replace with ...
(module_state::crc): ... this.
(cpms_in::cpms_in): Drop stamp arg.
(cpms_{in,out}::header): Deal with CRC not timestamp.
(time2str, timestamp_mismatch): Delete.
(cpms_{in,out}::tag_eof): Deal with crc.
(cpms_{in,out}::tag_import): Drop timestamp.
(read_module, do_module_import): Likewise. Use CRC.
gcc/testsuite/
* g++.dg/modules/mod-stamp-1_d.C: Adjust.
Merge trunk r253954.
2017-10-13 Nathan Sidwell <nathan@acm.org>
Template function!
gcc/
* tree.h (MARK_TS_TYPE_NON_COMMON): New.
gcc/cp/
* cp-objcp-common.c (cp_common_init_ts): Fix
TEMPLATE_TEMPLATE_PARM, TEMPLATE_TYPE_PARM,
BOUND_TEMPLATE_TEMPLATE_PARM marking.
* cp-tree.h (canonical_type_parameter): Declare.
* module.c (cpms_{in,out}::define_function): Add maybe_template
parm, adjust.
(cpms_out::maybe_tag_definition): Allow function templates.
(cpms_{in,out}:tag_definition): Allow templates.
(cpms_{in,out}::core_vals): Stream more nodes.
(cpms_{in,out}::lang_decl_vals): Stream more nodes.
(cpms_in::finish_type): Deal with TEMPLATE_TYPE_PARM,
TEMPLATE_TEMPLATE_PARM.
* pt.c (canonical_type_parameter): Make extern, simplify.
(push_template_decl_real): Propagate exportednes.
gcc/testsuite/
* g++.dg/modules/mod-tpl-1_[ab].C: New.
2017-10-12 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (TS_CP_BINDING, TS_CP_WRAPPER, LAST_TS_CP_ENUM): Delete.
(union lang_tree_node): Adjust GTY desc.
(cp_tree_node_structure): Take a tree_code.
* decl.c (cp_tree_node_structure): Take a tree_code.
* module.c (cpms_{out,in}::core_vals): Order clauses from
tree-core.h, use cp_tree_node_structure for C++.
Module name can be a string const (-fmodules++)
gcc/cp/
* cp-tree.h (cp_expr): Add constant operator* and operator->.
(validate_module_name): New.
(declare_module, import_module): Take cp_expr.
* error.c (dump_module_suffix): Adjust.
* module.c (module_state): Add name_hash. Adjust.
(module_state_hash): Allow string consts.
(module_state::set_name): Likewise.
(cpm_{writer,reader}::module_name): New.
(dump_nested_name): Name can be a string const.
(cpms_{out,in}::header): Adjust.
(cpms_{out,in}::tag_import): Adjust.
(validate_module_name): New.
(module_to_filename): Allow string consts.
(make_module_file): Adjust.
(do_module_import): Adjust.
(import_module, declare_module): Adjust.
* parser.c (cp_parser_module_name): Return cp_expr, allow
string-cst.
(cp_parser_module_declaration, cp_parser_import_declaration,
cp_parser_module_proclamation): Adjust.
gcc/testsuite/
* g++.dg/modules/modules.exp (dg-module-bmi): Renamed.
* g++.dg/modules/mod++-decl-3_[ab].C: New.
Add -fmodule-path, -fmodule-root.
gcc/
* incpath.h (INC_CXX_MPATH): New.
(clean_cxx_module_path): Declare.
* incpath.c (clean_cxx_module_path): New.
gcc/cp/
* cp-tree.h (init_module_processing): Declare.
* decl.c (cxx_init_decl_processing): Call init_module_processing.
* module.c (module_path, module_path_max): New vars.
(MOD_FNAME_PFX): Delete.
(module_to_filename): Reimplement.
(search_module_path, make_module_file): New.
(do_module_import): Adjust.
(init_module_processing): New.
(finish_module): Adjust.
gcc/c-family/
* c-opts.c (c_common_handle_option): Process OPT_fmodule_path_.
(c_common_post_options): Clean module path.
* c.opt (fmodule-root=, fmodule-path=, fmodule-hook=): New.
gcc/testsuite/
* g++.dg/modules/modules.exp: Adjust module name logic.
2017-10-11 Nathan Sidwell <nathan@acm.org>
Merge trunk r253654.
2017-10-10 Nathan Sidwell <nathan@acm.org>
Merge trunk r253585.
2017-09-25 Nathan Sidwell <nathan@acm.org>
gcc/c-family/
* c_common_handle_option: Handle fmodules++.
* c.opt (fmodules): Make Uinteger.
(fmodules++, fmodules-ts): New.
gcc/cp/
* parser.c (cp_parser_consume_semicolon_at_end_of_statement):
Return success bool.
(cp_parser_translation_unit): Adjust cp_parser_declaration_seq_opt
call.
(cp_parser_declaration_seq_opt): Add top_level parm, look for
module-decl here.
(cp_parser_module_declaration): Handle -fmodules++ syntax.
(cp_parser_module_export): No need to handle module-declaration
here ...
(cp_parser_declaration): ... or here.
gcc/
* doc/invoke.texi (-fmodules++): Document.
gcc/testsute/
* g++.dg/modules/mod++-decl-0_[abc].C: New.
* g++.dg/modules/mod++-decl-[12].C: New.
* g++.dg/modules/mod-decl-1.C: Adjust expected error.
2017-09-15 Nathan Sidwell <nathan@acm.org>
Merge trunk 252831.
2017-07-20 Boris Kolpackov <boris@codesynthesis.com>
Add -fmodule-output & -fmodule-file options.
gcc/c-family/
* c.opt (-fmodule-output): New option.
(-fmodule-file): New option.
* c-common.h (module_output): Declare.
(module_files): Declare.
* c-common.c (module_output): New variable.
(module_files): New variable.
* c-opts.c (add_module_file): New function.
* c-opts.c: Handle -fmodule-output and -fmodule-file.
gcc/cp/
* module.c (finish_module): If specified, use module_output as output
file name.
* module.c (do_module_import): Check module_files for a module name
to file mapping before falling back to default.
gcc/
* doc/invoke.texi (C++ Dialect Options): Document -fmodule-output
and -fmodule-file.
2017-07-17 Nathan Sidwell <nathan@acm.org>
Merge trunk r250272.
2017-07-13 Nathan Sidwell <nathan@acm.org>
Merge trunk r250159.
2017-07-03 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (CLASSTYPE_CONSTRUCTORS, CLASSTYPE_DESTRUCTOR): Use
lookup_fnfields_slot_nolazy.
* search.c (lookup_fnfields_idx_nolazy): Don't use
CLASSTYPE_CONSTRUCTORS, CLASSTYPE_DESTRUCTOR.
gcc/cp/
* class.c (type_has_user_declared_move_constructor,
type_has_user_declared_move_assign): Delete, replace with:
(classtype_has_user_move_assign_or_ctor_p): ... this.
* cp-tree.h (type_has_user_declared_move_constructor,
type_has_user_declared_move_assign): Delete, replace with:
(classtype_has_user_move_assign_or_ctor_p): ... this.
* method.c (maybe_explain_implicit_delete): Update.
(lazily_declare_fn): Update.
* tree.c (type_has_nontrivial_copy_init): Update.
* search.c (lookup_fnfields_slot_nolazy): Don't try and complete
the type.
* pt.c (check_explicit_specialization): Use regular lookup.
gcc/cp/
* class.c (maybe_warn_about_overly_private_class): Ignore
copy/move ctors.
* semantics.c (classtype_has_nothrow_assign_or_copy_p): Use
lookup_fnfields_slot for ctors.
gcc/cp/
* module.c (cpms_{out,in}::start): Don't deal with identifiers
here.
(cpms_{out,in}::tree_node): Deal with identifiers specially.
Merge trunk r249852.
2017-06-30 Nathan Sidwell <nathan@acm.org>
Merge trunk r249835.
2017-06-29 Nathan Sidwell <nathan@acm.org>
Merge trunk r249794.
gcc/cp/
* cp-tree.h (class_method_index_for_fn): Delete.
* decl2.c (check_classfn): Use lookup_fnfields_slot, reimplement
diagnostics.
* name-lookup.h (lookup_all_conversions): Declare.
* name-lookup.c (lookup_all_conversions): New.
* pt.c (retrieve_specialization): Use lookup_fnfields_slot,
lookup_all_conversions.
* search.c (class_method_index_for_fn): Delete.
gcc/testsuite/
* g++.dg/concepts/memfun-err.C: Adjust.
* g++.dg/cpp0x/decltype9.C: Adjust.
* g++.dg/lookup/decl1.C: Adjust.
* g++.dg/other/pr28432.C: Adjust.
* g++.dg/parse/crash12.C: Adjust.
* g++.dg/parse/enum3.C: Adjust.
* g++.dg/parse/operator6.C: Adjust.
* g++.dg/template/crash69.C: Adjust.
* g++.dg/template/error27.C: Adjust.
* g++.dg/template/error28.C: Adjust.
* g++.dg/template/memfriend6.C: Adjust.
* g++.old-deja/g++.mike/err1.C: Adjust.
* g++.old-deja/g++.mike/p811.C: Adjust.
* g++.old-deja/g++.other/crash25.C: Adjust.
* g++.old-deja/g++.other/dtor4.C: Adjust.
* g++.old-deja/g++.pt/t37.C: Adjust.
Merge trunk r249779.
gcc/cp/
* class.c (finish_struct): Use OVL_P.
* cp-tree.h (THIS_NAME, IN_CHARGE_NAME, VTBL_PTR_TYPE,
VTABLE_DELTA_NAME, VTABLE_PFN_NAME): Delete.
* decl.c (initialize_predefined_identifiers): Encode them here
directly. Rename cdtors consistently.
(cxx_init_decl_processing): Name vtbl_ptr_type directly.
* search.c (class_method_index_for_fn): No need to frob cdtor names.
2017-06-28 Nathan Sidwell <nathan@acm.org>
cdtor name cleanup. expunge lookup_fnfields_1 use.
gcc/
* builtins.c (fold_builtin_FUNCTION) Use
lang_hooks.decl_printable_name.
gcc/cp/
* call.c (build_new_method_call_1) Update cdtor handling.
* class.c (get_basefndecls): Use lookup_fnfields_slot.
* cp-tree.h (lookup_fnfields_1): Don't declare.
* decl.c (register_dtor_fn): Use lookup_fnfields_slot.
(grokfndecl): Set cdtor name.
* method.c (implicitly_declare_fn): Adjust cdtor flag setting.
* pt.c (check_explicit_specialization): Adjust cdtor checking, use
lookup_fnfields_slot_nolazy.
* search.c (lookup_fnfields_1): Make static.
* semantics.c (classtype_has_nothrow_assign_or_copy_p): Use
lookup_fnfields_slot.
gcc/testsite/
* g++.dg/cpp1y/builtin_FUNCTION.C: New.
* g++.dg/plugin/decl-plugin-test.C: Adjust.
Merge trunk r249746.
gcc/cp/
* cp-tree.h (SET_CLASS_TYPE_P): Use RECORD_OR_UNION_CHECK.
(NON_UNION_CLASS_TYPE_P): Just check for RECORD_TYPE.
* call.c (check_dtor_name): Adjust constructor_name check.
(name_as_c_string): Move const cast.
(build_new_method_call_1): Use constructor_name from basetype.
* class.c (get_vfield_name): Measure constructor_name length.
(build_self_reference): Don't use constructor_name here.
* cxx-pretty-print.c (is_destructor): Delete.
(pp_cxx_unqualified_id): Remove bogus dtor code.
* decl.c (grokdeclarator): Minor cleanup.
* method.c (implicitly_declare_fn): Use ctor_identifier and
dtor_identifier.
* name-lookup.c (constructor_name): Reimplement.
(constructor_name_p): Likewise.
(push_class_level_binding_1): Don't use constructor_name here.
* parser.c (cp_parser_direct_declarator): Reformat to avoid
nesting ifs.
* pt.c (tsubst_decl <FUNCTION_DECL>): Move var decls to
initialization point. Don't unnecessarily check for ctor name.
gcc/c-family/
* c-common.c (resort_field_decl_cmp): Don't declare.
2017-06-27 Nathan Sidwell <nathan@acm.org>
Merge trunk r249702.
gcc/c-family/
* c-common.h (field_decl_cmp, resort_sorted_fields): Delete.
* c-common.c (field_decl_cmp, resort_data,
resort_field_decl_cmp): Move to c-decl.c.
gcc/c/
* c-decl.c (field_decl_cmp, resort_data,
resort_field_decl_cmp): Moved from c-common.c
2017-06-26 Nathan Sidwell <nathan@acm.org>
Replace lang_type::sorted_fields with lang_type::bindings.
gcc/cp/
* cp-tree.h (lang_type): Delete sorted_fields. Add bindings
field.
(CLASSTYPE_SORTED_FIELDS): Replace with ...
(CLASSTYPE_BINDINGS): ... this.
* name-lookup.c (lookup_class_member): Reimplement.
(count_fields): Delete.
(sorted_fields_type_new): Delete.
(add_class_member): New.
(add_fields_to_record_type): Replace with ...
(add_class_members): ... this.
(add_enum_fields_to_record_type): Delete.
(create_classtype_sorted_fields): Replace with ...
(set_class_bindings): ... this.
(insert_late_enum_def_into_classtype_sorted_fields): Replace with ...
(insert_late_enum_def_bindings): ... this.
* name-lookup.h (create_classtype_sorted_fields,
insert_late_enum_def_into_classtype_sorted_fields): Replace with ...
(set_class_bindings, insert_late_enum_def_bindings): ... this.
* ptree.h (cxx_print_type): Don't print SORTED_FIELDS.
* search.c (lookup_field_1): Check CLASSTYPE_BINDINGS.
* decl.c (finish_enum_value_list): Use insert_late_enum_def_bindings.
* class.c (finish_struct_1): Use set_class_bindings.
* module.c (cpms_in::define_class): Likewise.
Start moving class name lookup around
gcc/cp/
* class.c (count_fields, add_fields_to_record_type,
add_enum_fields_to_record_type, sorted_fields_type_new,
create_classtype_sorted_fields,
insert_late_enum_def_into_classtype_sorted_fields): Move to ...
* name-lookup.c: ... here.
(lookup_class_member): New. Broken out of ...
* search.c (lookup_field_1): ... here. Call it.
* name-lookup.h (lookup_class_member,
create_classtype_sorted_fields,
insert_late_enum_def_into_classtype_sorted_fields): Declare.
Merge trunk r249657.
gcc/cp/
* cp-tree.h (lang_decl_fn): Remove assignment_operator_p field.
* module.c (cpms_{out,in}::lang_decl_bools: Likewise.
libcc1/
* libcp1plugin.cc (plugin_build_decl): Don't set
DECL_ASSIGNMENT_OPERATOR_P.
gcc/
* Makefile.in (MODULE_STAMP): Set here
(REVISION, REVISION_c): Override.
gcc/cp/
* Make-lang.in (MODULE_STAMP): Not here.
2017-06-23 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (DECL_COMPLETE_CONSTRUCTOR_P): Directly compare
identifier.
(DECL_BASE_CONSTRUCTOR_P, DECL_COMPLETE_DESTRUCTOR_P,
DECL_BASE_DESTRUCTOR_P, DECL_DELETING_DESTRUCTOR_P): Likewise.
(DECL_ASSIGNMENT_OPERATOR_P): Use IDENTIFIER_ASSIGN_OP_P.
* decl.c (grok_op_properties): Adjust identifier checking.
* init.c (expand_default_init): Adjust identifier descision.
* method.c (implicitly_declare_fn): Don't use
DECL_ASSIGNMENT_OPERATOR_P.
* search.c (lookup_fnfields_1): Use IDENTIFIER_CTOR_P,
IDENTIFIER_DTOR_P.
* call.c (in_charge_arg_for_name): Reimplement.
(build_special_member_call): Use IDENTIFIER_CDTOR_P,
IDENTIFIER_DTOR_P.
2017-06-22 Nathan Sidwell <nathan@acm.org>
Merge trunk r249572.
Reorder IDENTIFIER flags
gcc/cp/
* cp-tree.h (enum cp_identifier_kind): New.
(IDENTIFIER_KIND_BIT_0, IDENTIFIER_KIND_BIT_1,
IDENTIFIER_KIND_BIT_2): New.
(IDENTIFIER_MARKED): Move to TREE_LANG_FLAG_4.
(IDENTIFIER_VIRTUAL_P, IDENTIFIER_REPO_CHOSEN): Add IDENTIFIER_CHECK.
(C_IS_RESERVED_WORD): Replace with ...
(IDENTIFIER_KEYWORD_P): ... this.
(IDENTIFIER_CTOR_OR_DTOR_P): Replace with ...
(IDENTIFIER_CDTOR_P): ... this.
(IDENTIFIER_CTOR_P, IDENTIFIER_DTOR_P): New.
(IDENTIFIER_OPNAME_P): Replace with ...
(IDENTIFIER_ANY_OP_P): ... this.
(IDENTIFIER_ASSIGN_OP_P): New.
(IDENTIFIER_TYPENAME_P): Replace with ...
(IDENTIFIER_CONV_OP_P): ... this.
(NEW_DELETE_OPNAME_P): Replace with ...
(IDENTIFIER_NEWDEL_OP_P): ... this.
(DECL_CONV_FN_P, DECL_OVERLOADED_OPERATOR_P): Adjust.
(get_identifier_kind_name, set_identifier_kind): Declare.
* lex.c (get_identifier_kind_name, set_identifier_kind): New.
(init_operators): Adjust to avoid keywords, use
set_identifier_kind. Copy TYPE_EXPR slot.
(init_reswords): Call set_identifier_kind.
(unqualified_name_lookup_error): Adjust.
* operators.def (TYPE_EXPR): Remove.
* decl.c (struct predefined_identifier): Move into ...
(initialize_predefined_identifiers): ... here. Call
set_identifier_kind.
(grokfndecl, check_var_type, grokdeclarator): Adjust.
(grok_op_properties): Use IDENTIFIER_ANY_ASSIGN_OP to halve search
space. Adjust.
* call.c (name_as_c_string): Adjust.
(build_new_method_call_1): Likewise.
* cp-cilkplus.c (is_conversion_operator_function_decl_p): Likewise.
* cxx-pretty-print.c (pp_cxx_unqualified_id): Adjust.
* dump.c (cp_dump_tree): Adjust.
* error.c (dump_decl_name): Adjust.
* mangle.c (write_unqualified_id, write_member_name,
write_expression): Adjust.
(mangle_conv_op_name_for_type): Use set_identifier_kind.
* name-lookup.c (do_class_using_decl): Adjust.
(lookup_name_fuzzy, lookup_name_real_1): Likewise.
* parser.c (cp_lexer_get_preprocessor_token,
cp_parser_direct_declarator): Likewise.
* pt.c (push_template_decl_real, tsubst_decl, tsubst_baselink,
tsubst_copy, tsubst_copy_and_build): Adjust.
* ptree.c (cxx_print_identifier): Print identifier kind.
* search.c (lookup_field_r, lookup_member,
lookup_fnfields_idx_nolazy): Adjust.
* semantics.c (finish_id_expression): Adjust..
* typeck.c (cp_build_addr_expr_1): Adjust.
2017-06-21 Nathan Sidwell <nathan@acm.org>
Merge trunk r249464.
gcc/c-family/
* c-ada-spec.c (decl_sloc): Ignore builtin fields.
gcc/cp/
* class.c (layout_class_type): Anon aggregates can never be bases.
(finish_struct_1, dump_class_hierarchy_1): CLASSTYPE_AS_BASE can
be null.
* cp-tree.h (enum cp_tree_index): Add CPTI_AS_BASE_IDENTIFIER.
(as_base_identifier): New.
(module_context): Declare.
* decl.c (initialize_predefined_identifiers): Initialize as_base.
* error.c (dump_module_suffix): Use module_context.
* mangle.c (maybe_write_module): Likewise.
* module.c (module_context): New.
(dump_nested_name): Distingush NULL context.
(cpms_{in,out}::globals): Take array directly.
(cpms_{in,out}::tree_node_raw): New, broken out of ...
(cpms_{in,out}::tree_node): ... here. Call it. Use
module_context.
(cpms_in::finish): Add module number. Adjust.
(cpms_{in,out}::tag_trees): Write translation unit decl.
2017-06-16 Nathan Sidwell <nathan@acm.org>
Merge trunk r249268.
2017-06-15 Nathan Sidwell <nathan@acm.org>
Merge trunk r249217.
libcc1/
* libcp1plugin.c (supplement_binding): Don't call
maybe_remove_implicit_alias.
First bug report!
gcc/cp/
* cp-tree.h (CPTI_MANGLE): New.
(mangle_namespace): New.
(maybe_remove_implicit_alias): Delete.
* decl.c (cxx_init_decl_processing): Create mangle namespace.
* decl2.c (generate_mangling_alias): Use mangle_namespace.
* mangle.c (maybe_remove_implicit_alias): Delete.
(mangle_decl): Use mangle_namespace. Remove alias here.
* module.c (cpms_out::bindings): Ignore mangle_namespace.
* name-lookup.h (set_namespace_binding): Declare.
* name-lookup.c (supplement_binding_1): Don't deal with implicit
aliases here.
(set_namespace_binding): New. Broken out of ...
(set_global_binding): ... this. Call it.
(suggest_alternatives_for): Ignore mangle namespace.
gcc/testuite/
* g++.dg/module/bug-1_[ab].C: New.
2017-06-14 Nathan Sidwell <nathan@acm.org>
Classes complete - Vcall indices and friends added.
gcc/cp/
* module.c (cpms_{out,in}::tree_pair_vec): New.
(cpms_{out,in}::define_class): Stream vcall indices and friend list.
gcc/testsuite/
* g++.dg/module/class-6_[abc].C: New.
2017-06-12 Nathan Sidwell <nathan@acm.org>
Merge trunk r249076.
2017-06-09 Nathan Sidwell <nathan@acm.org>
Vtable streaming. Change keyed_classes representation.
gcc/cp/
* class.c (finish_struct_1): Adjust keyed_classes pushing.
* cp-tree.h (CPTI_KEYED_CLASSES): Delete.
(keyed_classes): Now a vector.
* decl.c (keyed_classes): Define.
(cxx_init_decl_processing): Initialize it.
(record_key_method_defined): Adjust pushing.
* decl2.c (decl_needed_p): Formatting fixes.
(c_parse_final_cleanups): Reset current module.
Call finish_module earlier. Adjust keyed_classes iteration.
* pt.c (instantiate_class_template_1): Adjust keyed_classes pushing.
* module.c (cpms_{out,in}::define_class): Adjust key method
streaming.
(cpms_{out,in}::lang_type_bools): Don't srtream interface flags.
gcc/testsuite/
* g++.dg/modules/class-5_[abc].C: New.
Typeinfo streaming
gcc/cp/
* cp-tree.h (DECL_TINFO_P): Also for TYPE_DECLs.
(get_pseudo_tinfo_index, get_pseudo_tinfo_type): Declare.
* rtti.c (enum tinfo_kind): Add TK_DERIVED_TYPES,
TK_VMI_CLASS_TYPES, TK_MAX, delete TK_FIXED.
(tinfo_names): New.
(typeid_ok_p): Lool at TYPE_MAIN_VARIANT.
(get_pseudo_to_index): Only determine index, don't create type.
(get_tinfo_desc): New. Create the pseudo type. Set DCL_TINFO_P.
(create_pseudo_type_info): Delete.
(get_pseudo_ti_init): Use get_tinfo_desc.
(get_pseudo_tinfo_index, get_pseudo_tinfo_type): New.
(create_tinfo_types): Only allocate the vector.
* module.c (cpms_{out,in}::insert): New.
(cpm_stream::global_tree_arys): Add sizetype_tab.
(cpms_out::tag_binding): Don't stream DECL_TINFO_P bindings.
(cpms_{out,in}::define_class): Don't stream
CLASSTYPE_TYPEINFO_VAR. Stream CLASSTYPE_VTABLES.
(cpms_{out,in}::core_vals): Stream CONSTRUCTORs.
(cpms_{out,in}::tree_node): Detect DECL_TINFO_P things.
2017-06-08 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (cpms_in::read_item, cpms_in::tree_node): More
diagnostics.
(cpms_{out,in}::start, cpms_{out,in}::core_vals): Fix call
handling.
gcc/testsuite/
* g++.dg/modules/class-4_[ab].C: New.
gcc/cp/
* module.c: Implement dump printf.
2017-06-07 Nathan Sidwell <nathan@acm.org>
Merge trunk r248972.
gcc/cp/
* module.c (cpms_{out,in}::core_vals): Stream block vars &
abstract origin.
2017-06-06 Nathan Sidwell <nathan@acm.org>
Inline ctors/dtors
gcc/cp/
* module.c (cpms_in::define_function): Deal with non-namespace
fn definitions.
(cpms_{out,in}::define_class): Define member fns.
(cpms_in::tag_definition): Clone fn.
* semantics.c (expand_or_defer_fn_1): Keep cloned fns body when
modules.
gcc/testsuite/
* g++.dg/modules/class-3_[abcd].C: Augment.
Member functions
gcc/cp/
* class.c (resort_type_method_vec): Avoid signed/unsigned compare.
* module.c (cpms_out::maybe_tag_definition): New.
(cpms_{out,in}::tag_definition): Always tag, return tagged thing.
(cpms_{out,in}::chained_decls, tree_vec): New.
(cpms_{out,in}::define_class): Stream methods, as_base.
(cpms_{out,in}::core_vals): Stream ARGUMENTs here.
(cpms_in::tree_node): Cope with immediate definitions.
gcc/testsuite/
* g++.dg/modules/class-3_[abcd].C: Augment.
More PoD struct
gcc/cp/
* module.c (cpms_{out,in}::ident_imported_decl): New.
(cpms_{out,in}::lang_type_vals): New.
(cpms_{out,in}::core_vals): Blocks and statements.
(cpms_{out,in}::tree_node): More general import referencing.
* name-lookup.c (name_lookup::add_module_fns): New.
(name_lookup::adl_namespace_only): Use it.
gcc/testsuite/
* g++.dg/modules/class-3_[abc].C: New.
2017-06-05 Nathan Sidwell <nathan@acm.org>
More PoD struct
gcc/cp/
* cp-tree.h (default_hash_traits): Make non-deletable.
(cpms_out::non_null): New hash trait.
(cpms_in::traits): Use simple_hashmap_traits.
(cpms_in::define_class, cpms_in::finish_type): Propagate
completeness.
(cpms_in::finish_type): Deal with pointer/ref to.
(cpms_{out,in}::core_vals): Stream ints, pointer/ref to.
(cpms_{out,in}::tree_node): Interstitial typedef.
gcc/testsuite/
* g++.dg/modules/class-1_[abc].C: Extend.
* g++.dg/modules/class-2_[ab].C: New.
2017-06-02 Nathan Sidwell <nathan@acm.org>
Pod struct
gcc/cp/
* cp-tree.h (create_classtype_sorted_fields): Declare.
* class.c (finish_struct_1): Adjust sorted field call.
(insert_into_classtype_sorted_fields): Rename to ...
(create_classtype_sorted_fields): ... here. Export
* module.c (cpms_{out,in}::tree_vec): New.
(cpms_{out,in}::define_function): New.
(cpms_{out,in}::define_class): New.
(cpms_{out,in}::tag_definition): Adjust.
(cpms_{out,in}::core_vals): Stream binfo, field_decl.
gcc/testsuite/
* g++.dg/modules/class-1_[abcd].C: Add field accesses.
Merge r248828.
gcc/cp/
* modules.c (cpms_out::core_vals, cpms_in::core_vals): Don't
stream structure fields etc.
2017-06-01 Nathan Sidwell <nathan@acm.org>
Incomplete or empty classes.
gcc/cp/
* cp-tree.h (ovl_iterator::export_tail): New.
(TYPE_GET_PTRMEMFUNC_TYPE, TYPE_SET_PTRMEMFUNC_TYPE): Delete.
(TYPE_PTRMEMFUNC_TYPE): New.
(maybe_add_lang_type_raw): Add ptrmem_p arg.
(fit_ptrmem_type_decl): Declare.
(ovl_insert): Add export_tail.
* decl.c (build_ptrmemfunc_type): Use fit_ptrmem_type_decl,
adjust.
(xref_tag_1): Call decl_set_module.
* lex.c (maybe_add_lang_type_raw): Add ptrmem_p arg. Adjust.
(fit_ptrmem_type_decl): New.
(cxx_make_type): Adjust.
* module.c (name_string): New. Use it everywhere.
(cpm_reader::fill): Check ferror.
(cpms_out::tag_binding): Skip builtins. Write types.
(cpms_out::lang_type_bools, cpms_in::lang_type_bools): New.
* name-lookup.c (STAT_EXPORTS): New.
(name_lookup::process_module_binding): Use it.
(update_binding): Set it.
(newbinding_bookkeeping): New. Broken out of ...
(do_pushdecl): ... here. Call it.
(push_module_binding): And call it here. Set STAT_EXPORTS.
* rtti.c (create_pseudo_type_info): Mark as builtins.
(get_pseudo_ti_index): Likewise.
(emit_support_tinfos): Use regular lookup to find type. Set
builtins location.
* tree.c (ovl_insert): Add export_tail arg.
gcc/testsuite/
* g++.dg/modules/class-1_[abcd].C: New.
2017-05-31 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c: Instrumentation.
Merge trunk r248748.
2017-05-30 Nathan Sidwell <nathan@acm.org>
Merge trunk r248694.
gcc/cp/
* module.c (cpms_out::tag_binding, cpms_in::tag_binding): Mark
type too.
(cpms_out::bindings): Adjust.
* name-lookup.c (push_module_binding): Add type arg.
gcc/cp/
* cp-tree.h (lang_decl_base): Lose decomposition_p flag.
(lang_decl) Update GTY tags.
(enum lang_decl_selector): New. Replace magic consts with this.
(DECL_DECOMPOSITION_P): Update.
(SET_DECL_DECOMPOSITION_P): Delete.
(maybe_add_lang_decl_raw): Second arg is bool.
(retrofit_lang_decl): Lose selector arg.
(fit_decomposition_lang_decl): Declare.
* decl.c (cp_finish_decomp): Use fit_decomposition_lang_decl.
(grokdeclarator): Likewise.
* lex.c (maybe_add_lang_decl_raw): Change 2nd arg to bool. Don't
to copying here.
(set_decl_linkage, fit_decomposition_lang_decl): New.
(retrofit_lang_decl): Lose selector arg.
(cxx_dup_lang_specific_decl): Use selector directly.
* module.c (cpms_out::lang_decl_bools, cpms_in::lang_decl_bools,
cpms_out::lang_decl_vals, cpms_in::lang_decl_vals): Use
lang_decl_selector.
(cpms_in::tree_node): Adjust maybe_add_lang_decl call.
gcc/
* REVISION: Add file.
gcc/c-family/
* c-cppbuiltin.c (c_cpp_builtins): Update __cpp_modules=201704.
2017-05-29 Nathan Sidwell <nathan@acm.org>
Merge trunk r248578.
Merge trunk r248574.
Merge trunk r248571.
2017-05-26 Nathan Sidwell <nathan@acm.org>
Merge trunk r248517.
gcc/cp/
* cp-tree.h: Comment cleanup.
* name-lookup.c: Likewise.
* tree.c: Likewise.
Merge trunk 248485.
gcc/cp/
* lex.c (maybe_retrofit_lang_decl): Add sel parm.
2017-05-25 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (ovl_iterator): Make unduplicatable.
(ovl_iterator::pop): New.
(lkp_iterator::operator++): Adjust.
Merge trunk r248454.
Merge trunk r248436.
2017-05-24 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (lookup_name): Reimplement state preservation and
restoration.
* tree.c (lookup_mark): Add asserts.
gcc/testsuite/
* g++.dg/lookup/koenig14.C: New.
Merge trunk r248406.
gcc/cp/
* call.c (build_operator_new_call, build_new_op_1): Open code ADL
lookup.
* name-lookup.h (lookup_function_nonclass): Delete.
(lookup_arg_dependent): Adjust return type.
* name-lookup.c (name_lookup): Absorb adl_lookup.
(name_lookup::search_adl): New.
(lookup_function_nonclass): Delete.
(lookup_arg_dependent): Adjust.
2017-05-23 Nathan Sidwell <nathan@acm.org>
Merge trunk r248389.
gcc/cp/
* name-lookup.c (name_lookup::name_lookup): Lose F parm.
(name_lookup::ambiguous, add_value, add_type): New.
(name_lookup::merge_binding): Delete.
(name_lookup::find_and_mark): Move from adl_lookup.
(name_lookup::process_binding): Adjust.
(adl_lookup::search_adl): New.
(do_lookup_arg_dependent): Call it.
(qualified_namespace_lookup): Return found flag.
(unqualified_namespace_lookup): Delete.
(lookup_name_real_1, push_namepace): Adjust.
Merge trunk r248377.
Merge trunk r248365.
2017-05-22 Nathan Sidwell <nathan@acm.org>
Merge trunk r248338.
gcc/cp/
* name-lookup.c (add_using_namespace): Remove FROM arg.
(notify_debug_using_namespace): New.
(finish_namespace_using_directive, push_namespace): Notify debug.
gcc/testsuite/
* g++.dg/lookup/strong-using-6.C: Delete.
gcc/cp/
* config-lang.in: Update.
* name-lookup.c (add_using_directive): Rename to ...
(add_using_namespace): ... here. Add FROM arg.
(do_toplevel_using_directive): Fold into add_using_namespace.
(finish_namespace_using_directive, finish_local_using_directive,
push_namespace): Adjust.
Merge trunk r248329.
gcc/testsuite/
PR c++/80830
* g++.dg/lookup/friend20.C: New testcase.
2017-05-19 Nathan Sidwell <nathan@acm.org>
Merge trunk r248295.
gcc/cp/
* cp-tree.h: Misc cleanups.
* name-lookup.c (pushdecl_top_level): Fix description.
gcc/
* dumpfile.h: Whitespace cleanups.
* system.h (ATTRIBUTE_NTC_PURE): Delete.
gcc/testsuite/
* g++.dg/tree-ssa/ssa-dse-2.C: Restore.
Merge trunk r248285.
Merge trunk r248271.
2017-05-18 Nathan Sidwell <nathan@acm.org>
Merge trunk r248250.
LANG_HOOK_REGISTER_DUMPS
gcc/
* context.h (context::set_passes): New.
* context.c (context::context): Do not create pass manager.
* toplev.c (general_init): Create pass manager here. Call
register dump lang hook.
* doc/invoke.texi: Document -fdump-lang option family.
* dumpfile.c (dump_files): Remove module and class dumps here.
(FIRST_AUTO_NUMBERED_DUMP): Adjust.
* dumpfile.h (tree_dump_index): Remove TDI_lang, TDI_class.
* langhooks-def.h (lhd_register_dumps): Declare.
(LANG_HOOKS_REGISTER_DUMPS): Define.
(LANG_HOOKS_INITIALIZER): Add it.
* langhooks.c (lhd_register_dumps): Define.
* langhooks.h (struct lang_hooks): Add register_dumps.
gcc/c-family/
* c-opts.c (class_dump_file, class_dump_flags): Delete.
(c_common_parse_file): Remove class dump handling.
(get_dump_info): Likewise.
gcc/cp/
* class.c (class_dump_id): Define.
(dump_class_hierarchy, dump_vtable, dump_vtt): Use it.
* cp-objcp-common.c (cp_register_dumps): New.
* cp-objcp-common.h (cp_register_dumps): Declare.
(LANG_HOOKS_REGISTER_DUMPS): Override.
* cp-tree.h (class_dump_id, module_dump_id): Declare.
* module.c (module_dump_id): Define.
(read_module, write_module): Use it.
gcc/testsuite/
* g++.dg/inherit/covariant7.C: Adjust.
* g++.dg/modules/ Adjust scans.
gcc/cp/
* cp-tree.h (lookup_add, lookup_maybe_add): Swap args.
* name-lookup.c (name_lookup::merge_binding,
adl_lookup::add_functions): Adjust.
* pt.c (check_explicit_specialization, do_class_deduction): Adjust.
* tree.c (lookup_add, lookup_maybe_add): Adjust.
Merge trunk r248192.
2017-05-17 Nathan Sidwell <nathan@acm.org>
Merge trunk r248159.
Merge trunk r248151.
* cp-tree.h (ovl_insert): Swap first two args. Update all uses.
Merge trunk r248144.
2017-05-16 Nathan Sidwell <nathan@acm.org>
Merge trunk r248126.
Merge trunk r248121.
Merge trunk r248116.
Merge trunk r248109.
2017-05-15 Nathan Sidwell <nathan@acm.org>
Merge trunk r248059.
gcc/cp/
* module.c (cpms_in::tag_definition): Robustify.
2017-05-12 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (cpms_{in,out}): Rename {read,write}_tree to tree_node.
gcc/cp/
* module.c (cpms_{in,out}): Rename read/write fns.
More inline bodies
gcc/cp/
* module.c (cpms_{in,out}::write_core_vals): Read/write
statement lists & LABEL_DECLs.
gcc/testsuite/
* g++.dg/modules/fn-inline-1_c.C: More test.
Inline function bodies
gcc/cp/
* module.c (cpms_{in,out}::write_core_vals): Read/write
exprs
(cpms_in::tag_definition): Insert inline function.
gcc/testsuite/
* g++.dg/modules/fn-inline-1_[ab].C: New.
Merge trunk r247968.
gcc/cp/
* module.c (cpm_reader::read_tree): Change interface, adjust callers.
gcc/cp/
* module.c (cpm_writer): Instrument bool distribution.
(cpms_out::tag_definition, cpms_in::tag_definition): New.
(cpms_out, cpms_in): Transfer more stuff.
2017-05-11 Nathan Sidwell <nathan@acm.org>
Merge trunk r247911.
2017-05-10 Nathan Sidwell <nathan@acm.org>
Merge trunk r247864.
Merge trunk r247834.
2017-05-09 Nathan Sidwell <nathan@acm.org>
Rename -fdump-front-end to -fdump-lang.
gcc/
* dumpfile.h (TDF_KIND_MASK, TDF_KIND): New. Adjust.
* dumpfile.c (dump_files): Rename file suffix.
(get_dump_file_name, dump_enable_all): Adjust.
* doc/invoke.texi: Rename option.
gcc/testsuite/
* g++.dg/modules: Adjust tests.
gcc/cp/
* module.c (cpms_in::finish): Merge global decls.
(cpms_in::finish_function, cpms_in::finish_namespace): Delete.
* name-lookup.h (push_module_namespace): Replace with ...
(merge_global_decl): ... this.
* name-lookup.c (push_module_namespace): Morph into ...
(merge_global_decl): ... this.
(push_module_binding): Don't re-add found things.
gcc/
* tree.h (TREE_CHECK6, tree_check6): Delete.
Merge trunk r247787.
gcc/cp/
* tree.c (type_has_nontrivial_copy_init): Use ovl_iterator.
Error message module designation.
gcc/cp/
* error.c (dump_module_suffix): New.
(dump_simple_decl, dump_function_name): Use it.
gcc/testsuite/
* g++.dg/modules/err-1_[abcd].C: New.
2017-05-08 Nathan Sidwell <nathan@acm.org>
Merge trunk r247749.
Implement 'export module foo;'
gcc/cp/
* cp-tree.h (declare_module): Add interface flag.
(import_export_module): Rename to ...
(import_module): ... here. Lose export flag.
* module.c (import_module): Determine exportness from export
depth.
(declare_module): Add interface flag, don't check attribs.
* parser.c (check_module_outermost): Don't check export depth.
(cp_parser_module_declaration): Don't deal with imports.
(cp_parser_import_declaration): New.
(cp_parser_module_export, cp_parser_declaration): Adjust.
gcc/testsuite/
* g++.dg/modules/import-1_[a-g].C: New.
Implement DR2061
gcc/cp/
* name-lookup.c (push_inline_namespace): New.
(push_namespace): Use it. Check inline consistency here ...
* parser.c (cp_parser_namespace_definition): ... not here.
gcc/testsuite/
* g++.dg/cpp0x/dr2061.C: New.
* g++.dg/parse/namespace-alias-1.C: Augment.
gcc/cp/
* cp-tree.h, call.c, class.c, name-lookup.c, parser.c, pt.c,
semantics.c, tree.c: Rename ovl2_iterator to lkp_iterator.
gcc/cp/
* name-lookup.h (push_namespace): Return int.
* name-lookup.c (push_namespace): Return count of depth pushed.
* parser.c (cp_parser_namespace_definition): Accumulate depth pushed.
2017-05-05 Nathan Sidwell <nathan@acm.org>
Merge trunk r247654.
Merge trunk r247646.
Merge trunk r247636.
Indirect import lookup by tagging
gcc/cp/
* cp-tree.h (MAYBE_DECL_MODULE_INDEX): New.
(DECL_GLOBAL_MODULE_P, DECL_THIS_MODULE_P): Delete.
* mangle.c (maybe_write_module): Adjust.
* module.c (cpms_out::write_tree, cpms_in::read_tree): Mark
imported decls by tag.
* name-lookup.h (key_module_instance, find_module_instance): Declare.
* name-lookup.c (module_binding_slot): Allow search only.
(key_module_instance): New.
(find_module_instance): Use key.
gcc/testsuite/
* g++.dg/modules/mod-indirect-1_[a-e].C: New.
2017-05-04 Nathan Sidwell <nathan@acm.org>
Merge trunk r247612.
gcc/testsuite/
* g++.dg/lookup/using17.C: Adjust error message.
Overload bindings
gcc/cp/
* module.c (cpms_in::tag_binding, cpms_out::tag_binding): Binding
can be overload.
(cpms_out::write_bindings): Write whole slot.
(cpms_in::finish): Look for import match.
(cpms_in::read_lang_decl_bools, cpms_out::write_lang_decl_bools,
cpms_in::read_lang_decl_vals, cpms_out::write_lang_decl_vals):
Implement.
* name-lookup.c (push_module_binding): Binding can be overload.
(find_module_instance): New.
* name-lookup.h (find_module_instance): Declare.
gcc/testsuite/
* g++.dg/modules/mod-impl-1_[abcd]: Add overloads.
2017-05-03 Nathan Sidwell <nathan@acm.org>
Merge trunk r247593.
gcc/cp/
* cp-tree.h (LOOKUP_SEEN_P): Map to TREE_VISITED.
(LOOKUP_FOUND_P, OVL_LOOKUP_P): Move to lang_flag_4
Modules via index, working again!
gcc/cp/
* module.c (cpms_in::tag_binding): Set module index.
gcc/testsuite/
* g++.dg/modules/mod-impl-1_a.C: Remove xfail.
Namespace partitions.
gcc/cp/
* cp-tree.h (MODULE_NAMESPACE_P, GLOBAL_MODULE_NAMESPACE_P,
CURRENT_MODULE_NAMESPACE_P): Delete.
(pop_module_namespace, push_module_namespace): Delete.
* module.c (cpms_out::write_bindings, cpms_in::finish_namespace):
Remove module namespace hacks.
(push_module_namespace, pop_module_namespace): Delete.
(module_to_ext): Swallow into ...
(module_to_filename): ... here.
(declare_module): Don't create module namespace symbol.
* name-lookup.c (module_binding_slot): Fixup global module
insertion.
(is_nested_namespce, is_ancestor): Remove module namespace hacks.
* parser.c (check_module_outermost, cp_parser_module_export,
cp_parser_module_proclamation,
cp_parser_namespace_definition): Likewise
gcc/testsuite/
* g++.dg/modules/mod-sym-[123].C: Remove xfails.
* g++.dg/modules/mod-impl-1_a.C: Revert to run test.
Namespace partitions.
gcc/cp/
* cp-tree.h (OVL_EXPORT_P): New. Move OVL_LOOKUP_P.
(DECL_MODULE_EXPORT_P): Allow any DECL.
(module_import_bitmap): Declare.
* decl.c (cxx_init_decl_processing): Export global_namespace.
* module.c (module_import_bitmap): New.
(do_module_import): Install as global module, if needed.
(declare_module): Freeze global imports.
* name-lookup.c: Include bitmap.h.
(name_lookup::process_binding): Take split bindings.
(name_lookup::process_module_binding): New.
(name_lookup::search_namespace_only): Adjust.
* tree.c (ovl_insert): Sort by export_p too.
Merge trunk r247550.
Namespace partitions.
gcc/cp/
* cp-tree.h (MODULES_PER_BINDING_CLUSTER): Delete.
(MODULE_VECTOR_NUM_CLUSTERS, MODULE_VECTOR_CLUSTER_BASE,
MODULE_VECTOR_CLUSTER_LAST, MODULE_VECTOR_CLUSTER): New.
(make_module_vec): Declare.
* module.c (cpms_out::write_bindings): Look into MODULE_VECTOR.
* name-lookup.c (modue_binding_slot): New.
(name_lookup::merge_binding, name_lookup::process_binding): New.
(name_lookup::search_qualified): Add usings parm.
(name_lookup::search_namespace_only): Look into MODULE_VECTOR.
(do_pushdecl): Create module slot.
(find_namespace_partition): New, from ...
(push_module_namespace): ... here. Call it.
(push_module_binding): Create module slot.
(push_namespace): Adjust.
* ptree.c (cxx_print_xnode): Print MODULE_VECTOR.
* tree.c (make_module_vec): New.
2017-05-02 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (saved_scope): Add this_module.
(current_module): New.
* module.c (cpms_in): Add remapping vector. Remove scope.
(cpms_in::tag_import): Update remapping vector.
(cpms_out::tag_binding, cpms_in::tag_binding): Write/read module no.
* name-lookup.c (do_push_to_top_level): Set current_module.
gcc/doc/
* invoke.texi (-fdump-front-end): Document.
Read/write direct namespace bindings part 2.
gcc/cp/
* module.c (cpms_out::tag_binding): Write the tag.
(cpms_in::read_item): Detect rt_binding, set modules slot.
(cpms_out::write_context_binding): Delete.
(cpms_out::write_bindings): Simplify.
(cpms_in::finish_function): Don't push function here.
(cpms_in::finish_namespace): Adjust.
(do_module_import): Adjust.
* name-lookup.h (push_module_namespace): Declare.
* name-lookup.c (push_module_namespace): New.
Read/write direct namespace bindings part 1.
gcc/cp/
* cp-tree.def (module_vector): New tree type.
* cp-tree.h (module_cluster, tree_module_vec): New tree.
(enum cp_tree_node_structure_enum): Add TS_CP_MODULE_VECTOR.
(lang_tree_node): Add tree_module_vec.
* decl.c (cp_tree_node_structure): Detect MODULE_VECTOR.
* module.c (cpms_out::tag_binding, cpms_in::tag_binding): New.
(cpms_out::write_context_binding): New.
(cpms_out::walk_namespace): Replace with ...
(cpms_out::write_bindings): ... this.
* name-lookup.h (push_module_binding): Declare.
* name-lookup.c (push_module_binding): New.
2017-05-01 Nathan Sidwell <nathan@acm.org>
gcc/
* tree.c (type_hash_default): Adjust ARRAY_TYPE hash.
Import timestamp & crc
gcc/cp
* module.c (module_state): Add crc & stamp.
(enum import_kind): New.
(cpms_out::header, cpms_in::header): Check timestamps.
(time2str, timestamp_mismatch): New.
(cpms_out::tag_import, cpms_in::tag_import): Xfer indirect imports
too.
(read_module, do_module_import): Check timestamp & crc.
gcc/testsuite/
* g++.dg/modules/mod-stamp-1_[abcd].C: New.
Proper mangle for module. Still have namespace hack though.
gcc/cp/
* cp-tree.h (DECL_GLOBAL_MODULE_P, DECL_THIS_MODULE_P): Protect
DECL_LANG_SPECIFIC.
(decl_set_module, module_name, module_name_parts): New.
* decl.c (duplicate_decls): Check moduleness.
(grokfndecl): Set moduleness.
* mangle.c (maybe_write_module): New.
(write_name): Call it.
* module.c (module_state::set_name): New.
(decl_set_module, module_name, module_name_parts): New.
gcc/testsuite/
* g+.dg/modules.exp (dg-module-do, module_do_it): Adjust.
* g++.dg/modules/mod-impl-1_a.C: Adjust & XFAIL.
* g++.dg/modules/mod-impl-1_c.C: Likewise.
* g++.dg/modules/mod-sym-1.C: Likewise.
* g++.dg/modules/mod-sym-2.C: Likewise.
* g++.dg/modules/mod-sym-3.C: Likewise.
2017-04-28 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (struct_lang_base): Add module_index. Shrink selector.
(DECL_MODULE_INDEX, DECL_GLOBAL_MODULE_P, DECL_THIS_MODULE_P): New.
(EXPORTED_P): Rename to ..
(DECL_EXPORTED_P): ... here.
* modules.c: Adjust EXPORTED_P uses.
Module indices and separated import/export info
gcc/cp/
* cp-tree.h (GLOBAL_MODULE_INDEX, THIS_MODULE_INDEX,
IMPORTED_MODULE_BASE): New.
(import_module, export_module): Replace with ...
(import_export_module): ... this.
* module.c: #include bitmap.h.
(enum import_kind): Delete.
(struct module_state): New.
(modules, module_map, this_module): New.
(imported_modules): Delete.
(cpms_in::state): New member. Update constructor.
(cpms_in::tag_import, cpms_out::tag_import): Take is_export arg.
(cpms_in::read_item): Assign module index.
(module_user, is_interface): Delete.
(dopen, dclose): Delete. Move to call sites.
(read_module): Return module index.
(do_module_import): Reimplement.
(import_module, export_module): Replace with ...
(import_export_module): ... this.
(declare_module, write_module, finish_module): Adjust.
* parser.c (cp_parser_module_declaration): Adjust,
gcc/testsuite/
* g++.dg/modules/mod-decl-5_b.C: Adjust.
2017-04-27 Nathan Sidwell <nathan@acm.org>
Kill rt_import popping madness
gcc/cp/
* module.c (cpm_serial::rt_export): New tag.
(cpms_in::tag_import): Do the importing right now.
(cpms_in::read_item): ... not here.
(read_module): Pass in dump file name, open it if needed.
Kill walk_namespaces
gcc/cp/
* cp-tree.h (walk_namespaces): Delete.
* decl.c (walk_namespaces_r, walk_namespaces): Delete.
Rework module namespace walking
gcc/cp/
* name-lookup.h: (decapsulate_binding): Declare.
* name-lookup.c: (decapsulate_binding): New.
* module.c (cpms_out::walk_namespace): Iterate over namespace
bindings, not decls.
(imported_modules): Key by lang_identifier. Adjust
allocation/deletion.
Refix unhidden extern C
Revert 2017-04-26 extern_c_slot patch.
gcc/cp/
* name-lookup (do_pushdecl): Call check_extern_c_conflict when
unhiding.
gcc/testsuite/
* g++.dg/lookup/extern-c-redecl.C: Adjust.
* g++.dg/lookup/extern-c-hidden.C: New test.
Merge trunk r247281.
gcc/
* tree.c (type_hash_default): Hash TYPE_TYPELESS_STORAGE.
gcc/objc/
* objc-gnu-runtime-abi-01.C (objc_add_static_instance): Use
pushdecl langhook.
2017-04-26 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (extern_c_slot): New.
(check_extern_c_conflict): Use it.
(unhidden_extern_c): New.
(do_pushdecl): Call it.
gcc/cp/
* name-lookup.c (extern_c_slot): New.
(check_extern_c_conflict): Use it.
(unhidden_extern_c): New.
(do_puhdecl): Call it.
Die IDENTIFIER_GLOBAL_BINDINGS! Die!
gcc/
* ipa-devirt.c (default_hash_traits <type_pair>): Add GTY((skip))s.
gcc/cp/
* cp-tree.h (lang_identifier): Remove namespace_bindings.
(default_hash_traits<lang_identifier *>): Specialization.
(IDENTIFIER_NAMESPACE_BINDINGS): Delete.
(lang_decl_ns): Add bindings map.
(DECL_NAMESPACE_BINDINGS): New.
* lex.c (maybe_add_lang_decl_raw): Allocate namespace binding map.
* name-lookup.c (create_namespace_binding): Delete.
(find_namespace_binding): Split into ...
(find_or_create_namespace_slot, find_namespace_slot): ... these.
Update all callers.
(extern_c_fns): Change to identifier map.
* ptree.c (cxx_print_identifier): Remove IDENTIFIER_NAMESPACE_BINDINGS.
2017-04-25 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (find_namespace_binding): Return slot
pointer. Adjust all callers.
(update_binding): Add slot pointer arg. Adjust.
(check_extern_c_conflict): Cons up list of fns.
(c_linkage_bindings): Use extern_c_fns map.
gcc/cp/
* name-lookup.c (extern_c_fns): New hash.
(check_extern_c_conflict): Reimplement using hash map.
(do_pushdecl): Move check_extern_c_conflict later.
Namespace stat hack via special overload
gcc/cp/
* name-lookup.c (STAT_HACK_P, STAT_TYPE, STAT_DECL,
MAYBE_STAT_DECL, MAYBE_STAT_TYPE): New.
(stat_hack): New.
(find_namespace_value, name_lookup::search_namespace_only,
update_binding, do_pushdecl, set_identifier_type_value_with_scope,
set_global_value, lookup_type_scope_1, do_pushtag): Adjust.
2017-04-24 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (add_local_decl): Delete.
(name_lookup::add): Fold into ...
(name_lookup::search_namespace_only): ... here.
(update_binding): Allow pushing the same artificial type.
(do_pushdecl): Explicitly set namespace type.
(push_local_binding): Use add_decl_to_level.
(set_identifier_type_Value_with_scope): Use update_binding for
namespaces.
gcc/cp/
* name-lookup.c (do_nonmember_using_decl): Pass in pointers to
value and type nodes.
(do_local_using_directive): Use current_binding_level directly.
(do_toplevel_using_directive): Adjust.
(lookup_type_current_level): Delete.
gcc/cp/
* name-lookup.c (diagnose_name_conflict): Check decl context.
(do_nonmember_using_decl): Simplify.
gcc/testsuite/
* g++.dg/lookup/using13.C: Adjust error.
* g++.dg/lookup/using59.C: Likewise,
gcc/cp/
* cp-tree.h (SET_IDENTIFIER_GLOBAL_VALUE): Update.
* name-lookup.h (set_namespace_value): Rename to ....
(set_global_value): ... here.
* name-lookup.c (update_namespace_binding): Delete.
(set_namespace_value): Rename to ....
(set_global_value): ... here. Update binding directly.
2017-04-20 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (ovl_lookup_keep, ovl_lookup_mark, ovl_lookup_add,
ovl_lookup_maybe_add): Rename to ...
(lookup_keep, lookup_mark, lookup_add, lookup_maybe_add): ... these.
Keep overloads correctly ordered
gcc/cp/
* cp-tree.h (ovl_iterator::unhide): Reimplement.
(ovl_iterator::replace, ovl_iterator::ovl_unhide): Delete.
(ovl_iterator::remove_node, ovl_iterator::unhide_node): Declare.
(ovl_insert, ovl_lookup_maybe_add): Declare.
* name-lookup.c (adl_lookup::add_functions): Adjust.
(do_lookup_arg_dependent): Adjust.
(do_nonmember_using_decl): Adjust.
* pt.c (make_constrained_auto, do_class_deduction): Adjust.
* tree.c (ov_move_unhidden, ovl_add): Delete.
(ovl_copy, ovl_insert): New.
(ovl_iterator::unhide_node, ovl_iterator::remove_node): New.
(ovl_lookup_mark, ovl_lookup_add): Adjust.
(ovl_lookup_maybe_add): New.
(ovl_lookup_keep, ovl_skip_hidden): Adjust.
(ovl_iterator::ovl_unhide, ovl_iterator::replace): Delete.
* class.c (add_method): Adjust.
2017-04-14 Nathan Sidwell <nathan@acm.org>
Kill per-namespace static_decls.
gcc/cp/
* cp-tree.h (static_decls): Declare.
(wrapup_globals_for_namespace,
diagnose_inline_vars_for_namespace): Replace with ...
(wrapup_namespace_globals): ... this.
* decl.c (static_decls): Define.
(wrapup_globals_for_namespace,
diagnose_inline_vars_for_namespace): Replace with ...
(wrapup_namespace_globals): ... this.
(cxx_init_decl_processing): Initialize static_decls.
* decl2.c (c_parse_final_cleanups): Adjust.
* name-lookup.h (cp_binding_level): Remove static_decls member.
* name-lookup.c (add_decl_to_level): Adjust.
(begin_scope): Adjust.
Merge namespace and local scope binding update
gcc/cp/
* name-lookup.c (add_namespace_decl): Delete.
(namespace_push_binding, local_push_binding): Merge into ...
(update_binding): ... this.
(do_pushdecl): Adjust.
2017-04-13 Nathan Sidwell <nathan@acm.org>
Cleanups
gcc/cp/
* lex.c (unqualified_name_lookup_error): Use pushdecl.
* name-lookup.h (push_local_binding): Delete.
* name-lookup.c (add_decl_to_level): New, combining
add_namespace_decl, add_local_decl.
(namespace_push_binding, local_push_binding): Adjust.
(do_pushdecl): Adjust.
(push_local_binding): Make static.
Unify binding push part 7
gcc/cp/
* name-lookup.c (namespace_push_binding): Merge duplicate code
from local_push_binding. Chain the decl.
(do_pushdecl): Adjust.
Cleanup pushdecl interface
gcc/cp/
* cp-lang.c (cxx_pushdecl): New.
(LANG_HOOKS_PUSHDECL): Override.
* name-lookup.h (pushdecl): Remove overload. Add default arg.
* name-lookup.c (pushdecl): Likewise.
gcc/c/
* c-tree.h (pushdecl): Declare.
gcc/c-family/
* c-common.c (c_register_builtin_type): Use pushdecl lang hook.
* c-common.h (pushdecl): Don't declare.
Some cleanups
gcc/cp/
* name-lookup.c (update_local_overload): Drop oldval parm.
(replace_local_overload_binding): Delete. Fold into only caller.
(fixup_unhidden_decl): Likewise.
(augment_local_overload_binding): Likewise.
Unifying binding push part 6
gcc/cp/
* name-lookup.c (find_local_binding): New. Broken out of ...
(find_local_value): ... this. Use it.
(update_local_overload): New. Broken out of ...
(replace_local_overload_binding): ... this. Use it.
(do_pushdecl): Keep local binding around.
(local_push_binding): Consume supplement_binding, add_local_decl.
Unifying binding push part 5
gcc/cp/
* name-lookup.c (skip_anticipated_builtins): Kill.
(namespace_push_binding): Consume supplement_binding.
(do_pushdecl): Skip hidden builtin here. Adjust.
gcc/testsuite/
* g++.dg/lookup/using59.C: New.
2017-04-12 Nathan Sidwell <nathan@acm.org>
Unifying binding push part 4
gcc/cp/
* name-lookup.c (namespace_push_binding, local_push_binding):
Don't dup decls here. Deal with using.
(do_pushdecl): Adjust.
gcc/testsuite/
* g++.dg/lookup/using58.C: New.
Unifying binding push part 3
gcc/cp/
* name-lookup.c (create_local_binding) New.
(do_local_push_overload): Turn into ...
(local_push_binding): ... this.
(do_pushdecl): Adjust.
Unifying binding push part 2
gcc/cp/
* name-lookup.c (create_namespace_binding) New.
(find_namespace_binding): Use it.
(do_namespace_push_overload): Convert to ...
(namespace_push_binding): ... this.
(do_pusdecl): Adjust
Unifying binding push part 1
gcc/cp/
* name-lookup.c (do_pusdecl): Skip using decls. Retain namespace.
2017-04-11 Nathan Sidwell <nathan@acm.org>
Separating namespace bindings part 15
gcc/cp/
* cp-tree.h (PUSH_GLOBAL, PUSH_LOCAL, PUSH_USING): Delete.
* lex.c (unqualified_name_lookup_error): Adjust push_local_binding
call.
* name-lookup.h (push_local_binding): Flags is now bool.
* name-lookup.c (matching_using_decl_p): Rename to ...
(matching_fn_p): ... here. Update callers.
(set_local_extern_decl_linkage): New. Broken out of ...
(do_pushdecl): ... here. Call it.
(push_local_binding, augment_local_overload_binding,
do_local_push_overload, do_local_using_decl): Flags is now bool.
gcc/testsuite/
* g++.dg/lookup/extern-redecl1.C: New.
* g++.dg/parse/ctor9.c: tweak.
Separating namespace bindings part 14
gcc/cp/
* friend.c (do_friend): Use pushdecl directly.
* name-lookup.h (lookup_name_innermost_nonclass_level): Delete.
* name-lookup.c (find_local_value): New. Broken out of ...
(lookup_name_innermost_nonclass_level_1): ... here. Call
it. Rename to ...
(lookup_name_innermost_nonclass_level): ... this. Delete external
entry point.
(do_pushdecl): Start handling binding levels directly. Check
local class friend injection rule. More cleanup.
gcc/testsuite/
* g++.dg/lookup/friend12.C: Augment & adjust.
* g++.old-deja/g++.jason/scoping12.C: Adjust.
Separating namespace bindings part 13
gcc/cp/
* name-lookup.c (do_pushdecl): Some cleanups.
Separating namespace bindings part 12
gcc/cp/
* name-lookup.c (do_pushdecl): Move overload pushing next to
non-overload pushing.
2017-04-10 Nathan Sidwell <nathan@acm.org>
Separating namespace bindings part 11
gcc/cp/
* name-lookup.c (check_local_shadow): Move lookup code to here ...
(do_pushdecl): ... from here.
Separating namespace bindings part 10
gcc/cp/
* name-lookup.c (do_pushdecl): Reorder & delete more obsolete code.
Separating namespace bindings part 9
gcc/cp/
* name-lookup.c (do_pushdecl): Delete a tonne of obsolete code.
2017-04-07 Nathan Sidwell <nathan@acm.org>
Fix bogus scope handling
gcc/cp/
* call.c (make_temporary_var_for_ref_to_temp): Push temp into
current scope.
* decl.c (xref_tag_1): Pass ts_lambda to pushtag.
* name-lookup (do_pushtag): Deal with ts_lambda scope.
gcc/testsuite
* g++.dg/cpp0x/forw_enum9.C: Fix testcase.
2017-04-06 Nathan Sidwell <nathan@acm.org>
Separating namespace bindings part 8
gcc/cp/
* name-lookup.c (do_pushdecl): Kill obsolete C-era code!
Separating namespace bindings part 7
gcc/cp/
* name-lookup.c (check_local_shadow, set_decl_context_in_fn): Break
out and simplify from ...
(do_pushdecl): ... here. Call them.
Separating namespace bindings part 6
gcc/c-family/
* c-common.h (pushdecl_top_level): Delete.
gcc/cp/
* name-lookup.h (pushdecl_top_level): Delete non-friendly version.
* name-lookup.c (check_extern_c_conflict): New.
(lookup_extern_c_fun_in_all_ns): Delete.
(do_pushdecl): Call it. Rename variables sanely.
(pushdecl_top_level): Delete non-friendly version.
2017-04-05 Nathan Sidwell <nathan@acm.org>
Separating namespace bindings part 5
gcc/cp/
* name-lookup.h (getdecls): Rename to ...
(get_local_decls): ... here.
* name-lookup.c (pop_bindings_and_leave_scope): Adjust.
(do_pushdecl): Add some asserts.
(getdecls): Rename to ...
(get_local_decls): ... here. Assert local scope.
* decl.c (poplevel): Adjust.
(start_preparsed_function): Don't set current_function_decl, until
decl is pushed.
(store_parm_decls): Adjust.
* parser.c (synthesize_implicit_template_parm): Adjust.
Separating namespace bindings part 4
gcc/cp/
* cp-lang.c (LANG_HOOKS_GETDECLS): Override.
(get_global_decls): New.
* decl.c (poplevel): Assert not in namespace. Simplify.
* name-lookup.c (pop_binding): Rename to ...
(pop_local_binding): ... here.
(pop_bindings_and_leave_scope): Adjust.
(getdecls): Assert not in namespace.
* name-lookup.h (pop_binding): Rename to ...
(pop_local_binding): ... here.
Separating namespace bindings part 3
gcc/cp/
* name-lookup.c (do_local_push_overload): New, split out of ...
(push_overloaded_decl_1): ... this. Delete.
(push_overloaded_decl): Delete.
(do_pushdecl): Adjust.
Separating namespace bindings part 2
gcc/cp/
* name-lookup.c (compparms_for_decl_and_using_decl): Replace with ...
(matching_using_decl_p): ... this.
(do_namespace_push_overload): New, split out of ...
(push_overloaded_decl_1): ... this.
(do_pushdecl): Adjust.
(do_nonmember_using_decl): Adjust.
2017-04-04 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.h (get_global_value_if_present,
is_typename_at_global_scope): Delete.
* class.c (build_vtbl_initializer): Adjust.
* decl.c (grokdeclarator)
* except.c (do_get_exception_ptr, do_begin_catch, do_end_catch,
do_allocate_exception, do_free_exception, build_throw): Adjust.
* init.c (throw_bad_array_new_length): Adjust.
* rtti.c (throw_bad_cast, throw_bad_typeid): Adjust.
gcc/cp/
* cp-tree.h (CPTI_INIT_LIST_IDENTIFIER, init_list_identifier): New.
* decl.c (initialize_predefined_identifiers): Initialize
initializer_list identifier.
* call.c (is_std_init_list): Adjust.
* name-lookup.c (do_pushtag): Likewise.
* pt.c (listify): Likewise.
Separating namespace bindings part 1
gcc/cp/
* name-lookup.h (namespace_binding, set_namespace_binding):
Replace with ...
(get_namespace_value, set_namespace_value): ... these.
(get_global_value_if_present, is_typename_at_global_scope): Adjust.
* cp-tree.h (IDENTIFIER_GLOBAL_VALUE,
SET_IDENTIFIER_GLOBAL_VALUE): Adjust.
(IDENTIFIER_NAMESPACE_VALUE, SET_IDENTIFIER_NAMESPACE_VALUE): Delete.
* pt.c (listify): Use get_namespace_value.
* decl.c (poplevel): Use get_namespace_value.
* name-lookup.c (cp_binding_level_find_binding_for_name): Replace
with ...
(find_namespace_binding): ... this.
(update_namespace_binding, find_namespace_value,
add_namespace_decl, add_local_decl): New.
(name_lookup::search_namespace_only,
adl_lookup::assoc_namespace_only): Adjust.
(binding_for_name, add_decl_to_level): Delete.
(fixup_unhidden_decl, do_pushdecl, push_local_binding,
check_for_out_of_scope_variable,
set_identifier_type_value_with_scope, push_overloaded_decl_1): Adjust.
(namespace_binding_1, namespace_binding): Replace with ...
(get_namespace_value): ... this.
(set_namespace_binding_1, set_namespace_binding): Replace with ...
(set_namespace_value): ... this.
(do_toplevel_using_decl, lookup_type_scope_1,
lookup_name_innermost_nonclass_level_1, do_push_nested_namespace,
push_namespace): Adjust.
2017-04-03 Nathan Sidwell <nathan@acm.org>
Merge trunk r246647.
gcc/cp/
* pt.c (): Adjust guiding decl code.
libcc1/
* libcp1plugin.cc (safe_pushdecl_maybe_friend): Adjust.
(plugin_make_namespace_inline): Adjust.
(plugin_add_using_namespace): Likewise.
Remove usings graph.
gcc/cp/
* cp-tree.h (lang_decl_ns): Replace tree list ns_using, ns_users
with tree vector usings & inlinees.
(DCL_NAMES_SPACE_USING, DECL_NAMESPACE_INLINEES): Update.
(TREE_INDIRECT_USING): Delete.
* decl.c (cxx_init_decl_processing): Tweak.
* name-lookup.h (cp_binding_level): using_directives is a vec.
* name-lookup.c (name_lookup::do_queue_usings, queue_usings,
search_namespace, search_usings, queue_namespace,
search_unqualified, assoc_namespace_only): inlinees and usings are
vectors. Remove old TREE_LIST code.
(namespace_ancestor_1, namespace_ancestor, add_using_namespace_1,
add_using_namespace): Delete.
(qualified_namespace_lookup): Tweak.
(add_using_directive): New.
(do_toplevel_using_directive, do_local_using_directive): Adjust.
(push_namespace): Adjust.
* tree.c (decl_anon_ns_mem_p): Reimplement.
(cp_free_lang_data): Update.
2017-03-31 Nathan Sidwell <nathan@acm.org>
Reimplement unqualified namespace lookup
gcc/cp/
* name-lookup.c (name_lookup::state, name_lookup::preserve_state,
name_lookup::restore_state): New.
(name_lookup::queue_namespace,
name_lookup::do_queue_usings, name_lookup::queue_usings,
name_lookup::search_unqualified): New.
(unqualified_namespace_lookup_1): Kill.
(unqualified_namespace_lookup): Adjust.
(lookup_using_namespace): Kill.
gcc/testsuite/
* g++.dg/lookup/lambda1.C: New.
gcc/cp/
* name-lookup.c (name_lookup::scopes): Make static. Adjust uses.
(name_lookup::search_namespace_only): Broken out of ...
(name_lookup::search_namespace): ... here. Call it.
* tree.c (ovl_cache): New.
(ovl_make, ovl_lookup_keep): Use it.
2017-03-30 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* dump.c (cp_dump_tree): Allow nested overloads.
Add SCOPE_DEPTH
gcc/cp/
* cp-tree.h (SCOPE_DEPTH): New.
* decl.c (cxx_init_decl_processing): Set current_namespace.
* name-lookup.h (is_nested_namespace): Declare.
(is_associated_namespace): Delete.
* name-lookup.c (is_nested_namespace): New.
(is_ancestor): Use is_nested_namespace for namespaces.
(set_decl_namespace): Use is_nested_namespace.
(namespace_ancestor_1): Likewise.
(is_associated_namespace): Delete.
(push_namespace): Set SCOPE_DEPTH.
* pt.c (check_specialization_namespace): Use is_nested_namespace.
(check_unqualified_spec_or_inst): Likewise.
Reimplement qualified namespace lookup
gcc/cp/
* name-lookup.c (cp_binding_level_find_binding_for_name): Remove
premature optimiation.
(find_binding): Delete.
(name_lookup): Add flags, move scopes from adl_lookup.
(name_lookup::search_namespace, search_usings, search_qualified): New.
(tree_vec_contains): Kill.
(qualified_namespace_lookup): Kill old O(N^2) code.
gcc/cp/
* pt.c (determine_specialization): Use 2-d iterator
2017-03-29 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* cp-tree.h (LOOKUP_MARKED_P, RECORD_MARKED_P): Rename to ...
(LOOKUP_SEEN_P, LOOKUP_FOUND_P): ... here. Update everywhere.
gcc/cp/
* name-lookup.c (arg_assoc::assoc_expr): Refactor.
(do_lookup_arg_dependent): Renamed from lookup_arg_dependent_1.
(lookup_arg_dependent): Adjust.
(qualified_namespace_lookup): Renamed from
qualified_lookup_using_namespace.
Kill DECL_NAMESPACE_ASSOCATIONS
gcc/cp/
* cp-tree.h (DECL_NAMESPACE_INLINE_P): Renamed.
(DECL_NAMESPACE_ASSCIATIONS): Delete.
(DECL_NAMESPACE_INLINEES): New.
* name-lookup.c (adl_lookup::assoc_namespace_only): New.
(adl_lookup::assoc_namespace): Find parent, walk from there.
(is_associated_namespace): Walk inline namespace tree.
(push_namepace): Add to INLINEES not ASSOCIATIONS.
gcc/cp/
* lambda.c (maybe_add_lambda_conv_op): Use namespace_bindings_p.
* method.c (implicitly_declare_fn): Likewise.
* search.c (node_debug_info_needed): Likewise.
gcc/cp/
* name-lookup.h (finish_namespace_using_directive): Rename from
...
(finish_toplevel_using_directive): ... here.
* name-lookup.c: Likewise.
* parser.c (cp_parser_using_directive): Adjust.
2017-03-28 Nathan Sidwell <nathan@acm.org>
Cleanup pushdecl_top_level
gcc/cp/
* cp-tree.h (pushdecl_top_level_maybe_friend,
pushdecl_top_level_and_finish): Delete.
* decl.c (cp_make_fname_decl): Adjust.
* decl2.c (get_guard, handle_tls_init): Likewise.
* pt.c (tsubst_friend_class): Likewise.
* rtti.c (get_tinfo_decl, tinfo_base_init): Likewise.
* name-lookup.h (pushdecl_top_level, pushdecl_top_level_init): Declare.
* name-lookup.c (pushdecl_top_level_1): Rename to ...
(push_decl_top_level): ... here.
(pushdecl_top_level_init): New.
(pushdecl_top_level_maybe_friend): Delete.
(pushdecl_top_level_and_finish): Delete.
Cleanup pushdecl
gcc/cp/
* cp-tree.h (pushdecl, pushdecl_maybe_friend): Delete.
(pushtag): Delete.
* decl.c (cp_make_fname_decl): Call pushdecl_outermost_localscope.
* lambda.c (insert_capture_proxy): Likewise.
* friend.c (do_friend): Call overloaded pushdecl.
* name-lookup.h (pushdecl_with_scope): Delete.
(pushdecl, pushtag, pushdecl_outermost_localscope): Declare.
* name-lookup.c (pushdecl_maybe_friend_1): Rename to ...
(do_pushdecl): ... here.
(pushdecl_maybe_friend): Replace with overloaded pushdecl.
(pushdecl): Adjust.
(pushdecl_with_scope_1): Rename to do_pushdecl_with_scope. Adjust.
(pushdecl_with_scope): Delete.
(pushdecl_outermost_localscope): New.
(pushdecl_namespace_level): Adjust.
(do_pushtag): Renamed from pushtag_1.
(pushtag): Adjust.
Cleanup namespace push/pop part 2
gcc/cp/
* module.c (cpms_in::finish_namespace): Adjust.
(push_module_namespace): Adjust.
* name-lookup.c (push_namespace, pop_namespace): Reimplement.
(make_namespace_inline): Delete.
* name-lookup.h (push_namespace): Change prototype.
* parser.c (cp_parser_namespace_definition): Adjust.
Cleanup namespace push/pop part 1
gcc/cp/
* cp-tree.h (CPTI_GLOBAL, CPTI_GLOBAL_IDENTIFIER, CPTI_GLOBAL_TYPE,
CPTI_ANON_IDENTIFIER): New.
(global_namespace, global_identifier, global_type_node,
anon_identifier): New.
* decl.c (global_type_node, global_scope_name): Delete.
(initialize_predefined_identifiers): Add new idents.
(cxx_init_decl_processing): Adjust.
* name-lookup.h (global_namespace, global_scope_name,
global_type_node): Delete.
* name-lookup (global_namespace, anonymous_namespace_name,
get_anonomous_namespace_name): Delete.
(do_push_nested_namespace, do_pop_nested_namespace): New.
(push_nested_namespace, pop_nested_namespace): Reimplement.
Cleanup using-directives
gcc/cp/
* cp-tree.h (LOOKUP_MARKED_P): Rename from NAME_MARKED_P, update all.
* name-lookup.h (finish_toplevel_using_directive,
finish_local_using_directive): Declare.
(do_using_directive, parse_using_directive): Delete.
* name-lookup.c (do_using_directive): Delete.
(do_toplevel_using_directive): Reimplement.
(do_local_using_directive, do_local_using_directive_1): New.
(parse_using_directive): Delete.
(push_using_directive, push_using_directive_1): Delete.
(finish_toplevel_using_directive, finish_local_using_directive): New.
* pt.c (tsubst_expr): Adjust.
* parser.c (cp_parser_using_directive): Adjust.
Kill strong using
gcc/
* doc/extend.texi (Namespace Association): Document removal.
gcc/cp/
* name-lookup (parse_using_directive): Remove strong handling.
gcc/testsuite/
* g++.dg/lookup/strong-using-6.C: New.
2017-03-27 Nathan Sidwell <nathan@acm.org>
Simplify ADL part 2
gcc/cp
* cp-tree.h (RECORD_MARKED_P): New.
* tree.c (ovl_lookup_keep): Allow NULL.
* name-lookup.c (struct adl_lookup): New.
(struct arg_lookup): Delete.
2017-03-24 Nathan Sidwell <nathan@acm.org>
gcc/
* tree.h (TREE_CHECK6): New.
(tree_check6): New.
gcc/cp/
* cp-tree.h (NAME_MARKED_P): Add UNION_TYPE.
* name-lookup.c (arg_lookup): Replace namespace & class vectors
with visited.
(arg_assoc_namespace, arg_assoc_class): Use NAME_MARKED_P.
(lookup_arg_dependent_1): Unmark namespaces and classes.
gcc/cp/
* cp-tree.h (ovl2_iterator::operator++): Tweak.
Simplify ADL part 1
gcc/cp/
* cp-tree.h (OVL_LOOKUP_P, NAME_MARKED_P): New.
(OVL_TRANSIENT_P): Morph into ...
(OVL_USED_P): ... this.
(ovl_add_transient): Kill.
(ovl_maybe_keep): Replace with ...
(ovl_lookup_keep): ... this.
(ovl_lookup_mark, ovl_lookup_add): Declare.
* tree.c (ovl_add): Rename arg. Set OVL_LOOKUP_P.
(ovl_add_transient): Kill.
(ovl_lookup_mark, ovl_lookup_add): New.
(ovl_maybe_keep): Rename to ...
(ovl_lookup_keep): ... this. Adjust.
* name-lookup.c (name_lookup::add): Use ovl_add directly.
(struct arg_lookup): Kill args and fn_set.
(add_function): Replace with ...
(add_functions): ... this.
(arg_assoc_namespace, arg_assoc_class_only): Use it.
(lookup_arg_dependent_1): Use new API.
* pt.c (tsubst_copy): Assert OVERLOAD is marked used.
* semantics.c (finish_call_expr): Adjust.
2017-03-23 Nathan Sidwell <nathan@acm.org>
Fixup transient_p bug
gcc/cp/
* tree.c (ovl_add): Set TRANSIENT_P here.
(ovl_add_transient): Not here.
gcc/cp/
* cp-tree.h (type_unknown_p): Make inline. Lose TREE_LIST case.
* tree.c (type_unknown_p): Delete.
* name-lookup.c (arg_assoc): Lose TREE_LIST case.
gcc/cp/
* cp-tree.h (OVL_P, OVL_PLURAL_P): New.
* name-lookup.c (name_lookup::add, diagnose_name_conflict,
pushdecl_maybe_friend_1, push_overloaded_decl_1,
do_nonmember_using_decl, push_class_level_binding_1,
set_decl_namespace, lookup_arg_dependent_1): Use OVL_P.
Two dimensional OVERLOADs
gcc/cp/
* cp-tree.h (OVL_FIRST): Call ovl_first.
(ovl_iterator): Add allow_inner, adjust.
(ovl2_iterator): New.
(ovl_first): New.
* name-lookup.c (name_lookup::add): Create 2d overload.
(do_nonmember_using_decl): 2D overload.
(lookup_arg_dependent_1, cp_emit_debug_info_for_using): Likewise.
* call.c (add_candidates): Likewise.
* class.c (resolve_address_of_overloaded_function): Likewise.
* parser.c (cp_parser_template_name): Likewise.
* pt.c (type_dependent_expression_p): Likewise.
(print_candidates_1): Likewise.
* ptree.c (cxx_print_xnode): Allow inner overload.
* semantics.c (finish_call_expr): Keep overload, 2D overload.
* tree.c (ovl_scope): Allow inner overload.
gcc/testsuite/
* g++.dg/lookup/using57.C: New.
2017-03-22 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (lookup_qualified_name): Unwrap singleton
overload.
(lookup_name_real_1): Remove ovl_hidden assert.
(lookup_arg_dependent_1): Don't skip hidden here.
* parser.c (cp_parser_lookup_name): Don't unwrap singleton
overload here.
2017-03-21 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (lookup_name_real_1): Don's skip hidden here.
Simplify singleton overload extraction.
* tree.c (ovl_add): Assert no unexpected 2 dimensional overloads.
gcc/
* system.h (ATTRIBUTE_NTC_PURE): Define.
* tree.h (tree_fits_shwi_p, tree_fits_uhwi_p): Use it.
Refactor lookup part 1
gcc/cp/
* name-lookup.c (struct name_lookup): New.
(struct scope_binding): Delete.
(EMPTY_SCOPE_BINDING): Delete.
(build_ambigious): New.
(name_lookup::add): New.
(do_nonmember_using_decl): Take pointer to cxx_binding. Adjust.
(do_local_using_decl, do_toplevel_using_decl): Adjust.
(merge_functions, same_entity_p, ambiguous_decl): Delete.
(suggest_alternatives_for): Adjust lookup functions.
(unqualified_namespace_lookup_1): Use name_lookup.
(lookup_qualified_name): Likewise.
(lookup_using_namespace, qualified_lookup_using_namespace): Take a
name_lookup.
gcc/testsuite/
* g++.dg/lookup/using17.C: Adjust error message.
Keep hidden overloads at start of OVERLOAD list
gcc/cp/
* cp-tree.h (OVL_HIDDEN_P): New.
(ovl_iterator::hidden_p, unhide): New.
(DECL_HIDDEN_P): New.
(hidden_name_p, remove_hidden_names): Delete.
(ovl_skip_hidden): Declare.
* decl.c (builtin_function_1): Set DECL_ANTICIPATED before
pushing.
(xref_tag_1): Replace hidden_name_p with DECL_HIDDEN_P.
* name-lookup.c (anticipated_builtin_p,
skip_anticipated_buitins): New.
(supplement_binding_1): Use anticipated_builtin_p.
(replace_local_overload_binding): New. Broken out of
augment_local_overload_binding.
(fixup_unhidden_decl): New.
(pushdecl_maybe_friend_1): Deal with unhiding decl. Set
DECL_ANTICIPATED before really pushing.
(augment_local_overload_binding): Call replace_local_overload_binding.
(push_overloaded_decl_1): Deal with unhiding decl.
(do_nonmember_using_decl): Use anticipated_builtin_p.
(ambiguous_decls): Use ovl_skip_hidden.
(lookup_name_real_1): Use DECL_HIDDEN_P, ovl_skip_hidden.
(arg_assoc_namespace): Use DECL_HIDDEN_P.
(lookup_arg_dependent_1): Use ovl_skip_hidden.
* pt.c (instantiate_class_template): Use DECL_HIDDEN_P.
* tree.c (ovl_move_unhidden): New.
(ovl_add): Deal with hiddenness.
(ovl_add_transient): Adjust.
(hidden_name_p, remove_hidden_names): Delete.
(ovl_skip_hidden): New.
(ovl_iterator::ovl_unhide): New.
gcc/testsuite/
* g++.dg/lookup/friend19.C: New.
* g++.dg/lookup/using56.C: New.
2017-03-16 Nathan Sidwell <nathan@acm.org>
New OVERLOAD representation part 6
gcc/cp/
* cp-tree.h: Move ovl handling fns to original location.
* tree.c (ovl_add): Use ovl_make.
(ovl_add_transient): Use ovl_add.
New OVERLOAD representation part 5
gcc/cp/
* cp-tree.h (OVL_NEXT): Delete. Update uses.
(OVL_CHAIN): Check for overload.
New OVERLOAD representation part 4
gcc/cp/
* cp-tree.h (OVL_CURRRENT): Delete.
(ovl_make): Declare.
* tree.c (ovl_make): New.
* constraint.cc (finish_shorthand_constraint): Use ovl_make.
* typeck.c (build_x_unary_op): Likewise.
New OVERLOAD representation part 3
gcc/cp/
* cp-tree.h: Remove OVLNEW pieces.
* tree.c: Likewise.
New OVERLOAD representation part 2
gcc/cp/
* cp-tree.h (OVL_VIA_USING_P, OVL_TRANSIENT_P, OVL_SINGLE_P): New
names.
* error.c, name-lookup.c, parser.c, search.c, tree.c: Adjust uses.
2017-03-15 Nathan Sidwell <nathan@acm.org>
New OVERLOAD representation part 1
gcc/cp/
* cp-tree.h (OVL_LENGTH, OVL_USINGS, OVL_FIRST, OVL_NAME,
OVL_SINGLE, OVL_ELT, OVL_HAS_USING, OVL_HAS_HIDDEN): New.
(ovl_iterator): Implement new-style iterator.
* tree.c (tree_ovl_elt_check_failed): New.
(ovl_maybe_keep): Fixup bracing.
(ovl_scope): Add new smarts.
Vectorize OVERLOAD part 9
gcc/cp/
* cp-tree.h (build_new_function_call): Lose koenig_p arg.
(OVL_HAS_USING): New.
* call.c (build_new_function_call): Lose koenig_p arg.
* name-lookup.c (augment_local_overload_binding): New. Broken out
of ...
(push_overloaded_decl_1): ... here. Call it.
(do_nonmember_using_decl): Lose augment arg.
(do_local_using_decl): Use augment_local_overload_binding.
(do_toplevel_using_decl): Adjust do_nonmember_using_decl call.
* search.c (lookup_field_r): Use OVL_HAS_USING.
* pt.c (do_class_deduction): Adjust build_new_function_call call.
* semantics.c (finish_call_expr): Likewise.
Vectorize OVERLOAD part 8
gcc/cp/
* cp-tree.h (ovl_add_transient): Declare.
* tree.c (ovl_add_transient): New.
(remove_hidden_names): Build transient.
* name-lookup.c (do_nonmember_using_decl): Add AUGMENT parm,
adjust.
(do_local_using_decl): Ask for newvals from
do_nonmember_using_decl, iterate over that list.
(do_toplevel_using_decl): Ask for augmented vals.
(add_function): Return void. Remove extraneous
checks. Update callers.
* semantics.c (finish_call_expr): Always call ovl_maybe_keep.
Vectorize OVERLOAD part 7
gcc/cp/
* name-lookup.c (hidden_name_p, remove_hidden_names): Move
declarations to ...
* cp-tree.h (hidden_name_p, remove_hidden_names): ... here.
* call.c (build_new_function_call): Remove hidden pruning.
* name-lookup.c (hidden_name_p, remove_hidden_names): Move to
tree.c.
(lookup_name_real_1): Adjust hidden_name_p call.
(lookup_arg_dependent_1): Adjust remove_hidden_names call.
* tree.c (hidden_name_p, remove_hidden_names): Moved from
name-lookup.h. Adjust.
Vectorize OVERLOAD part 6
gcc/cp/
* cp-tree.h (OVL_TRANSIENT): Rename from OVL_ARG_DEPENDENT.
* tree.c (ovl_maybe_keep): Adjust.
* name-lookup.c (set_namespace_binding_1): Use OVL_SINGLE.
(lookup_name_real_1): Use OVL_FIRST.
(add_function): Set OVL_TRANSIENT.
(lookup_arg_dependent_1): Use OVL_FIRST.
(cp_emit_debug_info_for_using): Use iterator.
Add OVERLOAD iterator part 8
gcc/cp/
* name-lookup.c (do_nonmember_using_decl): Use iterators
Add OVERLOAD iterator part 7
gcc/cp/
* name-lookup.c (pushdecl_maybe_friend_1): Use OVL_FIRST.
(push_overloaded_decl_1): Use iterators.
(consider_binding_level): Use OVL_FIRST.
2017-03-14 Nathan Sidwell <nathan@acm.org>
Add OVERLOAD iterator part 6
gcc/cp/
* decl2.c (check_class_fn): Use iterators.
* semantics.c (omp_reduction_lookup): Likewise.
(finish_omp_reduction_clause): Don't OVL_FIRST here.
Vectorize OVERLOAD part 5
gcc/cp/
* cp-tree.h (ovl_maybe_keep): Declare.
* tree.c (ovl_maybe_keep): New.
* semantics.c (finish_call_expr): Call it.
(finish_omp_clauses): Use new accessrs.
* class.c (handle_using_decl): Use new accessors.
(resolve_address_of_overloaded_function): Likewise.
* pt.c (print_candidates_1, print_candidates): Reimplement.
Vectorize OVERLOAD part 5
gcc/cp/
* cp-tree.h (OVL_SINGLE): New.
* constraint.cc (resove_constraint_check): Use new iterator.
(normalize_template_id_expression): Use OVL_FIRST.
* cvt.c (build_expr_type_conversions): Likewise.
* error.c (dump_decl): Use OVL_SINGLE.
* parser.c (cp_parser_nested_name_specifier_opt): Likewise.
* tree.c (is_overloaded_fn): Likewise.
Add OVERLOAD iterator part 5
gcc/cp/
* cp-tree.h (ovl_iterator::via_using_p): New.
(ovl_iterator::replace): New.
(clone_function_decl): Add via_using parm.
* tree.c (ovl_iterator::replace): New.
* class.c (add_method): Use ovl_iterator.
(clone_function_decl): Add via_using parm. Pass it to add_method.
(clone_costructors_and_destructors): Pass via_using.
* pt.c (tsubst_decl, instantiate_template_1): Update
clone_function_decl call.
Change add_method signature
gcc/cp/
* cp-tree.h (add_method): Change 3rd arg.
* class.c (add_method): Change 3rd arg to bool. Update.
(handle_using_decl, one_inheriting_sig, one_inherited_ctor,
clone_function_decl, finish_struct): Update add_method calls.
* lambda.c (maybe_add_lambda_conv_op): Likewise.
* method.c (lazily_declare_fn): Likewise.
* semantics.c (finish_member_declaration): Likewise.
2017-03-13 Nathan Sidwell <nathan@acm.org>
Kill get_first_fn part 3
gcc/cp/
* cp-tree.h (get_first_fn): Delete.
* pt.c (iterative_hash_template_arg, tsubst_copy_and_build): Use
get_ovl.
(tsubst_baselink): Use OVL_NAME.
* typeck.c (invalid_nonstatic_memfn_p, build_x_unary_op,
cp_build_addr_expr_1): Use get_ovl.
(finish_class_member_access_expr): Use OVL_NAME.
* tree.c (dependent_name): Recode.
(get_first_fn): Delete.
Kill get_first_fn part 2
gcc/cp/
* cp-tree.h (get_ovl): Add want_first parm, make pure.
* constexpr.c (potential_constant_expression_1): Adjust get_ovl.
* lambda.c (lambda_function): Likewise.
* error.c (dump_decl): Use identifier_p.
* mangle.c (write_expression): Use OVL_NAME.
* name-lookup.c (pushdecl_class_level): Likewise.
* parser.c (cp_parser_postfix_expression,
cp_parser_expression_statement, cp_parser_direct_declarator,
cp_parser_constructor_declarator_p): Use get_ovl.
* search.c (lookup_member0: Likewise.
* typeck2.c (cxx_incomplete_type_diagnostic): Likewise.
* semantics.c (perform_koenig_lookup): Use OVL_NAME.
(finish_call_expr, finish_id_expression): Use get_ovl.
* tree.c (get_ovl): Add want_first arg, adjust.
Kill get_first_fn part 1
gcc/cp/
* call.c (add_list_candidates, build_new_method_call_1): Use
OVL_FIRST directly.
* constraint.cc (function_concept_check_p): Likewise.
* name-lookup.c (validate_nonmember_using_decl): Likewise.
* constexpr.c (potential_constant_expression_1): Use ovl_fns &
OVL_FIRST.
* lambda.c (lambda_function): Likewise.
* decl.c (grokdeclarator): Use OVL_NAME.
* error.c (dump_decl): Likewise.
* friend.c (do_friend): Likewise.
* mangle.c (write_expression): Likewise.
Kill get_fns
gcc/cp/
* cp-tree.h (get_ovl): New.
(get_fns): Delete.
* parser.c (cp_parser_nested_name_specifier_opt): Update.
* search.c (shared_member_p): Update.
* semantics.c (omp_reduction_lookup): Update.
Kill ovl_cons
gcc/cp/
* cp-tree.h (ovl_cons): Delete.
* tree.c (ovl_cons): Delete.
* class.c (add_method): Use ovl_add.
* name-lookup.c (push_overloaded_decl_1): Likewise.
* pt.c (check_explicit_specialization, do_class_deduction): Likewise.
* typeck.c (build_x_unary_op): Likewise.
Kill build_overload
gcc/cp/
* cp-tree.h (ovl_add): Declare.
(build_overload): Delete.
* tree.c (ovl_add): New.
(build_overload): Delete.
* class.c (add_method): Use ovl_add.
* constraint.cc (finish_shorthand_constraint): Likewise.
* name-lookup.c (do_nonmember_using_decl, merge_functions,
remove_hidden_names, add_function): Likewise.
* pt.c (make_constrained_auto): Likewise.
Rename OVL_USED
gcc/cp/
* cp-tree.h (OVL_USED): Rename to ...
(OVL_VIA_USING): ... here.
* class.c (add_method): Update.
* tree.c (ovl_scope): Update.
* search.c (lookup_field_r): Update.
* name-lookup.c (push_overloaded_decl_1,
do_nonmember_using_decl): Update.
Add OVERLOAD iterator part 4
gcc/cp/
* tree.c (cp_tree_equal): Use ovl_iterator.
Vectorize OVERLOAD part 4
gcc/cp/
* cp-tree.h (ovl_iterator::ref): New.
* semantics.c (finish_omp_reduction_clause): Use OVL_FIRST.
* tree.c (is_overloaded_fn, get_fns): Likewise.
2017-03-10 Nathan Sidwell <nathan@acm.org>
Vectorize OVERLOAD part 3
gcc/cp/
* search.c (lookup_field_fuzzy_info::fuzzy_lookup_fn,
lookup_conversion_operator, lookup_fnfields_idx_nolazy,
lookup_conversions_r): Use new accessors.
Vectorize OVERLOAD part 2
gcc/cp/
* decl2.c (mark_used): Use new accessors.
* dump.c (cp_dump_tree): Likewise.
* error.c (dump_decl, dump_expr, location_of): Likewise.
* init.c (build_offset_ref): Likewise.
* parser.c (cp_parser_nested_name_specifier_opt,
cp_parser_lookup_name): Likewise.
* pt.c (check_explicit_specialization, check_template_shadow,
tsubst_baselink): Likewise.
* ptree.c (cxx_print_xnode): Likewise.
Vectorize OVERLOAD part 1
gcc/cp/
* cp-tree.h (OVL_FIRST, OVL_NAME): New accessors.
* call.c (build_user_type_conversion_1,
print_error_for_call_failure, add_candidates): Use them.
* class.c (method_name_cmp, resort_method_name_cmp,
resort_type_method_vec, finish_struct_methods, warn_hidden,
resolve_address_of_overloaded_function,
note_name_declared_in_class): Likwise.
* cxx-pretty-print.c (pp_cxx_unqualified_id, pp_cxx_qualified_id,
cxx_pretty_printer::id_expression,
cxx_pretty_printer::expression): Likewise.
* decl.c (poplevel): Likewise.
* mangle.c (write_member_name): Likewise.
* method.c (strip_inheriting_ctors): Likewise.
* typeck.c (cp_build_addr_expr_1): Likewise.
Makefile-supplied timestamp.
gcc/cp
* Make-lang.in: Provide MODULE_STAMP.
* module.c (cpm_stream::version): Use MODULE_STAMP, not __DATE__ &
__TIME__.
Add OVERLOAD iterator part 3
gcc/cp/
* name-lookup.c (pushdecl_maybe_friend_1,
lookup_extern_c_fun_in_all_ns, c_linkage_bindings,
set_decl_namespace, pushdecl_top_level_and_finish (tree x,
merge_functions, remove_hidden_names, arg_assoc_namespace,
arg_assoc, lookup_arg_dependent_1, cp_emit_debug_info_for_using):
Use new iterator.
* pt.c (retrieve_specialization, iterative_hash_template_arg,
determine_specialization, check_explicit_specialization,
resolve_overloaded_unification, resolve_nondeduced_context,
type_dependent_expression_p, dependent_template_p,
do_class_deduction): Likewise.
Add OVERLOAD iterator part 2
gcc/cp/
* class.c (handle_using_decl,
maybe_warn_about_overly_private_class, modify_all_vtables,
get_basefndecls, warn_hidden, add_implicitly_declared_members,
adjust_clone_args, deduce_noexcept_on_destructors, default_ctor_p,
in_class_defaulted_default_constructor, user_provided_p,
type_has_user_provided_constructor,
type_has_user_provided_or_explicit_constructor,
type_has_virtual_destructor, type_has_move_constructor,
type_has_move_assign, type_has_user_declared_move_constructor,
type_build_ctor_call, type_build_dtor_call,
type_requires_array_cookie, explain_non_literal_class,
finish_struct, resolve_address_of_overloaded_function): Use new
iterator.
* decl2.c (maybe_warn_sized_delete): Likewise.
* parser.c (cp_parser_template_name): Tweak loop exit test.
* semantics.c (finish_call_expr): Likewise.
* typeck.c (check_template_keyword): Likewise.
Add OVERLOAD iterator, part 1
Add MAYBE_BASELINK_FUNCTIONS
gcc/cp/
* cp-tree.h (struct ovl_iterator): New.
(MAYBE_BASELINK_FUNCTIONS): New.
* call.c (build_op_call_1, add_candidates,
build_op_delete_call): Use new iterator.
* lambda.c (maybe_generic_this_capture): Likewise.
* method.c (inherited_ctor_binfo, binfo_inherited_from): Likewise.
* parser.c (lookup_literal_operator,
cp_parser_template_name): Likewise.
* search.c (shared_member_p, look_for_overrides_here,
lookup_conversions_r): Likewise.
* semantics.c (finish_call_expr,
classtype_has_nothrow_assign_or_copy_p): Likewise.
* typeck.c (check_template_keyword): Likewise.
* tree.c (is_overloaded_fn, get_fns): Use MAYBE_BASELINK_FUNCTIONS.
gcc/cp/
* gcc/cp/cp-tree.h (NAMESPACE_CHECK): Delete.
(MODULE_NAMESPACE_P, GLOBAL_MODULE_NAMESPACE,
NAMESPACE_INLINE_P): Adjust.
gcc/testsuite/
* g++.dg/modules/modules.exp: Protect DEFAULT_CXXFLAGS.
2017-03-06 Nathan Sidwell <nathan@acm.org>
Add crc checkpointing.
gcc/cp/
* module.c (cpm_serial::crc): New.
(cpm_serial::bit_flush): Compute crc.
(cpm_serial::crc_unsigned_n, crc_buffer, crc_unsigned): New.
(cpm_reader::checkpoint, cpm_writer::checkpoint): New.
(cpm_reader, cpm_writer): Add checkpointing to io.
(cpms_in, cpms_out): Likewise.
2017-03-05 Nathan Sidwell <nathan@acm.org>
Optimize crc. Push to trunk
gcc/
* tree.h (crc32_unsigned_n): Declare.
(crc32_unsigned, crc32_unsigned): Make inline.
* tree.c (crc32_unsigned_bits): Replace with ...
(crc32_unsigned_n): ... this.
(crc32_unsigned, crc32_byte): Remove.
(crc32_string): Remove unnecessary braces.
2017-03-04 Nathan Sidwell <nathan@acm.org>
Redo bool read/write
gcc/cp/
* module.c (cpm_serial::bit_flush): New.
(cpm_writer::bytes4, cpm_writer::bflush: New.
(cpm_reader::bytes4, cpm_reader::bflush, cpm_reader::bfill): New.
(cpm_reader::fill): Rename from reserve. Update callers.
(cpm_writer::b, cpm_reader::b): Reimplement.
(cpm_writer::flush_bits, cpm_reader::flush_bits): Delete.
(cpms_out::write_tree_ary, cpms_in::read_tree_ary): Call bflush.
(cpms_out::write_tree, cpms_in::read_tree): Likewise.
Cleanup test pruning. Push to trunk.
gcc/testsuite/g++.dg
* g++-dg.exp (find-cxx-tests): New.
(main): Call it to discover direct tests rather than explicit pruning.
2017-03-03 Nathan Sidwell <nathan@acm.org>
Cleanup retrofit_lang_decl. Push to trunk.
gcc/cp/
* cp-tree.h (add_lang_decl_raw, add_lang_type_raw): Rename.
* lex.c (maybe_add_lang_decl_raw, maybe_add_lang_type_raw): Return
bool. Don't assert.
(retrofit_lang_decl, cxx_make_type): Adjust.
* module.c (cpms_in::read_tree): Verify lang_decl/type insertion
valid.
* class.c (alter_access): Directly call retrofit_lang_decl.
* decl.c (push_local_name, duplicate_decls): Likewise.
* pt.c (push_template_decl_real, txubs_omp_clauses): Likewise.
* semantics.c (omp_privatize_field): Likewise.
Renaming stuff.
gcc/cp/
* module.c: Remove anon namespace, rename seriator, reader,
writer, streamer, in & out.
2017-03-01 Nathan Sidwell <nathan@acm.org>
Black triangle achieved
gcc/cp/
* cp-tree.h (GLOBAL_MODULE_NAMESPACE_P): New.
(add_lang_decl_raw, add_lang_type_raw): Declare.
* lex.c (add_lang_decl_raw): New. Broken out of ...
(retrofit_lang_decl): ... here. Call it.
(add_lang_type_raw): New. Broken out of ...
(cxx_make_type): ... here. Call it.
* module.c (out::write_decl_lang_bools, in::read_decl_lang_bools): New.
(in::~in, in::set_scope): Correct.
(out::write_tree, in::read_tree): Start lang_type/decl handling.
(in::finish_type): Fix canonical type handling.
(in::finish_function): Insert into symbol table.
(in::finish_function): Preserve scope.
gcc/testsuite/
* g++.dg/modules/modules.exp: Add link & execute capability.
* g++.dg/modules/mod-decl-2_b.C: Remove XFAILs.
* g++.dg/modules/mod-decl-2_c.C: Remove XFAILs.
* g++.dg/modules/mod-impl-1_a.C: New.
* g++.dg/modules/mod-impl-1_b.C: New.
* g++.dg/modules/mod-impl-1_c.C: New.
* g++.dg/modules/mod-impl-1_d.C: New.
2017-02-17 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* module.c (in::finish_type): New.
(in::finish): Call it.
(out::write_core_vals, in::read_core_vals): Ensure canonical_type
and type_main_variant are dumped early.
gcc/testsuite/
* g++/modules/mod-exp-1_b.C: Extend.
Canonicalize canonical type hashing
gcc/
* tree.h (type_hash_default): Declare.
* tree.c (type_hash_list, attribute_hash_list): Move into
type_hash_default.
(build_type_attribute_qual_variant): Break out hash code calc into
type_hash_default.
(type_hash_default): New. Generic type hash computation.
(build_range_type_1, build_array_type_1, build_function_type,
build_method_type_directly, build_offset_type, build_complex_type,
make_vector_type): Call it.
gcc/c-family/
* c-common.c (complete_array_type): Use type_hash_default.
2017-02-16 Nathan Sidwell <nathan@acm.org>
Namespace decls!
gcc/cp/
* module.c (out::write_tree_ary, in::read_tree_ary): New.
(out::tag_trees, in::tag_trees): Repurpose.
(in::finish_namespace, in::finish_function): New.
(out::write_tree, in::read_tree): Adjust.
(in::finish): Adjust.
Some actual tree writing & reading
gcc/cp/
* module.c (out::write_core_bools, out::write_core_vals): New.
(in::read_core_bools, in::read_core_vals): New.
(in::set_scope): New.
(out::write_tree, in::read_tree): Call core readers/writers.
Node length & allocation. Global trees.
gcc/cp/
* module.c (streamer::tags): Rename to ...
(streamer::record_tag): ... here. Fixup.
(out::tag_trees, out::start, out::write_loc): New.
(in::tag_trees, in::start, in::finish, in::read_loc): New.
(out::write_tree, in::read_tree): Adjust.
(write_module): Write global trees.
2017-02-15 Nathan Sidwell <nathan@acm.org>
Start of tree reading & writing. Module namespace fix.
gcc/cp/
* cp-tree.h (pop_module_namespace, push_module_namespace): Add flag.
* parser.c (check_module_outermost, cp_parser_module_export,
cp_parser_module_proclamation, cp_parser_namespace_definition): Adjust.
* module.c (pop_module_namespace, push_module_namespace): Add
flag.
(reader::read_tree, writer::write_tree): Initial stubs.
(read_module, write_module, do_import_module, declare_module): Adjust.
gcc/testsuite/
* g++.dg/modules/mod-exp-1_a.C: New.
* g++.dg/modules/mod-exp-1_b.C: New.
* g++.dg/modules/mod-sym-1.C: Add cases.
2017-02-14 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* Make-lang.in (CFLAGS-cp/module.o): New var.
* module.c (reader): Add peek_u.
(reader::str): Force ending NUL.
(writer::flush_bits): Avoid infinite recursion.
(streamer): Extend tags, add next.
(out, in): Add some readers/writers.
(read_module, do_import_module, write_module): Augment.
gcc/testsuite/
* g++.dg/modules/mod-imp-1_a.C
* g++.dg/modules/mod-imp-1_b.C
* g++.dg/modules/mod-imp-1_c.C
* g++.dg/modules/mod-imp-1_d.C
2017-02-10 Nathan Sidwell <nathan@acm.org>
Start actually writing & reading module files. (headers only)
gcc/cp/
* module.c (seriator, reader, writer, streamer, in, out): New
classes.
(read_module, do_import_module, write_module, finish_module): Adjust.
gcc/
* gengtype-lex.l (<in_struct>): Add '/'.
2017-02-09 Nathan Sidwell <nathan@acm.org>
Dump file
gcc/
* dumpfile.h (tree_dump_index): Add TDI_lang.
(TDF_LANG): New.
* dumpfile.c (dump_files): Add front-end.
(dump_option_value_info): Add lang. Adjust all.
gcc/cp/
* cp-tree.h (import_module): Lose is_export parm.
* module.c: Include dumpfile.h
(dopen, dclose): New.
(import_add): Absorb into ...
(do_import_module): ... here. Broken out of ...
(import_module): ... here. Call it.
(export_module, declare_module): Adjust.
(read_module, write_module): Write dump.
gcc/testsuite/
* g++.dg/modules/mod-decl-1.C: Adjust.
* g++.dg/modules/mod-decl-2_b.C: Adjust.
* g++.dg/modules/mod-decl-5_b.C: Adjust.
gcc/cp/
* cp-tree.h (DECL_CHECK): New.
(NAMESPACE_MODULE_P): Rename to ...
(MODULE_NAMESPACE_P): ... here.
(CURRENT_MODULE_NAMESPACE_P): New.
(MODULE_EXPORT_P): New.
(import_module): Add is_export param.
* module.c (mstream, mfname): Delete.
(imported_modules): Make hash_map.
(enum import_kind): New.
(push_module_namespace, pop_module_namespace): Adjust.
(import_add, import_module, export_module): Adjust.
(read_module, write_module): New.
(declare_module, finish_module): Adjust.
* name-lookup.c (is_ancestor): Adjust.
gcc/testsuite/
* g++.dg/modules/mod-decl-5_b.C: Adjust
* g++.dg/modules/modules.exp: Remote host, tweak module deletion.
2017-02-08 Nathan Sidwell <nathan@acm.org>
gcc/cp/
* name-lookup.c (is_ancestor): Pop from module namespace root.
gcc/testsuite/
* g++.dg/modules/mod-sym-3.C: New.
Module namespaces
gcc/cp/
* cp-tree.h (NAMESPACE_MODULE_P): New.
(push_module_namespace, pop_module_namespace): Declare.
* module.c (MOD_SYM_PFX, MOD_SYM_DOT): New.
(module_namespace_name): New.
(push_module_namespace, pop_module_namespace): New.
(module_to_ext): New. Broken out of ...
(module_to_filename): ... here. Call it.
(declare_module): Push to module namespace.
* parser.c (check_module_outermost): Deal with module namespace.
(cp_parser_module_export, cp_parser_module_proclaimation,
cp_parser_namespace_definition): Likewise.
gcc/testsuite/
* g++.dg/modules/mod-decl-1.C: Adjust.
* g++.dg/modules/mod-sym-1.C: New.
* g++.dg/modules/mod-sym-2.C: New.
Cleanup inline namespace creation.
gcc/cp/
* name-lookup.h (make_namespace_inline): Declare.
* name-lookup.c (do_toplevel_using_directive): New.
(do_using_directive): Call it.
(make_namespace_inline): New.
* parser.c (cp_parser_namespace_definition): Call it.
2017-02-07 Nathan Sidwell <nathan@acm.org>
PR c++/79369 inline namespaces
gcc/cp/
* cp-tree.h (NAMESPACE_CHECK): New.
(NAMESPACE_INLINE_P): New.
* name-lookup.h (push_namespace): Return int.
* name-lookup.c (push_namespace): Return int. Adjust.
* parser.c (cp_parser_namespace_definition): Reorder nested
parsing. Check inline redefinition.
gcc/testsuite/
* g++.dg/cpp0x/pr65558.C: Adjust error loc.
* g++.dg/cpp0x/pr79369.C: New.
* g++.dg/cpp1z/nested-namespace-def1.C: Adjust.
2017-02-03 Nathan Sidwell <nathan@acm.org>
Module files open/closed. Testsuite extension
gcc/cp/
* module.c (mstream, mfname): New.
(module_to_filename): New.
(import_module, declare_module, finish_module): Open/close module file.
gcc/testsuite/
* g++.dg/modules/modules.exp (mod_spec_to_file, dg-module-if,
check_module_specs, cleanup_module_files): New.
* g++.dg/modules/mod-decl-0.C: Adjust
* g++.dg/modules/mod-decl-1.C: Adjust
* g++.dg/modules/mod-decl-2_a.C: Adjust
* g++.dg/modules/mod-decl-3.C: New.
* g++.dg/modules/mod-decl-3_a.C: Delete.
* g++.dg/modules/mod-decl-3_b.C: Delete.
* g++.dg/modules/mod-decl-4.C: Adjust
* g++.dg/modules/mod-decl-5_a.C: Adjust
* g++.dg/modules/mod-decl-5_b.C: Adjust
* g++.dg/modules/proclaim-1.C: Adjust
Module names are identifiers.
gcc/cp/
* config-lang.in (gtfiles): Add modules.c.
* c-tree.h (module_name_t): Delete.
(finish_module): Declare.
* decl2.c (c_pare_final_cleanups): Call finish_module.
* module.c: Change module_name_t to tree.
(imported_module): Hash of module names.
(import_add): New.
(import_module, declare_module): Use it.
(export_module): Import module.
(finish_module): New.
* parser.c (cp_parser_module_name): Build up identifier. Adjust
callers.
gcc/testsuite/
* g++.dg/modules/mod-decl-0.C: Adjust.
* g++.dg/modules/mod-decl-1.C: Adjust.
* g++.dg/modules/mod-decl-2_b.C: Adjust.
* g++.dg/modules/mod-decl-2_c.C: New.
* g++.dg/modules/mod-decl-5_a.C: New.
* g++.dg/modules/mod-decl-5_b.C: New.
2017-02-02 Nathan Sidwell <nathan@acm.org>
[[interface]]
gcc/cp
* cp-tree.h: Adjust module interface fns.
* modules.c (is_interface): New.
(push_module_export, pop_module_export, module_exporting_level):
Adjust.
(module_proclaim): Delete.
(module_interface_p): New.
(declare_module): Use 'interface' attrib.
(mport_module, export_module): Take attribs.
* parser.c (check_module_outermost, cp_parser_module_declaration,
cp_parser_module_export, cp_parser_module_proclamation): Adjust.
gcc/testsuite/
* g++.dg/modules/mod-decl-2_a.C: Adjust.
* g++.dg/modules/mod-decl-3_a.C: Adjust.
* g++.dg/modules/proclaim-1.C: Adjust.
* g++.dg/modules/mod-decl-4.C: New.
2017-01-27 Nathan Sidwell <nathan@acm.org>
Parse proclaimed ownership.
gcc/cp/
* cp-tree.h (module_exporting_p, module_proclaim): Declare.
* module.c (proclaimer): New.
(module_exporting_p, module_proclaim): New.
* parser.c (check_module_outermost): New.
(cp_parser_module_declaration, cp_parser_module_export): Call it.
(cp_parser_module_proclamation): New.
(cp_parser_declaration): Add proclaimed-ownership.
gcc/testsuite/
* g++.dg/modules/proclaim-1.C: New.
Parse import & export. Test infra.
gcc/cp/
* cp-tree.h (module_purview_p, push_module_export,
pop_module_export, declare_module, import_module,
export_module): Declare.
* module.c (export_depth): New.
(module_purview_p, push_module_export, pop_module_export): New
(declare_module_name): Renme to ...
(declare_module): ... here.
(import_module, export_module): Stubs.
* parser.c (cp_parser_module_declaration): Add IS_EXPORT
parm. Deal with imports & exports.
(cp_parser_module_export): New.
(cp_parser_declaration): Allow module import, export.
gcc/testsuite/
* g++.dg/dg.exp: Prune module tests.
* g++.dg/modules/modules.exp: New.
* g++.dg/modules/mod-decl-2_[ab].C: New.
* g++.dg/modules/mod-decl-3_[ab].C: New.
2017-01-25 Nathan Sidwell <nathan@acm.org>
Parse module-declaration.
gcc/cp
* cp-tree.h (module_name_t): Typedef.
(declare_module_name): Declare.
* parser.c (cp_parser_diagnose_invalid_type_name): Explain
fmodules.
(cp_parser_module_name, cp_parser_module_declaration): New.
(cp_parser_declaration): Add module-declaration.
* module.c (declared_module, module_location): New.
(declare_module_name): Define.
gcc/testsuite/
* g++.dg/modules/mod-decl-0.C: New.
* g++.dg/modules/mod-decl-1.C: New.
New flag & keywords, etc
gcc/c-family/
* c-common.c (c_common_reswords): Add 'module', 'import'.
* c-common.h (enum rid): Add RID_MODULE, RID_IMPORT.
(D_CXX_MODULES, D_CXX_MODULES_FLAGS) New.
* c-cppbuiltins.c (c_cpp_builtins): Add _cpp_modules define.
* c.opt: Add fmodules flag.
gcc/cp/
* Make-lang.in (CXX_AND_OBJCXX_OBJS): Add module.o.
* module.c: New file.
gcc/
* doc/invoke.texi (-fmodules): Document it.
2017-01-24 Nathan Sidwell <nathan@acm.org>
Free up TREE_LANG_FLAG_3. DECL_CONSTRUCTION_VTABLE_P is useless.
gcc/cp/
* cp-tree.h (DECL_CONSTRUCTION_VTABLE_P): Delete.
(DECL_NON_TRIVIALLY_INITIALIZED_P): Move to TREE_LANG_FLAG_6.
* class.c (build_ctor_vtbl_group): Don't set
DECL_CONSTRUCTION_VTABLE_P.
* decl2.c (determine_visibility_from_class): Don't check
DECL_CONSTRUCTION_VTABLE_P anymore.
2017-01-23 Nathan Sidwell <nathan@acm.org>
Branch creation from trunk:244828
Use this Changelog for all branch changes, including merges.
Local Variables:
mode: change-log
change-log-default-name: "ChangeLog.modules"
End: