[gcc/devel/c++-modules] Merge trunk d1773f58f3a
Nathan Sidwell
nathan@gcc.gnu.org
Mon Aug 3 15:31:47 GMT 2020
https://gcc.gnu.org/g:583d5560c852605a683843d3b320549f6987e240
commit 583d5560c852605a683843d3b320549f6987e240
Merge: 06dd8695eda d1773f58f3a
Author: Nathan Sidwell <nathan@acm.org>
Date: Mon Aug 3 08:21:10 2020 -0700
Merge trunk d1773f58f3a
Diff:
ChangeLog | 4 +
ChangeLog.modules | 2 +
MAINTAINERS | 1 +
config/ChangeLog | 6 +
config/cet.m4 | 23 +-
contrib/ChangeLog | 4 +
contrib/git-backport.py | 2 +-
gcc/ChangeLog | 289 +
gcc/DATESTAMP | 2 +-
gcc/Makefile.in | 2 +-
gcc/c-family/ChangeLog | 14 +
gcc/c-family/c-common.c | 20 +
gcc/c-family/c-common.h | 2 +
gcc/c/ChangeLog | 14 +
gcc/c/c-objc-common.h | 2 +
gcc/c/c-typeck.c | 59 +-
gcc/cfganal.c | 433 +-
gcc/cfganal.h | 3 +-
gcc/cgraph.h | 2 -
gcc/cgraphunit.c | 166 +-
gcc/config/aarch64/aarch64-builtins.c | 121 +-
gcc/config/aarch64/aarch64-cores.def | 3 +
gcc/config/aarch64/aarch64-tune.md | 2 +-
gcc/config/aarch64/aarch64.c | 37 +
gcc/config/aarch64/driver-aarch64.c | 10 +-
gcc/config/arm/arm-protos.h | 3 +
gcc/config/arm/arm.c | 74 +-
gcc/config/arm/constraints.md | 7 +
gcc/config/arm/vfp.md | 26 +-
gcc/config/csky/csky.h | 9 +-
gcc/config/csky/csky.opt | 29 +-
gcc/config/csky/csky_opts.h | 7 +
gcc/config/csky/t-csky-linux | 8 +-
gcc/config/i386/x86-tune-costs.h | 42 +-
gcc/config/mmix/mmix.h | 8 +
gcc/config/nvptx/nvptx.c | 11 +
gcc/config/nvptx/nvptx.md | 89 +
gcc/config/riscv/riscv-opts.h | 6 +
gcc/config/riscv/riscv.c | 47 +
gcc/config/riscv/riscv.md | 80 +
gcc/config/riscv/riscv.opt | 28 +
gcc/config/rs6000/altivec.h | 3 +
gcc/config/rs6000/rs6000-builtin.def | 15 +
gcc/config/rs6000/rs6000-call.c | 5 +
gcc/config/rs6000/rs6000.md | 1 +
gcc/config/rs6000/vsx.md | 39 +
gcc/configure | 21 +-
gcc/cp/ChangeLog | 120 +
gcc/cp/call.c | 13 +-
gcc/cp/class.c | 10 +-
gcc/cp/constexpr.c | 4 +-
gcc/cp/constraint.cc | 6 +
gcc/cp/coroutines.cc | 32 +-
gcc/cp/cp-objcp-common.h | 2 +
gcc/cp/cp-tree.h | 38 +-
gcc/cp/decl.c | 83 +-
gcc/cp/except.c | 28 +-
gcc/cp/init.c | 34 +-
gcc/cp/pt.c | 42 +-
gcc/cp/tree.c | 7 +-
gcc/cp/typeck.c | 97 +-
gcc/d/ChangeLog | 92 +
gcc/d/d-codegen.cc | 151 +-
gcc/d/d-tree.h | 7 +-
gcc/d/decl.cc | 5 +
gcc/d/dmd/MERGE | 2 +-
gcc/d/dmd/dstruct.c | 9 +-
gcc/d/dmd/expressionsem.c | 10 +
gcc/d/dmd/parse.c | 1 +
gcc/d/expr.cc | 429 +-
gcc/d/gdc.texi | 6 +
gcc/d/intrinsics.cc | 400 +-
gcc/d/intrinsics.def | 175 +-
gcc/d/lang.opt | 4 +
gcc/doc/invoke.texi | 53 +-
gcc/doc/match-and-simplify.texi | 16 +
gcc/doc/tm.texi | 2 +-
gcc/doc/tm.texi.in | 2 +-
gcc/fold-const.c | 7 +
gcc/fortran/ChangeLog | 79 +
gcc/fortran/dump-parse-tree.c | 2 +
gcc/fortran/gfc-internals.texi | 2 +-
gcc/fortran/gfortran.h | 32 +-
gcc/fortran/gfortran.texi | 14 +-
gcc/fortran/interface.c | 19 +-
gcc/fortran/intrinsic.c | 6 +-
gcc/fortran/intrinsic.texi | 4 +-
gcc/fortran/invoke.texi | 2 +-
gcc/fortran/match.h | 1 +
gcc/fortran/module.c | 73 +-
gcc/fortran/openmp.c | 268 +-
gcc/fortran/parse.c | 53 +-
gcc/fortran/primary.c | 13 +-
gcc/fortran/trans-array.c | 3 +-
gcc/fortran/trans-openmp.c | 22 +-
gcc/gcov-io.h | 3 +
gcc/gengtype-lex.l | 5 +-
gcc/genmatch.c | 60 +-
gcc/gimple-loop-interchange.cc | 2 +
gcc/gimple-ssa-sprintf.c | 32 +-
gcc/go/gofrontend/MERGE | 2 +-
gcc/ipa-cp.c | 12 +-
gcc/ipa-fnsummary.c | 20 +-
gcc/ipa-prop.c | 2 +-
gcc/ipa-prop.h | 2 +-
gcc/langhooks-def.h | 5 +-
gcc/langhooks.c | 14 +
gcc/langhooks.h | 3 +
gcc/match.pd | 52 +-
gcc/opts.c | 5 -
gcc/po/ChangeLog | 4 +
gcc/po/ja.po | 7502 +----------
gcc/po/sv.po | 710 +-
gcc/predict.c | 25 +-
gcc/range-op.cc | 1952 ++-
gcc/range-op.h | 22 +-
gcc/regrename.c | 16 +-
gcc/regrename.h | 2 +-
gcc/simplify-rtx.c | 7 +-
gcc/symtab.c | 13 +
gcc/testsuite/ChangeLog | 356 +-
.../c-c++-common/cpp/has-include-1-traditional.c | 38 +
gcc/testsuite/c-c++-common/pr96369.c | 12 +
gcc/testsuite/g++.dg/concepts/abbrev7.C | 14 +
.../coroutines/co-return-syntax-10-movable.C | 12 +-
gcc/testsuite/g++.dg/cpp0x/Wredundant-move1.C | 2 +-
gcc/testsuite/g++.dg/cpp0x/Wredundant-move7.C | 6 +-
gcc/testsuite/g++.dg/cpp0x/Wredundant-move9.C | 2 +-
gcc/testsuite/g++.dg/cpp0x/elision_neg.C | 2 +-
gcc/testsuite/g++.dg/cpp0x/move-return2.C | 2 +-
gcc/testsuite/g++.dg/cpp0x/move-return3.C | 23 +
gcc/testsuite/g++.dg/cpp0x/ref-qual20.C | 5 +-
gcc/testsuite/g++.dg/cpp1y/auto-fn60.C | 11 +
gcc/testsuite/g++.dg/cpp1y/constexpr-96182.C | 6 +
gcc/testsuite/g++.dg/cpp1y/constexpr-array8.C | 18 +
gcc/testsuite/g++.dg/cpp1y/constexpr-return2.C | 1 +
gcc/testsuite/g++.dg/cpp1y/pr63996.C | 1 +
gcc/testsuite/g++.dg/cpp1y/var-templ44.C | 1 +
.../g++.dg/cpp2a/class-deduction-alias3.C | 11 +
.../g++.dg/cpp2a/concepts-explicit-inst5.C | 14 +
gcc/testsuite/g++.dg/cpp2a/implicit-move1.C | 17 +
gcc/testsuite/g++.dg/cpp2a/implicit-move2.C | 49 +
gcc/testsuite/g++.dg/cpp2a/implicit-move3.C | 49 +
gcc/testsuite/g++.dg/other/error35.C | 2 +-
gcc/testsuite/g++.dg/warn/Wnonnull7.C | 36 +
.../aarch64/sve/acle/general-c++/gnu_vectors_3.C | 15 +
.../aarch64/sve/acle/general-c++/gnu_vectors_4.C | 15 +
gcc/testsuite/gcc.dg/debug/dwarf2/pr96383-1.c | 17 +
gcc/testsuite/gcc.dg/debug/dwarf2/pr96383-2.c | 17 +
gcc/testsuite/gcc.dg/fold-parity-1.c | 21 +
gcc/testsuite/gcc.dg/fold-parity-2.c | 20 +
gcc/testsuite/gcc.dg/fold-parity-3.c | 20 +
gcc/testsuite/gcc.dg/fold-parity-4.c | 20 +
gcc/testsuite/gcc.dg/fold-parity-5.c | 38 +
gcc/testsuite/gcc.dg/fold-popcount-5.c | 38 +
gcc/testsuite/gcc.dg/loop-8.c | 2 +-
gcc/testsuite/gcc.dg/lto/pr96291.h | 4 +
gcc/testsuite/gcc.dg/lto/pr96291_0.c | 11 +
gcc/testsuite/gcc.dg/lto/pr96291_1.c | 3 +
gcc/testsuite/gcc.dg/lto/pr96291_2.c | 7 +
gcc/testsuite/gcc.dg/pr96370.c | 8 +
gcc/testsuite/gcc.dg/pr96377-1.c | 32 +
gcc/testsuite/gcc.dg/pr96377-2.c | 31 +
gcc/testsuite/gcc.dg/pr96377-3.c | 33 +
gcc/testsuite/gcc.dg/pr96377-4.c | 32 +
gcc/testsuite/gcc.dg/pr96377-5.c | 33 +
gcc/testsuite/gcc.dg/pr96377-6.c | 32 +
gcc/testsuite/gcc.dg/torture/20200727-0.c | 82 +
gcc/testsuite/gcc.dg/torture/pr96349.c | 25 +
.../gcc.dg/tree-prof/indir-call-prof-malloc.c | 49 +
gcc/testsuite/gcc.target/aarch64/pr96377-1.c | 20 +
.../aarch64/sve/acle/general-c/gnu_vectors_3.c | 15 +
.../aarch64/sve/acle/general-c/gnu_vectors_4.c | 15 +
.../gcc.target/aarch64/sve/cost_model_2.c | 2 +-
.../arm/mve/intrinsics/mve-vldstr16-no-writeback.c | 17 +
gcc/testsuite/gcc.target/nvptx/recip-1.c | 18 +
gcc/testsuite/gcc.target/nvptx/v2si-cvt.c | 34 +-
.../gcc.target/nvptx/v2si-vec-set-extract.c | 25 +
gcc/testsuite/gcc.target/powerpc/lsbb-runnable.c | 65 +
gcc/testsuite/gcc.target/powerpc/lsbb.c | 24 +
gcc/testsuite/gdc.dg/array1.d | 14 +
gcc/testsuite/gdc.dg/compilable.d | 444 -
gcc/testsuite/gdc.dg/gdc108.d | 19 +
gcc/testsuite/gdc.dg/gdc115.d | 16 +
gcc/testsuite/gdc.dg/gdc121.d | 4 +
gcc/testsuite/gdc.dg/gdc122.d | 36 +
gcc/testsuite/gdc.dg/gdc127.d | 6 +
gcc/testsuite/gdc.dg/gdc131.d | 15 +
gcc/testsuite/gdc.dg/gdc133.d | 16 +
gcc/testsuite/gdc.dg/gdc141.d | 14 +
gcc/testsuite/gdc.dg/gdc142.d | 15 +
gcc/testsuite/gdc.dg/gdc15.d | 35 +
gcc/testsuite/gdc.dg/gdc17.d | 37 +
gcc/testsuite/gdc.dg/gdc170.d | 21 +
gcc/testsuite/gdc.dg/gdc171.d | 38 +
gcc/testsuite/gdc.dg/gdc179.d | 32 +
gcc/testsuite/gdc.dg/gdc183.d | 60 +
gcc/testsuite/gdc.dg/gdc186.d | 60 +
gcc/testsuite/gdc.dg/gdc187.d | 40 +
gcc/testsuite/gdc.dg/gdc19.d | 8 +
gcc/testsuite/gdc.dg/gdc191.d | 201 +
gcc/testsuite/gdc.dg/gdc194.d | 9 +
gcc/testsuite/gdc.dg/gdc196.d | 21 +
gcc/testsuite/gdc.dg/gdc198.d | 71 +
gcc/testsuite/gdc.dg/gdc200.d | 16 +
gcc/testsuite/gdc.dg/gdc204.d | 12 +
gcc/testsuite/gdc.dg/gdc210.d | 62 +
gcc/testsuite/gdc.dg/gdc212.d | 48 +
gcc/testsuite/gdc.dg/gdc213.d | 17 +
gcc/testsuite/gdc.dg/gdc218.d | 41 +
gcc/testsuite/gdc.dg/gdc223.d | 43 +
gcc/testsuite/gdc.dg/gdc231.d | 13 +
gcc/testsuite/gdc.dg/gdc239.d | 10 +
gcc/testsuite/gdc.dg/gdc24.d | 15 +
gcc/testsuite/gdc.dg/gdc240.d | 16 +
gcc/testsuite/gdc.dg/gdc241.d | 6 +
gcc/testsuite/gdc.dg/gdc242a.d | 24 +
gcc/testsuite/gdc.dg/gdc242b.d | 25 +
gcc/testsuite/gdc.dg/gdc248.d | 44 +
gcc/testsuite/gdc.dg/gdc250.d | 18 +
gcc/testsuite/gdc.dg/gdc251.d | 6 +
gcc/testsuite/gdc.dg/gdc253a.d | 10 +
gcc/testsuite/gdc.dg/gdc253b.d | 19 +
gcc/testsuite/gdc.dg/gdc255.d | 83 +
gcc/testsuite/gdc.dg/gdc256.d | 5 +
gcc/testsuite/gdc.dg/gdc261.d | 19 +
gcc/testsuite/gdc.dg/gdc27.d | 18 +
gcc/testsuite/gdc.dg/gdc273.d | 19 +
gcc/testsuite/gdc.dg/gdc280.d | 30 +
gcc/testsuite/gdc.dg/gdc284.d | 10 +
gcc/testsuite/gdc.dg/gdc285.d | 15 +
gcc/testsuite/gdc.dg/gdc286.d | 37 +
gcc/testsuite/gdc.dg/{link.d => gdc300.d} | 18 +-
gcc/testsuite/gdc.dg/gdc309.d | 41 +
gcc/testsuite/gdc.dg/gdc31.d | 25 +
gcc/testsuite/gdc.dg/gdc35.d | 73 +
gcc/testsuite/gdc.dg/gdc36.d | 125 +
gcc/testsuite/gdc.dg/gdc37.d | 16 +
gcc/testsuite/gdc.dg/gdc4.d | 9 +
gcc/testsuite/gdc.dg/gdc43.d | 29 +
gcc/testsuite/gdc.dg/gdc47.d | 12 +
gcc/testsuite/gdc.dg/gdc51.d | 29 +
gcc/testsuite/gdc.dg/gdc57.d | 21 +
gcc/testsuite/gdc.dg/gdc66.d | 14 +
gcc/testsuite/gdc.dg/gdc67.d | 4 +
gcc/testsuite/gdc.dg/gdc71.d | 27 +
gcc/testsuite/gdc.dg/gdc77.d | 11 +
gcc/testsuite/gdc.dg/imports/gdc239.d | 22 +-
gcc/testsuite/gdc.dg/imports/gdc241a.d | 4 +-
gcc/testsuite/gdc.dg/imports/gdc241b.d | 1 +
gcc/testsuite/gdc.dg/imports/gdc251a.d | 2 +-
.../gdc.dg/imports/{gdc253.d => gdc253a.d} | 2 +-
gcc/testsuite/gdc.dg/imports/gdc253b.d | 12 +
gcc/testsuite/gdc.dg/imports/gdc36.d | 8 +
gcc/testsuite/gdc.dg/imports/runnable.d | 23 -
gcc/testsuite/gdc.dg/intrinsics.d | 123 +
gcc/testsuite/gdc.dg/pr96140.d | 15 +
gcc/testsuite/gdc.dg/pr96152.d | 32 +
gcc/testsuite/gdc.dg/pr96154a.d | 18 +
gcc/testsuite/gdc.dg/pr96154b.d | 19 +
gcc/testsuite/gdc.dg/pr96254a.d | 28 +
gcc/testsuite/gdc.dg/pr96254b.d | 24 +
gcc/testsuite/gdc.dg/runnable.d | 1394 --
gcc/testsuite/gdc.dg/runnable2.d | 244 -
gcc/testsuite/gdc.dg/simd.d | 2 -
gcc/testsuite/gdc.test/compilable/b9490.d | 39 +
gcc/testsuite/gdc.test/compilable/ice14739.d | 19 +
.../gdc.test/fail_compilation/fail17492.d | 20 +-
gcc/testsuite/gdc.test/fail_compilation/ice21060.d | 15 +
.../fail_compilation/imports/ice21060a/package.d | 1 +
.../fail_compilation/imports/ice21060b/package.d | 5 +
.../fail_compilation/imports/ice21060c/package.d | 1 +
.../fail_compilation/imports/ice21060d/package.d | 5 +
gcc/testsuite/gdc.test/runnable/b16278.d | 6 +
gcc/testsuite/gfortran.dg/gomp/map-3.f90 | 38 +
gcc/testsuite/gfortran.dg/gomp/map-4.f90 | 7 +
gcc/testsuite/gfortran.dg/gomp/order-3.f90 | 227 +
gcc/testsuite/gfortran.dg/gomp/order-4.f90 | 34 +
gcc/testsuite/gfortran.dg/gomp/requires-1.f90 | 13 +
gcc/testsuite/gfortran.dg/gomp/requires-2.f90 | 14 +
gcc/testsuite/gfortran.dg/gomp/requires-3.f90 | 4 +
gcc/testsuite/gfortran.dg/gomp/requires-4.f90 | 36 +
gcc/testsuite/gfortran.dg/gomp/requires-5.f90 | 16 +
gcc/testsuite/gfortran.dg/gomp/requires-6.f90 | 16 +
gcc/testsuite/gfortran.dg/gomp/requires-7.f90 | 41 +
gcc/testsuite/gfortran.dg/gomp/requires-8.f90 | 22 +
gcc/testsuite/gfortran.dg/gomp/requires-9.f90 | 85 +
gcc/testsuite/gfortran.dg/module_procedure_4.f90 | 63 +
gcc/testsuite/gfortran.dg/pr53298.f90 | 14 +
gcc/testsuite/gfortran.dg/pr91589.f90 | 2 +-
gcc/testsuite/gfortran.dg/pr96319.f90 | 12 +
gcc/testsuite/gfortran.dg/pr96325.f90 | 21 +
gcc/tree-ssa-loop-split.c | 10 +
gcc/tree-ssa-propagate.c | 15 +-
gcc/tree-ssa-propagate.h | 2 +-
gcc/tree-ssa-reassoc.c | 10 +-
gcc/tree-ssa-sccvn.c | 55 +-
gcc/tree-vect-data-refs.c | 2 +-
gcc/tree-vect-loop.c | 16 +-
gcc/tree-vectorizer.c | 6 +-
gcc/tree-vrp.c | 32 +-
gcc/tree-vrp.h | 2 +
gcc/tree.c | 85 +-
gcc/value-range-equiv.cc | 20 +-
gcc/value-range.cc | 1292 +-
gcc/value-range.h | 597 +-
gcc/var-tracking.c | 277 +-
gcc/vr-values.c | 3 +-
libbacktrace/ChangeLog | 5 +
libbacktrace/configure | 23 +-
libcc1/ChangeLog | 5 +
libcc1/configure | 21 +-
libcpp/ChangeLog | 21 +
libcpp/configure | 21 +-
libcpp/init.c | 3 +
libcpp/traditional.c | 4 +-
libdecnumber/ChangeLog | 5 +
libdecnumber/configure | 21 +-
libgcc/ChangeLog | 14 +
libgcc/config/riscv/save-restore.S | 13 +-
libgcc/libgcov-driver.c | 6 +
libgcc/libgcov.h | 49 +-
libgfortran/caf/single.c | 11 +-
libgo/MERGE | 2 +-
libgo/Makefile.am | 31 +-
libgo/Makefile.in | 75 +-
libgo/VERSION | 2 +-
libgo/check-packages.txt | 4 +-
libgo/configure | 6 +-
libgo/configure.ac | 2 +-
libgo/go/bufio/bufio.go | 52 +-
libgo/go/bufio/bufio_test.go | 34 +-
libgo/go/bufio/scan.go | 5 +
libgo/go/bufio/scan_test.go | 57 +
libgo/go/bytes/buffer_test.go | 19 +-
libgo/go/bytes/bytes.go | 199 +-
libgo/go/bytes/bytes_test.go | 78 +-
libgo/go/cmd/cgo/doc.go | 11 +-
libgo/go/cmd/cgo/gcc.go | 30 +-
libgo/go/cmd/cgo/out.go | 47 +-
libgo/go/cmd/go/alldocs.go | 166 +-
libgo/go/cmd/go/go_test.go | 2722 +---
libgo/go/cmd/go/help_test.go | 2 +
libgo/go/cmd/go/internal/auth/auth.go | 4 +-
libgo/go/cmd/go/internal/base/base.go | 25 -
libgo/go/cmd/go/internal/base/env.go | 14 +-
libgo/go/cmd/go/internal/base/goflags.go | 12 +-
libgo/go/cmd/go/internal/cache/cache.go | 2 +-
libgo/go/cmd/go/internal/cfg/cfg.go | 11 +
libgo/go/cmd/go/internal/clean/clean.go | 33 +-
libgo/go/cmd/go/internal/cmdflag/flag.go | 203 +-
libgo/go/cmd/go/internal/envcmd/env.go | 1 +
libgo/go/cmd/go/internal/fmtcmd/fmt.go | 7 +-
libgo/go/cmd/go/internal/generate/generate.go | 33 +-
libgo/go/cmd/go/internal/get/get.go | 33 +-
libgo/go/cmd/go/internal/get/vcs.go | 2 +-
libgo/go/cmd/go/internal/help/help.go | 2 +-
libgo/go/cmd/go/internal/help/helpdoc.go | 97 +
libgo/go/cmd/go/internal/list/list.go | 4 +-
libgo/go/cmd/go/internal/load/pkg.go | 291 +-
libgo/go/cmd/go/internal/load/test.go | 11 +-
.../lockedfile/internal/filelock/filelock_fcntl.go | 70 +-
.../cmd/go/internal/lockedfile/lockedfile_test.go | 98 +
libgo/go/cmd/go/internal/modcmd/download.go | 3 +-
libgo/go/cmd/go/internal/modcmd/vendor.go | 5 +
libgo/go/cmd/go/internal/modcmd/verify.go | 55 +-
libgo/go/cmd/go/internal/modconv/convert_test.go | 4 +-
libgo/go/cmd/go/internal/modfetch/cache.go | 28 +-
.../cmd/go/internal/modfetch/codehost/codehost.go | 10 +-
libgo/go/cmd/go/internal/modfetch/codehost/git.go | 5 -
.../cmd/go/internal/modfetch/codehost/git_test.go | 1 -
.../go/cmd/go/internal/modfetch/codehost/shell.go | 3 +-
libgo/go/cmd/go/internal/modfetch/coderepo.go | 27 +-
libgo/go/cmd/go/internal/modfetch/coderepo_test.go | 2 +-
libgo/go/cmd/go/internal/modfetch/fetch.go | 102 +-
libgo/go/cmd/go/internal/modfetch/proxy.go | 129 +-
libgo/go/cmd/go/internal/modfetch/pseudo.go | 4 +-
libgo/go/cmd/go/internal/modfetch/sumdb.go | 99 +-
.../modfetch/zip_sum_test/testdata/zip_sums.csv | 5 -
.../internal/modfetch/zip_sum_test/zip_sum_test.go | 2 +-
libgo/go/cmd/go/internal/modget/get.go | 50 +-
libgo/go/cmd/go/internal/modload/build.go | 30 +-
libgo/go/cmd/go/internal/modload/help.go | 18 +-
libgo/go/cmd/go/internal/modload/import.go | 118 +-
libgo/go/cmd/go/internal/modload/init.go | 254 +-
libgo/go/cmd/go/internal/modload/load.go | 658 +-
libgo/go/cmd/go/internal/modload/modfile.go | 164 +
libgo/go/cmd/go/internal/modload/mvs.go | 259 +
libgo/go/cmd/go/internal/modload/query.go | 90 +-
libgo/go/cmd/go/internal/modload/query_test.go | 5 +-
libgo/go/cmd/go/internal/modload/search.go | 45 +-
libgo/go/cmd/go/internal/modload/vendor.go | 217 +
libgo/go/cmd/go/internal/mvs/mvs.go | 23 +-
libgo/go/cmd/go/internal/renameio/renameio_test.go | 6 +
libgo/go/cmd/go/internal/search/search.go | 231 +-
libgo/go/cmd/go/internal/str/path.go | 2 +-
libgo/go/cmd/go/internal/test/flagdefs.go | 34 +
libgo/go/cmd/go/internal/test/flagdefs_test.go | 34 +
libgo/go/cmd/go/internal/test/genflags.go | 90 +
libgo/go/cmd/go/internal/test/test.go | 168 +-
libgo/go/cmd/go/internal/test/testflag.go | 480 +-
libgo/go/cmd/go/internal/version/version.go | 6 +
libgo/go/cmd/go/internal/vet/vet.go | 8 +-
libgo/go/cmd/go/internal/vet/vetflag.go | 163 +-
libgo/go/cmd/go/internal/web/api.go | 17 +-
libgo/go/cmd/go/internal/web/http.go | 40 +-
libgo/go/cmd/go/internal/work/action.go | 2 +-
libgo/go/cmd/go/internal/work/build.go | 5 +-
libgo/go/cmd/go/internal/work/build_test.go | 2 +-
libgo/go/cmd/go/internal/work/buildid.go | 4 +-
libgo/go/cmd/go/internal/work/exec.go | 114 +-
libgo/go/cmd/go/internal/work/gc.go | 27 +-
libgo/go/cmd/go/internal/work/init.go | 37 +-
libgo/go/cmd/go/internal/work/security.go | 3 +
libgo/go/cmd/go/internal/work/security_test.go | 2 +
libgo/go/cmd/go/internal/work/testgo.go | 33 +-
libgo/go/cmd/go/main.go | 3 +-
libgo/go/cmd/go/note_test.go | 4 +-
libgo/go/cmd/go/proxy_test.go | 19 +
libgo/go/cmd/go/script_test.go | 483 +-
libgo/go/cmd/go/testdata/example1_test.go | 23 -
libgo/go/cmd/go/testdata/example2_test.go | 21 -
libgo/go/cmd/go/testdata/generate/test1.go | 13 -
libgo/go/cmd/go/testdata/generate/test2.go | 10 -
libgo/go/cmd/go/testdata/generate/test3.go | 9 -
libgo/go/cmd/go/testdata/generate/test4.go | 10 -
.../mod/example.com_printversion_v0.1.0.txt | 6 +
.../mod/example.com_printversion_v1.0.0.txt | 6 +
.../cmd/go/testdata/norunexample/example_test.go | 11 -
libgo/go/cmd/go/testdata/norunexample/test_test.go | 10 -
libgo/go/cmd/go/testdata/print_goroot.go | 14 -
libgo/go/cmd/go/testdata/rundir/sub/sub.go | 1 -
libgo/go/cmd/go/testdata/rundir/x.go | 1 -
libgo/go/cmd/go/testdata/script/README | 24 +-
libgo/go/cmd/go/testdata/script/build_gcflags.txt | 3 +-
libgo/go/cmd/go/testdata/script/build_trimpath.txt | 4 +
.../go/cmd/go/testdata/script/cmd_import_error.txt | 2 +-
.../go/cmd/go/testdata/script/gcflags_patterns.txt | 2 +
.../cmd/go/testdata/script/install_cross_gobin.txt | 9 +-
.../go/testdata/script/link_syso_issue33139.txt | 4 -
.../cmd/go/testdata/script/list_ambiguous_path.txt | 4 +-
libgo/go/cmd/go/testdata/script/list_importmap.txt | 2 +-
libgo/go/cmd/go/testdata/script/list_parse_err.txt | 36 +-
.../cmd/go/testdata/script/list_test_imports.txt | 2 +-
.../go/testdata/script/list_test_non_go_files.txt | 2 +-
.../go/testdata/script/mod_ambiguous_import.txt | 3 +-
.../go/cmd/go/testdata/script/mod_convert_dep.txt | 1 -
.../go/cmd/go/testdata/script/mod_convert_git.txt | 17 +
libgo/go/cmd/go/testdata/script/mod_dot.txt | 97 +-
libgo/go/cmd/go/testdata/script/mod_empty_err.txt | 8 +-
.../go/cmd/go/testdata/script/mod_fs_patterns.txt | 4 +-
libgo/go/cmd/go/testdata/script/mod_get_commit.txt | 3 +
libgo/go/cmd/go/testdata/script/mod_get_main.txt | 15 +-
libgo/go/cmd/go/testdata/script/mod_get_tags.txt | 3 +-
libgo/go/cmd/go/testdata/script/mod_gonoproxy.txt | 15 +-
.../cmd/go/testdata/script/mod_goroot_errors.txt | 4 +-
.../cmd/go/testdata/script/mod_invalid_version.txt | 6 +-
libgo/go/cmd/go/testdata/script/mod_list_dir.txt | 4 -
.../go/testdata/script/mod_list_replace_dir.txt | 4 +-
libgo/go/cmd/go/testdata/script/mod_list_std.txt | 10 +
libgo/go/cmd/go/testdata/script/mod_proxy_list.txt | 14 +-
libgo/go/cmd/go/testdata/script/mod_readonly.txt | 4 +-
.../cmd/go/testdata/script/mod_replace_import.txt | 5 +-
libgo/go/cmd/go/testdata/script/mod_retention.txt | 12 +-
.../go/cmd/go/testdata/script/mod_sumdb_proxy.txt | 17 +
.../cmd/go/testdata/script/noncanonical_import.txt | 4 +-
libgo/go/cmd/go/testdata/script/script_wait.txt | 7 +-
.../cmd/go/testdata/script/test_cache_inputs.txt | 21 +
libgo/go/cmd/go/testdata/script/version.txt | 27 +-
libgo/go/cmd/go/testdata/script/vet_flags.txt | 58 +-
.../go/cmd/go/testdata/shadow/root1/src/foo/foo.go | 1 -
.../cmd/go/testdata/shadow/root1/src/math/math.go | 1 -
.../go/cmd/go/testdata/shadow/root2/src/foo/foo.go | 1 -
libgo/go/cmd/go/testdata/src/cgotest/m.go | 5 -
libgo/go/cmd/go/testdata/src/coverasm/p.go | 7 -
libgo/go/cmd/go/testdata/src/coverasm/p.s | 2 -
libgo/go/cmd/go/testdata/src/coverasm/p_test.go | 7 -
libgo/go/cmd/go/testdata/src/coverbad/p.go | 5 -
libgo/go/cmd/go/testdata/src/coverbad/p1.go | 7 -
libgo/go/cmd/go/testdata/src/coverbad/p_test.go | 5 -
libgo/go/cmd/go/testdata/src/coverdep/p.go | 6 -
libgo/go/cmd/go/testdata/src/coverdep/p1/p1.go | 3 -
libgo/go/cmd/go/testdata/src/coverdep/p_test.go | 7 -
libgo/go/cmd/go/testdata/src/coverdep2/p1/p.go | 3 -
.../go/cmd/go/testdata/src/coverdep2/p1/p_test.go | 10 -
libgo/go/cmd/go/testdata/src/coverdep2/p2/p2.go | 7 -
libgo/go/cmd/go/testdata/src/coverdot1/p.go | 3 -
libgo/go/cmd/go/testdata/src/coverdot2/p.go | 5 -
libgo/go/cmd/go/testdata/src/coverdot2/p_test.go | 7 -
libgo/go/cmd/go/testdata/src/empty/pkg/pkg.go | 1 -
libgo/go/cmd/go/testdata/src/empty/pkgtest/pkg.go | 1 -
.../cmd/go/testdata/src/empty/pkgtest/test_test.go | 1 -
.../cmd/go/testdata/src/empty/pkgtestxtest/pkg.go | 1 -
.../testdata/src/empty/pkgtestxtest/test_test.go | 1 -
.../testdata/src/empty/pkgtestxtest/xtest_test.go | 1 -
libgo/go/cmd/go/testdata/src/empty/pkgxtest/pkg.go | 1 -
.../go/testdata/src/empty/pkgxtest/xtest_test.go | 1 -
.../go/cmd/go/testdata/src/empty/test/test_test.go | 1 -
.../go/testdata/src/empty/testxtest/test_test.go | 1 -
.../go/testdata/src/empty/testxtest/xtest_test.go | 1 -
.../cmd/go/testdata/src/empty/xtest/xtest_test.go | 1 -
libgo/go/cmd/go/testdata/src/exclude/empty/x.txt | 0
libgo/go/cmd/go/testdata/src/exclude/ignore/_x.go | 1 -
libgo/go/cmd/go/testdata/src/exclude/x.go | 3 -
libgo/go/cmd/go/testdata/src/exclude/x_linux.go | 3 -
libgo/go/cmd/go/testdata/src/failfast_test.go | 62 -
libgo/go/cmd/go/testdata/src/hello/hello.go | 5 -
libgo/go/cmd/go/testdata/src/my.pkg/main/main.go | 7 -
libgo/go/cmd/go/testdata/src/my.pkg/pkg.go | 3 -
libgo/go/cmd/go/testdata/src/skipper/skip_test.go | 7 -
.../go/cmd/go/testdata/src/testlist/bench_test.go | 14 -
.../cmd/go/testdata/src/testlist/example_test.go | 21 -
libgo/go/cmd/go/testdata/src/testlist/test_test.go | 10 -
libgo/go/cmd/go/testdata/src/vend/bad.go | 3 -
libgo/go/cmd/go/testdata/src/vend/dir1/dir1.go | 1 -
libgo/go/cmd/go/testdata/src/vend/good.go | 3 -
libgo/go/cmd/go/testdata/src/vend/hello/hello.go | 10 -
.../cmd/go/testdata/src/vend/hello/hello_test.go | 12 -
.../cmd/go/testdata/src/vend/hello/hellox_test.go | 12 -
libgo/go/cmd/go/testdata/src/vend/subdir/bad.go | 3 -
libgo/go/cmd/go/testdata/src/vend/subdir/good.go | 3 -
libgo/go/cmd/go/testdata/src/vend/vendor/p/p.go | 1 -
libgo/go/cmd/go/testdata/src/vend/vendor/q/q.go | 1 -
.../cmd/go/testdata/src/vend/vendor/strings/msg.go | 3 -
.../src/vend/vendor/vend/dir1/dir2/dir2.go | 1 -
.../cmd/go/testdata/src/vend/x/invalid/invalid.go | 3 -
libgo/go/cmd/go/testdata/src/vend/x/vendor/p/p.go | 1 -
.../go/cmd/go/testdata/src/vend/x/vendor/p/p/p.go | 3 -
libgo/go/cmd/go/testdata/src/vend/x/vendor/r/r.go | 1 -
libgo/go/cmd/go/testdata/src/vend/x/x.go | 7 -
libgo/go/cmd/go/testdata/src/vetcycle/p.go | 13 -
libgo/go/cmd/go/testdata/src/vetfail/p1/p1.go | 9 -
libgo/go/cmd/go/testdata/src/vetfail/p2/p2.go | 6 -
libgo/go/cmd/go/testdata/src/vetfail/p2/p2_test.go | 7 -
libgo/go/cmd/go/testdata/src/vetpkg/a_test.go | 1 -
libgo/go/cmd/go/testdata/src/vetpkg/b.go | 7 -
libgo/go/cmd/go/testdata/src/vetpkg/c.go | 9 -
libgo/go/cmd/go/testdata/src/xtestonly/f.go | 3 -
libgo/go/cmd/go/testdata/src/xtestonly/f_test.go | 12 -
.../cmd/go/testdata/standalone_benchmark_test.go | 6 -
.../go/cmd/go/testdata/standalone_fail_sub_test.go | 8 -
.../cmd/go/testdata/standalone_main_normal_test.go | 10 -
.../cmd/go/testdata/standalone_main_wrong_test.go | 10 -
.../go/testdata/standalone_parallel_sub_test.go | 14 -
libgo/go/cmd/go/testdata/standalone_sub_test.go | 7 -
libgo/go/cmd/go/testdata/standalone_test.go | 6 -
.../go/testdata/standalone_testmain_flag_test.go | 29 -
libgo/go/cmd/go/testdata/testcover/pkg1/a.go | 7 -
libgo/go/cmd/go/testdata/testcover/pkg2/a.go | 7 -
libgo/go/cmd/go/testdata/testcover/pkg2/a_test.go | 1 -
libgo/go/cmd/go/testdata/testcover/pkg3/a.go | 7 -
libgo/go/cmd/go/testdata/testcover/pkg3/a_test.go | 7 -
libgo/go/cmd/go/testdata/testcover/pkg4/a.go | 5 -
libgo/go/cmd/go/testdata/testcover/pkg4/a_test.go | 9 -
libgo/go/cmd/go/testdata/testimport/p.go | 3 -
libgo/go/cmd/go/testdata/testimport/p1/p1.go | 3 -
libgo/go/cmd/go/testdata/testimport/p2/p2.go | 3 -
libgo/go/cmd/go/testdata/testimport/p_test.go | 13 -
libgo/go/cmd/go/testdata/testimport/x_test.go | 15 -
libgo/go/cmd/go/testdata/testinternal/p.go | 3 -
libgo/go/cmd/go/testdata/testinternal2/p.go | 3 -
.../testdata/testinternal2/x/y/z/internal/w/w.go | 1 -
libgo/go/cmd/go/testdata/testinternal3/t.go | 3 -
libgo/go/cmd/go/testdata/testinternal4/src/p/p.go | 6 -
.../testdata/testinternal4/src/q/internal/x/x.go | 1 -
.../go/cmd/go/testdata/testinternal4/src/q/j/j.go | 3 -
libgo/go/cmd/go/testdata/testonly/p_test.go | 1 -
libgo/go/cmd/go/testdata/testonly2/t.go | 6 -
libgo/go/cmd/go/testdata/testvendor/src/p/p.go | 6 -
.../cmd/go/testdata/testvendor/src/q/vendor/x/x.go | 1 -
libgo/go/cmd/go/testdata/testvendor/src/q/y/y.go | 3 -
libgo/go/cmd/go/testdata/testvendor/src/q/z/z.go | 3 -
libgo/go/cmd/go/testdata/testvendor2/src/p/p.go | 3 -
libgo/go/cmd/go/testdata/testvendor2/vendor/x/x.go | 1 -
libgo/go/cmd/go/testdata/timeoutbench_test.go | 10 -
libgo/go/cmd/go/vendor_test.go | 412 -
libgo/go/cmd/gofmt/gofmt.go | 64 +-
libgo/go/cmd/gofmt/internal.go | 8 +-
libgo/go/cmd/internal/objabi/autotype.go | 2 +-
libgo/go/cmd/internal/objabi/funcdata.go | 28 +-
libgo/go/cmd/internal/objabi/head.go | 2 +-
libgo/go/cmd/internal/objabi/reloctype.go | 2 +-
libgo/go/cmd/internal/objabi/stack.go | 2 +-
libgo/go/cmd/internal/objabi/symkind.go | 2 +-
libgo/go/cmd/internal/objabi/symkind_string.go | 24 +-
libgo/go/cmd/internal/objabi/util.go | 19 +-
libgo/go/cmd/internal/sys/supported.go | 11 +-
libgo/go/cmd/vet/main.go | 4 +
libgo/go/compress/flate/deflate_test.go | 56 +-
libgo/go/compress/flate/deflatefast.go | 49 +-
libgo/go/compress/flate/huffman_bit_writer.go | 1 +
libgo/go/compress/flate/writer_test.go | 63 +
libgo/go/container/list/list.go | 18 +-
libgo/go/context/context.go | 9 +
libgo/go/context/context_test.go | 159 +-
libgo/go/context/example_test.go | 6 +-
libgo/go/context/x_test.go | 1 +
libgo/go/crypto/crypto.go | 47 +-
libgo/go/crypto/ecdsa/ecdsa.go | 88 +-
libgo/go/crypto/ecdsa/ecdsa_noasm.go | 21 +
libgo/go/crypto/ecdsa/ecdsa_s390x.go | 164 +
libgo/go/crypto/ecdsa/ecdsa_s390x_test.go | 34 +
libgo/go/crypto/ecdsa/ecdsa_test.go | 30 +
libgo/go/crypto/ecdsa/equal_test.go | 75 +
libgo/go/crypto/ecdsa/example_test.go | 6 +-
libgo/go/crypto/ed25519/ed25519.go | 27 +-
libgo/go/crypto/ed25519/ed25519_noasm.go | 15 +
libgo/go/crypto/ed25519/ed25519_s390x.go | 53 +
libgo/go/crypto/ed25519/ed25519_test.go | 66 +-
libgo/go/crypto/elliptic/elliptic.go | 83 +-
libgo/go/crypto/elliptic/elliptic_test.go | 147 +-
libgo/go/crypto/hmac/hmac.go | 80 +-
libgo/go/crypto/hmac/hmac_test.go | 13 +-
libgo/go/crypto/rsa/equal_test.go | 51 +
libgo/go/crypto/rsa/example_test.go | 2 +-
libgo/go/crypto/rsa/pkcs1v15.go | 41 +-
libgo/go/crypto/rsa/pkcs1v15_test.go | 18 +
libgo/go/crypto/rsa/pss.go | 182 +-
libgo/go/crypto/rsa/rsa.go | 86 +-
libgo/go/crypto/sha512/sha512block_generic.go | 4 +-
libgo/go/crypto/tls/alert.go | 120 +-
libgo/go/crypto/tls/auth.go | 18 +-
libgo/go/crypto/tls/auth_test.go | 14 +-
libgo/go/crypto/tls/common.go | 324 +-
libgo/go/crypto/tls/common_string.go | 116 +
libgo/go/crypto/tls/conn.go | 84 +-
libgo/go/crypto/tls/example_test.go | 122 +-
libgo/go/crypto/tls/generate_cert.go | 12 +-
libgo/go/crypto/tls/handshake_client.go | 126 +-
libgo/go/crypto/tls/handshake_client_test.go | 535 +-
libgo/go/crypto/tls/handshake_client_tls13.go | 88 +-
libgo/go/crypto/tls/handshake_messages_test.go | 9 +-
libgo/go/crypto/tls/handshake_server.go | 87 +-
libgo/go/crypto/tls/handshake_server_test.go | 22 +-
libgo/go/crypto/tls/handshake_server_tls13.go | 17 +-
libgo/go/crypto/tls/key_agreement.go | 2 +-
libgo/go/crypto/tls/key_schedule.go | 7 +-
libgo/go/crypto/tls/link_test.go | 121 +
.../testdata/Server-TLSv10-ExportKeyingMaterial | 83 +-
libgo/go/crypto/tls/testdata/Server-TLSv12-ALPN | 83 +-
.../crypto/tls/testdata/Server-TLSv12-ALPN-NoMatch | 83 +-
.../testdata/Server-TLSv12-ExportKeyingMaterial | 81 +-
.../crypto/tls/testdata/Server-TLSv12-IssueTicket | 167 +-
.../testdata/Server-TLSv12-IssueTicketPreDisable | 167 +-
libgo/go/crypto/tls/testdata/Server-TLSv12-Resume | 82 +-
libgo/go/crypto/tls/ticket.go | 119 +-
libgo/go/crypto/tls/tls.go | 106 +-
libgo/go/crypto/tls/tls_test.go | 174 +-
libgo/go/crypto/x509/cert_pool.go | 12 +-
.../crypto/x509/internal/macos/corefoundation.go | 141 +
libgo/go/crypto/x509/internal/macos/security.go | 116 +
libgo/go/crypto/x509/pkcs1.go | 12 +-
libgo/go/crypto/x509/pkcs8.go | 6 +-
libgo/go/crypto/x509/pkix/pkix.go | 52 +-
libgo/go/crypto/x509/root.go | 2 +
...root_cgo_darwin.go => root_cgo_darwin_amd64.go} | 14 +-
libgo/go/crypto/x509/root_darwin.go | 288 -
libgo/go/crypto/x509/root_darwin_amd64.go | 243 +
libgo/go/crypto/x509/root_darwin_arm_gen.go | 186 -
.../{root_darwin_armx.go => root_darwin_ios.go} | 2145 ++-
libgo/go/crypto/x509/root_darwin_ios_gen.go | 179 +
libgo/go/crypto/x509/root_nocgo_darwin.go | 11 -
libgo/go/crypto/x509/root_omit.go | 29 +
libgo/go/crypto/x509/root_omit_test.go | 23 +
libgo/go/crypto/x509/root_unix.go | 46 +-
libgo/go/crypto/x509/root_unix_test.go | 109 +
libgo/go/crypto/x509/sec1.go | 7 +-
libgo/go/crypto/x509/verify.go | 99 +-
libgo/go/crypto/x509/verify_test.go | 43 +-
libgo/go/crypto/x509/x509.go | 193 +-
libgo/go/crypto/x509/x509_test.go | 519 +-
libgo/go/database/sql/driver/driver.go | 52 +-
libgo/go/database/sql/fakedb_test.go | 2 +-
libgo/go/database/sql/sql.go | 164 +-
libgo/go/database/sql/sql_test.go | 79 +-
libgo/go/debug/gosym/symtab.go | 4 +-
libgo/go/debug/pe/file_test.go | 12 +-
libgo/go/debug/pe/pe.go | 53 +
libgo/go/encoding/asn1/asn1.go | 12 +
libgo/go/encoding/asn1/asn1_test.go | 12 +
libgo/go/encoding/asn1/marshal.go | 56 +
libgo/go/encoding/asn1/marshal_test.go | 57 +
libgo/go/encoding/base64/base64.go | 26 +-
libgo/go/encoding/base64/base64_test.go | 2 +-
libgo/go/encoding/csv/writer.go | 16 +-
libgo/go/encoding/csv/writer_test.go | 17 +
libgo/go/encoding/hex/hex_test.go | 1 -
libgo/go/encoding/json/decode_test.go | 96 +
libgo/go/encoding/json/encode.go | 2 +-
libgo/go/encoding/json/scanner.go | 31 +-
libgo/go/encoding/xml/marshal.go | 16 +-
libgo/go/encoding/xml/marshal_test.go | 17 +
libgo/go/encoding/xml/read.go | 16 +-
libgo/go/encoding/xml/typeinfo.go | 16 +-
libgo/go/encoding/xml/xml.go | 4 +-
libgo/go/errors/wrap.go | 2 +-
libgo/go/errors/wrap_test.go | 13 +
libgo/go/expvar/expvar_test.go | 8 +-
libgo/go/flag/flag.go | 11 +-
libgo/go/flag/flag_test.go | 66 +
libgo/go/fmt/fmt_test.go | 19 +-
libgo/go/fmt/format.go | 13 +-
libgo/go/fmt/scan.go | 8 +-
libgo/go/go/ast/ast.go | 55 +-
libgo/go/go/ast/ast_test.go | 29 +
libgo/go/go/build/build.go | 3 +-
libgo/go/go/build/build_test.go | 23 +-
libgo/go/go/build/deps_test.go | 1147 +-
libgo/go/go/build/doc.go | 97 +-
libgo/go/go/constant/value.go | 31 -
libgo/go/go/format/format.go | 14 +-
libgo/go/go/format/format_test.go | 38 +
libgo/go/go/format/internal.go | 2 +-
libgo/go/go/internal/gccgoimporter/parser.go | 2 +-
libgo/go/go/internal/gcimporter/bimport.go | 1021 --
libgo/go/go/internal/gcimporter/gcimporter.go | 13 +-
libgo/go/go/internal/gcimporter/gcimporter_test.go | 17 +-
libgo/go/go/internal/gcimporter/support.go | 127 +
libgo/go/go/internal/srcimporter/srcimporter.go | 64 +-
.../go/go/internal/srcimporter/srcimporter_test.go | 21 +
libgo/go/go/printer/nodes.go | 63 +
libgo/go/go/printer/performance_test.go | 2 +-
libgo/go/go/printer/printer.go | 16 +
libgo/go/go/printer/printer_test.go | 8 +-
libgo/go/go/printer/testdata/go2numbers.golden | 186 +
libgo/go/go/printer/testdata/go2numbers.input | 186 +
libgo/go/go/printer/testdata/go2numbers.norm | 186 +
libgo/go/go/token/position.go | 23 +-
libgo/go/go/types/api.go | 17 +-
libgo/go/go/types/assignments.go | 2 +-
libgo/go/go/types/builtins.go | 10 +-
libgo/go/go/types/builtins_test.go | 16 +
libgo/go/go/types/call.go | 100 +-
libgo/go/go/types/check.go | 10 +-
libgo/go/go/types/conversions.go | 2 +-
libgo/go/go/types/example_test.go | 11 +
libgo/go/go/types/expr.go | 55 +-
libgo/go/go/types/lookup.go | 28 +-
libgo/go/go/types/methodset.go | 54 +-
libgo/go/go/types/operand.go | 22 +-
libgo/go/go/types/package.go | 1 +
libgo/go/go/types/resolver.go | 5 +-
libgo/go/go/types/stdlib_test.go | 1 +
libgo/go/go/types/testdata/decls3.src | 18 +-
libgo/go/go/types/testdata/decls4.src | 4 +-
libgo/go/go/types/testdata/expr3.src | 4 +-
libgo/go/go/types/testdata/issue28251.src | 4 +-
libgo/go/go/types/testdata/issues.src | 16 +-
libgo/go/go/types/testdata/methodsets.src | 12 +-
libgo/go/go/types/universe.go | 8 +-
.../golang.org/x/crypto/chacha20/chacha_arm64.go | 3 +-
.../golang.org/x/crypto/chacha20/chacha_generic.go | 140 +-
.../golang.org/x/crypto/chacha20/chacha_noasm.go | 2 +-
.../golang.org/x/crypto/chacha20/chacha_ppc64le.go | 2 +-
.../golang.org/x/crypto/chacha20/chacha_s390x.go | 2 +-
libgo/go/golang.org/x/crypto/chacha20/xor.go | 17 +-
.../chacha20poly1305/chacha20poly1305_amd64.go | 2 +-
.../chacha20poly1305/chacha20poly1305_generic.go | 56 +-
.../chacha20poly1305/chacha20poly1305_noasm.go | 2 +-
libgo/go/golang.org/x/crypto/cryptobyte/asn1.go | 6 +-
libgo/go/golang.org/x/crypto/poly1305/mac_noasm.go | 4 +-
libgo/go/golang.org/x/crypto/poly1305/poly1305.go | 26 +-
libgo/go/golang.org/x/crypto/poly1305/sum_amd64.go | 13 +-
libgo/go/golang.org/x/crypto/poly1305/sum_arm.go | 19 -
.../go/golang.org/x/crypto/poly1305/sum_generic.go | 21 +-
libgo/go/golang.org/x/crypto/poly1305/sum_noasm.go | 13 -
.../go/golang.org/x/crypto/poly1305/sum_ppc64le.go | 13 +-
libgo/go/golang.org/x/crypto/poly1305/sum_s390x.go | 72 +-
libgo/go/golang.org/x/mod/modfile/print.go | 25 +-
libgo/go/golang.org/x/mod/modfile/read.go | 319 +-
libgo/go/golang.org/x/mod/modfile/rule.go | 154 +-
libgo/go/golang.org/x/mod/zip/zip.go | 20 +-
.../go/golang.org/x/net/dns/dnsmessage/message.go | 21 +-
libgo/go/golang.org/x/net/http2/hpack/huffman.go | 7 +
libgo/go/golang.org/x/net/route/address.go | 4 +-
libgo/go/golang.org/x/net/route/route.go | 2 +-
libgo/go/golang.org/x/sys/cpu/byteorder.go | 38 +-
libgo/go/golang.org/x/sys/cpu/cpu.go | 45 +
libgo/go/golang.org/x/sys/cpu/cpu_arm.go | 40 +
libgo/go/golang.org/x/sys/cpu/cpu_arm64.go | 138 +
libgo/go/golang.org/x/sys/cpu/cpu_gc_arm64.go | 11 +
libgo/go/golang.org/x/sys/cpu/cpu_gccgo_arm64.go | 11 +
.../x/sys/cpu/{cpu_gccgo.c => cpu_gccgo_x86.c} | 0
.../x/sys/cpu/{cpu_gccgo.go => cpu_gccgo_x86.go} | 0
libgo/go/golang.org/x/sys/cpu/cpu_linux.go | 48 +-
libgo/go/golang.org/x/sys/cpu/cpu_linux_arm.go | 39 +
libgo/go/golang.org/x/sys/cpu/cpu_linux_arm64.go | 6 +
libgo/go/golang.org/x/sys/cpu/cpu_linux_mips64x.go | 22 +
libgo/go/golang.org/x/sys/cpu/cpu_linux_noinit.go | 9 +
libgo/go/golang.org/x/sys/cpu/cpu_linux_ppc64x.go | 2 +
libgo/go/golang.org/x/sys/cpu/cpu_linux_s390x.go | 2 +
libgo/go/golang.org/x/sys/cpu/cpu_mips64x.go | 9 +
libgo/go/golang.org/x/sys/cpu/cpu_mipsx.go | 9 +
.../cpu/{cpu_linux_other.go => cpu_other_arm64.go} | 2 +-
libgo/go/golang.org/x/sys/cpu/cpu_riscv64.go | 2 +
libgo/go/golang.org/x/sys/cpu/cpu_wasm.go | 13 +
libgo/go/golang.org/x/sys/cpu/cpu_x86.go | 2 +
libgo/go/golang.org/x/sys/cpu/hwcap_linux.go | 56 +
libgo/go/golang.org/x/text/unicode/bidi/core.go | 8 +-
.../go/golang.org/x/tools/go/analysis/analysis.go | 16 +
libgo/go/golang.org/x/tools/go/analysis/doc.go | 86 +-
.../go/analysis/internal/analysisflags/flags.go | 2 +-
.../x/tools/go/analysis/passes/cgocall/cgocall.go | 14 +-
.../tools/go/analysis/passes/errorsas/errorsas.go | 2 +-
.../analysis/passes/httpresponse/httpresponse.go | 12 +-
.../go/analysis/passes/ifaceassert/ifaceassert.go | 101 +
.../analysis/passes/internal/analysisutil/util.go | 10 +
.../x/tools/go/analysis/passes/printf/printf.go | 66 +-
.../go/analysis/passes/stringintconv/string.go | 126 +
.../go/analysis/passes/unreachable/unreachable.go | 13 +-
.../golang.org/x/tools/go/ast/astutil/imports.go | 5 +-
.../x/tools/go/ast/inspector/inspector.go | 10 +-
libgo/go/golang.org/x/tools/go/cfg/cfg.go | 2 +-
.../x/tools/go/types/objectpath/objectpath.go | 5 +-
.../x/tools/internal/analysisinternal/analysis.go | 118 +
libgo/go/golang.org/x/xerrors/fmt.go | 138 +-
libgo/go/hash/crc32/crc32_s390x.go | 8 +-
libgo/go/hash/maphash/example_test.go | 37 +
libgo/go/hash/maphash/maphash_test.go | 56 +
libgo/go/html/template/clone_test.go | 2 +-
libgo/go/html/template/content_test.go | 76 +-
libgo/go/html/template/escape_test.go | 8 +-
libgo/go/html/template/example_test.go | 6 +-
libgo/go/html/template/exec_test.go | 1708 +++
libgo/go/html/template/html.go | 3 +-
libgo/go/html/template/js.go | 70 +-
libgo/go/html/template/js_test.go | 68 +-
libgo/go/html/template/multi_test.go | 246 +
libgo/go/html/template/template_test.go | 39 +
libgo/go/html/template/testdata/file1.tmpl | 2 +
libgo/go/html/template/testdata/file2.tmpl | 2 +
libgo/go/html/template/testdata/tmpl1.tmpl | 3 +
libgo/go/html/template/testdata/tmpl2.tmpl | 3 +
libgo/go/image/draw/bench_test.go | 6 +-
libgo/go/image/draw/draw.go | 22 +-
libgo/go/image/draw/draw_test.go | 32 +-
libgo/go/image/geom.go | 35 +
libgo/go/image/gif/writer_test.go | 7 +-
libgo/go/image/image.go | 96 +-
libgo/go/image/image_test.go | 72 +
libgo/go/image/jpeg/reader_test.go | 170 +
libgo/go/image/jpeg/scan.go | 19 +
libgo/go/image/names.go | 1 +
libgo/go/image/png/reader.go | 15 +-
libgo/go/image/png/reader_test.go | 134 +-
libgo/go/image/ycbcr.go | 20 +
libgo/go/internal/bytealg/bytealg.go | 128 +-
libgo/go/internal/bytealg/gccgo.go | 3 -
libgo/go/internal/bytealg/index_generic.go | 38 +-
libgo/go/internal/cfg/cfg.go | 1 +
libgo/go/internal/cpu/cpu.go | 56 +-
libgo/go/internal/cpu/cpu_arm.go | 5 +-
libgo/go/internal/cpu/cpu_arm64.go | 4 +-
libgo/go/internal/cpu/cpu_mips64x.go | 32 +
libgo/go/internal/cpu/cpu_no_init.go | 2 +
libgo/go/internal/cpu/cpu_ppc64x.go | 4 +-
libgo/go/internal/goversion/goversion.go | 2 +-
libgo/go/internal/poll/copy_file_range_linux.go | 99 +
libgo/go/internal/poll/fd.go | 18 +-
libgo/go/internal/poll/fd_mutex_test.go | 12 +-
libgo/go/internal/poll/fd_plan9.go | 33 +-
libgo/go/internal/poll/fd_poll_js.go | 2 +-
libgo/go/internal/poll/fd_poll_runtime.go | 19 +-
libgo/go/internal/poll/fd_posix.go | 20 +
libgo/go/internal/poll/fd_unix.go | 81 +-
libgo/go/internal/poll/fd_windows.go | 149 +-
libgo/go/internal/poll/fd_writev_unix.go | 13 +-
libgo/go/internal/poll/sendfile_bsd.go | 3 +
libgo/go/internal/poll/sendfile_windows.go | 2 +-
libgo/go/internal/poll/splice_linux.go | 3 +
libgo/go/internal/poll/writev.go | 5 +-
.../{runtime/pprof => }/internal/profile/encode.go | 0
.../{runtime/pprof => }/internal/profile/filter.go | 0
.../pprof => }/internal/profile/legacy_profile.go | 0
libgo/go/internal/profile/merge.go | 461 +
.../pprof => }/internal/profile/profile.go | 55 +-
.../pprof => }/internal/profile/profile_test.go | 0
.../{runtime/pprof => }/internal/profile/proto.go | 7 +-
.../pprof => }/internal/profile/proto_test.go | 0
.../{runtime/pprof => }/internal/profile/prune.go | 0
libgo/go/internal/reflectlite/swapper.go | 7 +-
libgo/go/internal/reflectlite/value.go | 18 +-
.../internal/syscall/unix/copy_file_range_linux.go | 26 +
libgo/go/internal/syscall/unix/getrandom_linux.go | 2 +-
...{getrandom_linux_arm.go => sysnum_linux_386.go} | 7 +-
...random_linux_amd64.go => sysnum_linux_amd64.go} | 7 +-
...{getrandom_linux_386.go => sysnum_linux_arm.go} | 7 +-
...om_linux_generic.go => sysnum_linux_generic.go} | 15 +-
...om_linux_mips64x.go => sysnum_linux_mips64x.go} | 7 +-
...random_linux_mipsx.go => sysnum_linux_mipsx.go} | 7 +-
...ndom_linux_ppc64x.go => sysnum_linux_ppc64x.go} | 9 +-
...random_linux_s390x.go => sysnum_linux_s390x.go} | 7 +-
.../go/internal/syscall/windows/syscall_windows.go | 17 +-
libgo/go/internal/testenv/testenv.go | 6 +-
libgo/go/internal/trace/writer.go | 4 +
libgo/go/internal/unsafeheader/unsafeheader.go | 37 +
.../go/internal/unsafeheader/unsafeheader_test.go | 100 +
libgo/go/internal/xcoff/file.go | 8 +-
libgo/go/io/example_test.go | 47 +-
libgo/go/io/io.go | 4 +
libgo/go/io/io_test.go | 3 +
libgo/go/io/ioutil/export_test.go | 7 +
libgo/go/io/ioutil/ioutil.go | 2 +-
libgo/go/io/ioutil/ioutil_test.go | 3 +-
libgo/go/io/ioutil/tempfile.go | 19 +-
libgo/go/io/ioutil/tempfile_test.go | 82 +-
libgo/go/log/syslog/syslog_test.go | 4 +-
libgo/go/math/all_test.go | 4 +
libgo/go/math/arith_s390x.go | 8 +-
libgo/go/math/big/arith_decl.go | 2 +-
libgo/go/math/big/arith_decl_pure.go | 2 +-
libgo/go/math/big/arith_decl_s390x.go | 11 +-
libgo/go/math/big/arith_s390x_test.go | 12 -
libgo/go/math/big/float.go | 4 +-
libgo/go/math/big/floatconv.go | 2 +-
libgo/go/math/big/int.go | 19 +-
libgo/go/math/big/int_test.go | 54 +
libgo/go/math/big/link_test.go | 63 +
libgo/go/math/big/nat.go | 15 +-
libgo/go/math/big/sqrt.go | 77 +-
libgo/go/math/bits/bits_test.go | 124 +
libgo/go/math/cmplx/abs.go | 3 +-
libgo/go/math/cmplx/asin.go | 70 +-
libgo/go/math/cmplx/cmath_test.go | 937 +-
libgo/go/math/cmplx/exp.go | 17 +
libgo/go/math/cmplx/huge_test.go | 22 +
libgo/go/math/cmplx/log.go | 3 +-
libgo/go/math/cmplx/sin.go | 52 +
libgo/go/math/cmplx/sqrt.go | 4 +-
libgo/go/math/cmplx/tan.go | 139 +-
libgo/go/math/example_test.go | 19 +
libgo/go/math/huge_test.go | 16 +
libgo/go/math/trig_reduce.go | 16 +-
libgo/go/mime/type.go | 8 +-
libgo/go/mime/type_test.go | 27 +
libgo/go/net/dial.go | 3 +-
libgo/go/net/dial_test.go | 17 +-
libgo/go/net/dnsclient_test.go | 2 +-
libgo/go/net/dnsclient_unix.go | 8 +-
libgo/go/net/dnsclient_unix_test.go | 15 +-
libgo/go/net/error_test.go | 10 +-
libgo/go/net/fd_posix.go | 100 +
libgo/go/net/fd_unix.go | 94 +-
libgo/go/net/fd_windows.go | 96 +-
libgo/go/net/http/cgi/child.go | 2 -
libgo/go/net/http/cgi/host.go | 39 +-
libgo/go/net/http/client.go | 21 +-
libgo/go/net/http/client_test.go | 35 +
libgo/go/net/http/cookie.go | 11 +-
libgo/go/net/http/fs.go | 16 +-
libgo/go/net/http/h2_bundle.go | 75 +-
libgo/go/net/http/http.go | 5 +
libgo/go/net/http/httptest/recorder.go | 7 +-
libgo/go/net/http/httptest/recorder_test.go | 36 +
libgo/go/net/http/httputil/reverseproxy.go | 58 +-
libgo/go/net/http/httputil/reverseproxy_test.go | 195 +-
libgo/go/net/http/omithttp2.go | 2 +-
libgo/go/net/http/pprof/pprof.go | 107 +-
libgo/go/net/http/pprof/pprof_test.go | 177 +
libgo/go/net/http/proxy_test.go | 2 +-
libgo/go/net/http/request.go | 17 +-
libgo/go/net/http/response.go | 8 +-
libgo/go/net/http/response_test.go | 1 +
libgo/go/net/http/roundtrip_js.go | 35 +-
libgo/go/net/http/serve_test.go | 154 +-
libgo/go/net/http/server.go | 27 +-
libgo/go/net/http/transfer.go | 139 +-
libgo/go/net/http/transfer_test.go | 58 +-
libgo/go/net/http/transport.go | 89 +-
libgo/go/net/http/transport_test.go | 86 +-
libgo/go/net/interface_plan9.go | 4 +-
libgo/go/net/interface_windows.go | 2 +-
libgo/go/net/ip.go | 4 +-
libgo/go/net/ipsock_plan9.go | 80 +-
libgo/go/net/ipsock_plan9_test.go | 29 +
libgo/go/net/lookup.go | 25 +
libgo/go/net/lookup_test.go | 91 +-
libgo/go/net/lookup_windows.go | 8 +-
libgo/go/net/mail/message.go | 9 +
libgo/go/net/mail/message_test.go | 14 +
libgo/go/net/net.go | 75 +-
libgo/go/net/net_test.go | 542 +-
libgo/go/net/pipe.go | 15 +-
libgo/go/net/platform_test.go | 6 +-
libgo/go/net/rawconn_test.go | 8 +-
libgo/go/net/rpc/client.go | 2 +-
libgo/go/net/rpc/jsonrpc/all_test.go | 4 +-
libgo/go/net/sockopt_aix.go | 7 +-
libgo/go/net/sockopt_bsd.go | 7 +-
libgo/go/net/sockopt_linux.go | 7 +-
libgo/go/net/sockopt_solaris.go | 7 +-
libgo/go/net/sockopt_windows.go | 6 +-
libgo/go/net/textproto/pipeline.go | 11 +-
libgo/go/net/textproto/reader.go | 4 +-
libgo/go/net/timeout_test.go | 60 +-
libgo/go/net/unixsock_test.go | 4 +-
libgo/go/net/url/url.go | 83 +-
libgo/go/net/url/url_test.go | 99 +-
libgo/go/os/error.go | 20 +-
libgo/go/os/exec/exec_linux_test.go | 45 +
libgo/go/os/exec/exec_test.go | 106 +-
libgo/go/os/exec/read3.go | 99 +
libgo/go/os/exec_unix.go | 15 +-
libgo/go/os/exec_windows.go | 2 +-
libgo/go/os/export_linux_test.go | 7 +
libgo/go/os/file.go | 34 +-
libgo/go/os/file_plan9.go | 16 +-
libgo/go/os/file_posix.go | 45 +
libgo/go/os/file_unix.go | 75 +-
libgo/go/os/issue37161/a | 1 +
libgo/go/os/issue37161/b | 1 +
libgo/go/os/issue37161/c | 1 +
libgo/go/os/os_test.go | 111 +-
libgo/go/os/os_unix_test.go | 2 +-
libgo/go/os/os_windows_test.go | 119 +-
libgo/go/os/path_test.go | 4 +-
libgo/go/os/pipe_test.go | 19 +
libgo/go/os/readfrom_linux.go | 46 +
libgo/go/os/readfrom_linux_test.go | 363 +
libgo/go/os/readfrom_stub.go | 13 +
libgo/go/os/removeall_at.go | 3 +-
libgo/go/os/signal/internal/pty/pty.go | 8 +-
libgo/go/os/signal/signal.go | 14 +-
libgo/go/os/signal/signal_cgo_test.go | 46 +-
libgo/go/os/signal/signal_plan9.go | 4 +-
libgo/go/os/signal/signal_test.go | 427 +-
libgo/go/os/signal/signal_unix.go | 2 -
libgo/go/os/testdata/issue37161/a | 1 +
libgo/go/os/testdata/issue37161/b | 1 +
libgo/go/os/testdata/issue37161/c | 1 +
libgo/go/os/timeout_test.go | 31 +-
libgo/go/os/user/lookup_windows.go | 4 +-
libgo/go/os/wait_wait6.go | 23 +-
libgo/go/os/wait_waitid.go | 12 +-
libgo/go/path/filepath/match.go | 6 +-
libgo/go/path/filepath/path_test.go | 16 +-
libgo/go/reflect/all_test.go | 323 +-
libgo/go/reflect/swapper.go | 7 +-
libgo/go/reflect/value.go | 118 +-
libgo/go/regexp/all_test.go | 42 +-
libgo/go/regexp/example_test.go | 13 +
libgo/go/regexp/regexp.go | 18 +
libgo/go/regexp/syntax/compile.go | 68 +-
libgo/go/regexp/syntax/parse.go | 16 +-
libgo/go/runtime/callers_test.go | 2 +
libgo/go/runtime/chan.go | 80 +-
libgo/go/runtime/chan_test.go | 14 +
libgo/go/runtime/checkptr.go | 8 +-
libgo/go/runtime/checkptr_test.go | 8 +-
libgo/go/runtime/conv_wasm_test.go | 128 +
libgo/go/runtime/crash_cgo_test.go | 53 +-
libgo/go/runtime/crash_unix_test.go | 7 +
libgo/go/runtime/debug.go | 4 +-
libgo/go/runtime/debug/mod.go | 51 +-
libgo/go/runtime/debuglog.go | 21 +-
libgo/go/runtime/defer_test.go | 27 +-
libgo/go/runtime/env_posix.go | 2 +-
libgo/go/runtime/env_test.go | 4 -
libgo/go/runtime/error.go | 51 +-
libgo/go/runtime/export_debug_test.go | 12 +-
libgo/go/runtime/export_test.go | 34 +-
libgo/go/runtime/extern.go | 15 +-
libgo/go/runtime/gc_test.go | 117 +
libgo/go/runtime/hash_test.go | 8 +-
libgo/go/runtime/iface.go | 5 +-
libgo/go/runtime/iface_test.go | 66 +-
libgo/go/runtime/lock_futex.go | 12 +-
libgo/go/runtime/lock_js.go | 19 +-
libgo/go/runtime/lock_sema.go | 14 +-
libgo/go/runtime/lockrank.go | 254 +
libgo/go/runtime/lockrank_off.go | 32 +
libgo/go/runtime/lockrank_on.go | 210 +
libgo/go/runtime/malloc.go | 86 +-
libgo/go/runtime/map.go | 2 +-
libgo/go/runtime/map_benchmark_test.go | 19 +
libgo/go/runtime/mbarrier.go | 30 +-
libgo/go/runtime/mbitmap.go | 60 +-
libgo/go/runtime/mcache.go | 6 +-
libgo/go/runtime/mcentral.go | 259 +-
libgo/go/runtime/mgc.go | 43 +-
libgo/go/runtime/mgcmark.go | 155 +-
libgo/go/runtime/mgcscavenge.go | 389 +-
libgo/go/runtime/mgcscavenge_test.go | 6 +-
libgo/go/runtime/mgcsweep.go | 433 +-
libgo/go/runtime/mgcsweepbuf.go | 2 +-
libgo/go/runtime/mgcwork.go | 8 +
libgo/go/runtime/mheap.go | 192 +-
libgo/go/runtime/mkpreempt.go | 29 +-
libgo/go/runtime/mpagealloc.go | 185 +-
libgo/go/runtime/mpagealloc_64bit.go | 12 +-
libgo/go/runtime/mpagecache.go | 14 +-
libgo/go/runtime/mprof.go | 41 +-
libgo/go/runtime/mranges.go | 186 +-
libgo/go/runtime/msize.go | 4 +-
libgo/go/runtime/mspanset.go | 358 +
libgo/go/runtime/mstats.go | 11 +-
libgo/go/runtime/mwbbuf.go | 7 +
libgo/go/runtime/netpoll.go | 64 +-
libgo/go/runtime/netpoll_aix.go | 15 +-
libgo/go/runtime/netpoll_epoll.go | 36 +-
libgo/go/runtime/netpoll_kqueue.go | 32 +-
libgo/go/runtime/netpoll_os_test.go | 28 +
libgo/go/runtime/netpoll_solaris.go | 30 +-
libgo/go/runtime/netpoll_stub.go | 3 +
libgo/go/runtime/netpoll_windows.go | 103 +-
libgo/go/runtime/os_linux_mips64x.go | 6 +
libgo/go/runtime/panic_test.go | 48 +
libgo/go/runtime/pprof/label.go | 23 +-
libgo/go/runtime/pprof/label_test.go | 32 +
libgo/go/runtime/pprof/mprof_test.go | 2 +-
libgo/go/runtime/pprof/pprof.go | 64 +-
libgo/go/runtime/pprof/pprof_norusage.go | 15 +
libgo/go/runtime/pprof/pprof_rusage.go | 31 +
libgo/go/runtime/pprof/pprof_test.go | 247 +-
libgo/go/runtime/pprof/proto.go | 2 +-
libgo/go/runtime/pprof/proto_test.go | 2 +-
libgo/go/runtime/pprof/protomem_test.go | 2 +-
libgo/go/runtime/preempt.go | 22 +-
libgo/go/runtime/print.go | 54 +
libgo/go/runtime/proc.go | 270 +-
libgo/go/runtime/proc_test.go | 25 +
libgo/go/runtime/runtime1.go | 5 -
libgo/go/runtime/runtime2.go | 48 +-
libgo/go/runtime/rwmutex.go | 10 +-
libgo/go/runtime/select.go | 7 +-
libgo/go/runtime/sema.go | 10 +-
libgo/go/runtime/sema_test.go | 8 +-
libgo/go/runtime/signal_unix.go | 62 +-
libgo/go/runtime/signal_windows_test.go | 91 +
libgo/go/runtime/sigqueue.go | 9 +-
libgo/go/runtime/sizeof_test.go | 3 +-
libgo/go/runtime/slice.go | 55 +-
libgo/go/runtime/slice_test.go | 78 +
libgo/go/runtime/string.go | 13 +-
libgo/go/runtime/string_test.go | 4 +-
libgo/go/runtime/stubs.go | 2 +-
libgo/go/runtime/symtab.go | 4 +-
libgo/go/runtime/testdata/testprog/gc.go | 52 +-
libgo/go/runtime/testdata/testprog/lockosthread.go | 6 +-
.../go/runtime/testdata/testprog/numcpu_freebsd.go | 8 +-
libgo/go/runtime/testdata/testprog/panicprint.go | 111 +
libgo/go/runtime/testdata/testprogcgo/eintr.go | 246 +
libgo/go/runtime/testdata/testprogcgo/segv.go | 56 +
.../go/runtime/testdata/testwinlibsignal/dummy.go | 10 +
libgo/go/runtime/time.go | 37 +-
libgo/go/runtime/trace.go | 30 +-
libgo/go/runtime/trace/trace.go | 2 +-
libgo/go/runtime/trace/trace_stack_test.go | 2 +
libgo/go/runtime/type.go | 19 +-
libgo/go/strconv/atoc.go | 105 +
libgo/go/strconv/atoc_test.go | 202 +
libgo/go/strconv/atof.go | 156 +-
libgo/go/strconv/atof_test.go | 22 +
libgo/go/strconv/atoi.go | 6 +-
libgo/go/strconv/ctoa.go | 27 +
libgo/go/strconv/extfloat.go | 24 +-
libgo/go/strconv/internal_test.go | 4 +
libgo/go/strconv/quote_test.go | 66 +-
libgo/go/strings/strings.go | 157 +-
libgo/go/strings/strings_test.go | 58 +-
libgo/go/sync/atomic/atomic_test.go | 68 +-
libgo/go/sync/atomic/doc.go | 5 -
libgo/go/sync/atomic/value_test.go | 8 +-
libgo/go/sync/map.go | 25 +-
libgo/go/sync/map_bench_test.go | 74 +
libgo/go/sync/map_reference_test.go | 23 +
libgo/go/sync/map_test.go | 13 +-
libgo/go/sync/runtime.go | 10 -
libgo/go/sync/runtime2.go | 15 +
libgo/go/sync/runtime2_lockrank.go | 18 +
libgo/go/sync/rwmutex_test.go | 2 +
libgo/go/syscall/env_plan9.go | 122 -
libgo/go/syscall/env_unix.go | 16 +-
libgo/go/syscall/exec_bsd.go | 23 +-
libgo/go/syscall/exec_darwin.go | 23 +-
libgo/go/syscall/exec_linux.go | 47 +-
libgo/go/syscall/exec_unix.go | 20 +-
libgo/go/syscall/exec_unix_test.go | 28 +
libgo/go/syscall/fs_js.go | 10 +-
libgo/go/syscall/js/func.go | 26 +-
libgo/go/syscall/js/js.go | 12 +-
libgo/go/syscall/js/js_test.go | 11 +
libgo/go/syscall/security_windows.go | 2 +-
libgo/go/syscall/syscall_unix.go | 16 +-
libgo/go/syscall/syscall_unix_test.go | 2 +-
libgo/go/testing/helper_test.go | 2 +
libgo/go/testing/helperfuncs_test.go | 11 +
libgo/go/testing/testing.go | 170 +-
libgo/go/testing/testing_test.go | 62 +
libgo/go/text/template/exec_test.go | 6 +-
libgo/go/text/template/funcs.go | 217 +-
libgo/go/text/template/link_test.go | 64 +
libgo/go/text/template/multi_test.go | 3 +-
libgo/go/text/template/parse/node.go | 2 +-
libgo/go/text/template/template.go | 2 +-
libgo/go/time/embed.go | 12 +
libgo/go/time/example_test.go | 113 +-
libgo/go/time/export_test.go | 35 +
libgo/go/time/format.go | 24 +-
libgo/go/time/format_test.go | 20 +-
libgo/go/time/internal_test.go | 13 +-
libgo/go/time/sleep.go | 7 +-
libgo/go/time/tick.go | 9 +
libgo/go/time/tick_test.go | 36 +-
libgo/go/time/time.go | 153 +-
libgo/go/time/time_test.go | 149 +-
libgo/go/time/tzdata/generate_zipdata.go | 78 +
libgo/go/time/tzdata/tzdata.go | 109 +
libgo/go/time/tzdata/zipdata.go | 13060 +++++++++++++++++++
libgo/go/time/tzdata_test.go | 99 +
libgo/go/time/zoneinfo.go | 348 +
libgo/go/time/zoneinfo_ios.go | 2 +-
libgo/go/time/zoneinfo_read.go | 40 +-
libgo/go/time/zoneinfo_test.go | 94 +
libgo/go/time/zoneinfo_unix.go | 4 +-
libgo/go/unicode/utf8/utf8.go | 28 +
libgo/gotool-packages.txt | 3 +
libgo/libgo-packages.txt | 4 +-
libgo/misc/cgo/test/pkg_test.go | 2 +-
libgo/misc/cgo/test/sigaltstack.go | 15 +-
libgo/misc/cgo/test/test.go | 12 +
libgo/misc/cgo/test/testdata/issue27054/egl.h | 1 +
.../misc/cgo/test/testdata/issue27054/test27054.go | 6 +-
libgo/misc/cgo/test/testx.go | 2 +-
libgo/misc/cgo/testcarchive/carchive_test.go | 8 +-
libgo/misc/cgo/testcshared/cshared_test.go | 2 +-
libgo/misc/cgo/testgodefs/testdata/issue38649.go | 15 +
libgo/misc/cgo/testgodefs/testdata/issue39534.go | 12 +
libgo/misc/cgo/testgodefs/testdata/main.go | 3 +
libgo/misc/cgo/testgodefs/testgodefs_test.go | 2 +
libgo/misc/cgo/testplugin/plugin_test.go | 2 +-
libgo/misc/cgo/testshared/shared_test.go | 30 +-
.../cgo/testshared/testdata/gcdata/main/main.go | 37 +
libgo/misc/cgo/testshared/testdata/gcdata/p/p.go | 7 +
.../misc/cgo/testshared/testdata/issue39777/a/a.go | 9 +
.../misc/cgo/testshared/testdata/issue39777/b/b.go | 7 +
libgo/misc/cgo/testso/so_test.go | 6 +-
libgo/misc/cgo/testsovar/so_test.go | 6 +-
libiberty/ChangeLog | 5 +
libiberty/configure | 21 +-
libiberty/simple-object-elf.c | 5 +
libstdc++-v3/ChangeLog | 643 +
libstdc++-v3/doc/html/manual/status.html | 2 +-
libstdc++-v3/doc/html/manual/using_exceptions.html | 2 +-
libstdc++-v3/doc/xml/manual/status_cxx2017.xml | 2 +-
libstdc++-v3/doc/xml/manual/using_exceptions.xml | 2 +-
libstdc++-v3/include/bits/basic_string.h | 4 +-
libstdc++-v3/include/bits/hashtable.h | 40 +-
libstdc++-v3/include/bits/hashtable_policy.h | 92 +-
libstdc++-v3/include/bits/iterator_concepts.h | 8 +-
libstdc++-v3/include/bits/stl_bvector.h | 140 +-
libstdc++-v3/include/bits/stl_iterator.h | 2 -
libstdc++-v3/include/bits/unordered_map.h | 2 +
libstdc++-v3/include/bits/unordered_set.h | 2 +
libstdc++-v3/include/debug/unordered_map | 22 +-
libstdc++-v3/include/debug/unordered_set | 30 +-
libstdc++-v3/python/libstdcxx/v6/printers.py | 5 +-
libstdc++-v3/src/c++17/floating_from_chars.cc | 10 +-
.../17_intro/headers/c++2017/all_attributes.cc | 2 +-
.../17_intro/headers/c++2017/all_no_exceptions.cc | 2 +-
.../17_intro/headers/c++2017/all_no_rtti.cc | 2 +-
.../headers/c++2017/all_pedantic_errors.cc | 2 +-
.../17_intro/headers/c++2017/operator_names.cc | 2 +-
.../testsuite/17_intro/headers/c++2017/stdc++.cc | 2 +-
.../headers/c++2017/stdc++_multiple_inclusion.cc | 2 +-
libstdc++-v3/testsuite/18_support/set_terminate.cc | 2 +-
.../uncaught_exceptions/uncaught_exceptions.cc | 1 +
.../19_diagnostics/error_code/is_error_code_v.cc | 2 +-
libstdc++-v3/testsuite/20_util/any/assign/1.cc | 2 +-
libstdc++-v3/testsuite/20_util/any/assign/2.cc | 2 +-
.../testsuite/20_util/any/assign/emplace.cc | 2 +-
.../testsuite/20_util/any/assign/exception.cc | 2 +-
libstdc++-v3/testsuite/20_util/any/assign/self.cc | 1 +
libstdc++-v3/testsuite/20_util/any/cons/1.cc | 2 +-
libstdc++-v3/testsuite/20_util/any/cons/2.cc | 2 +-
libstdc++-v3/testsuite/20_util/any/cons/aligned.cc | 1 +
.../testsuite/20_util/any/cons/explicit.cc | 2 +-
.../testsuite/20_util/any/cons/in_place.cc | 2 +-
.../testsuite/20_util/any/cons/nontrivial.cc | 1 +
libstdc++-v3/testsuite/20_util/any/make_any.cc | 2 +-
.../testsuite/20_util/any/misc/any_cast.cc | 2 +-
.../testsuite/20_util/any/misc/any_cast_no_rtti.cc | 2 +-
libstdc++-v3/testsuite/20_util/any/misc/swap.cc | 2 +-
libstdc++-v3/testsuite/20_util/any/modifiers/1.cc | 2 +-
.../testsuite/20_util/any/observers/type.cc | 2 +-
libstdc++-v3/testsuite/20_util/any/requirements.cc | 2 +-
libstdc++-v3/testsuite/20_util/any/typedefs.cc | 2 +-
libstdc++-v3/testsuite/20_util/as_const/1.cc | 2 +-
.../testsuite/20_util/as_const/rvalue_neg.cc | 2 +-
libstdc++-v3/testsuite/20_util/assume_aligned/3.cc | 2 +-
.../testsuite/20_util/bind/is_placeholder_v.cc | 2 +-
.../20_util/bool_constant/requirements.cc | 2 +-
.../requirements/treat_as_floating_point_v.cc | 2 +-
.../testsuite/20_util/duration_cast/rounding.cc | 2 +-
.../members/weak_from_this.cc | 1 +
libstdc++-v3/testsuite/20_util/from_chars/4.cc | 3 +-
.../20_util/function_objects/invoke/59768.cc | 2 +-
.../testsuite/20_util/function_objects/not_fn/1.cc | 1 +
.../20_util/function_objects/searchers.cc | 1 +
.../testsuite/20_util/in_place/requirements.cc | 2 +-
.../testsuite/20_util/is_aggregate/value.cc | 15 +-
.../requirements/explicit_instantiation.cc | 2 +-
.../20_util/is_invocable/requirements/typedefs.cc | 2 +-
.../testsuite/20_util/is_invocable/value.cc | 2 +-
.../requirements/explicit_instantiation.cc | 2 +-
.../is_nothrow_invocable/requirements/typedefs.cc | 2 +-
.../requirements/explicit_instantiation.cc | 2 +-
.../is_nothrow_swappable/requirements/typedefs.cc | 2 +-
.../20_util/is_nothrow_swappable/value.cc | 2 +-
.../requirements/explicit_instantiation.cc | 2 +-
.../requirements/typedefs.cc | 2 +-
.../20_util/is_nothrow_swappable_with/value.cc | 2 +-
.../requirements/explicit_instantiation.cc | 2 +-
.../20_util/is_swappable/requirements/typedefs.cc | 2 +-
.../testsuite/20_util/is_swappable/value.cc | 2 +-
.../requirements/explicit_instantiation.cc | 2 +-
.../is_swappable_with/requirements/typedefs.cc | 2 +-
.../testsuite/20_util/is_swappable_with/value.cc | 2 +-
.../requirements/explicit_instantiation.cc | 2 +-
.../logical_traits/requirements/typedefs.cc | 2 +-
.../testsuite/20_util/logical_traits/value.cc | 2 +-
.../20_util/optional/constexpr/make_optional.cc | 1 +
.../20_util/optional/constexpr/observers/2.cc | 1 +
.../20_util/optional/constexpr/observers/3.cc | 1 +
libstdc++-v3/testsuite/20_util/optional/hash.cc | 1 +
.../testsuite/20_util/optional/requirements.cc | 3 +
libstdc++-v3/testsuite/20_util/pair/swap_cxx17.cc | 2 +-
.../20_util/ratio/requirements/ratio_equal_v.cc | 2 +-
.../testsuite/20_util/reference_wrapper/83427.cc | 2 +-
.../20_util/shared_ptr/requirements/weak_type.cc | 2 +-
.../memory_management_tools/1.cc | 1 +
.../uninitialized_fill_n/sizes.cc | 18 +-
.../testsuite/20_util/time_point_cast/rounding.cc | 4 +-
libstdc++-v3/testsuite/20_util/tuple/78939.cc | 5 +-
libstdc++-v3/testsuite/20_util/tuple/apply/1.cc | 1 +
.../testsuite/20_util/tuple/make_from_tuple/1.cc | 1 +
libstdc++-v3/testsuite/20_util/tuple/swap_cxx17.cc | 2 +-
.../testsuite/20_util/tuple/tuple_size_v.cc | 2 +-
.../specialized_algorithms/swap_cxx17.cc | 2 +-
.../requirements/uses_allocator_v.cc | 2 +-
.../20_util/variable_templates_for_traits.cc | 4 +-
libstdc++-v3/testsuite/20_util/variant/any.cc | 2 +-
libstdc++-v3/testsuite/20_util/variant/compile.cc | 2 +-
libstdc++-v3/testsuite/20_util/variant/hash.cc | 1 +
.../testsuite/20_util/variant/index_type.cc | 1 +
libstdc++-v3/testsuite/20_util/variant/run.cc | 2 +-
libstdc++-v3/testsuite/20_util/void_t/1.cc | 2 +-
.../testsuite/21_strings/basic_string/79162.cc | 2 +-
.../21_strings/basic_string/cons/char/7.cc | 1 +
.../21_strings/basic_string/cons/wchar_t/7.cc | 1 +
.../testsuite/21_strings/basic_string/lwg2758.cc | 2 +-
.../testsuite/21_strings/basic_string/lwg2946.cc | 2 +-
.../basic_string/modifiers/append/char/4.cc | 1 +
.../basic_string/modifiers/append/wchar_t/4.cc | 1 +
.../basic_string/modifiers/assign/char/4.cc | 1 +
.../basic_string/modifiers/assign/wchar_t/4.cc | 1 +
.../basic_string/modifiers/insert/char/3.cc | 1 +
.../basic_string/modifiers/insert/wchar_t/3.cc | 1 +
.../basic_string/modifiers/replace/char/7.cc | 1 +
.../basic_string/modifiers/replace/wchar_t/7.cc | 1 +
.../basic_string/operations/compare/char/2.cc | 1 +
.../basic_string/operations/compare/wchar_t/2.cc | 1 +
.../basic_string/operations/data/char/2.cc | 1 +
.../basic_string/operations/data/wchar_t/2.cc | 1 +
.../basic_string/operations/find/char/5.cc | 1 +
.../basic_string/operations/find/wchar_t/5.cc | 1 +
.../21_strings/basic_string/operators/char/5.cc | 1 +
.../21_strings/basic_string/operators/wchar_t/5.cc | 1 +
.../21_strings/basic_string_view/capacity/1.cc | 1 +
.../21_strings/basic_string_view/cons/char/1.cc | 1 +
.../21_strings/basic_string_view/cons/char/2.cc | 1 +
.../21_strings/basic_string_view/cons/char/3.cc | 1 +
.../21_strings/basic_string_view/cons/wchar_t/1.cc | 1 +
.../21_strings/basic_string_view/cons/wchar_t/2.cc | 1 +
.../21_strings/basic_string_view/cons/wchar_t/3.cc | 1 +
.../basic_string_view/element_access/char/1.cc | 1 +
.../basic_string_view/element_access/char/2.cc | 3 +-
.../basic_string_view/element_access/char/empty.cc | 1 +
.../element_access/char/front_back.cc | 1 +
.../basic_string_view/element_access/wchar_t/1.cc | 1 +
.../basic_string_view/element_access/wchar_t/2.cc | 3 +-
.../element_access/wchar_t/empty.cc | 1 +
.../element_access/wchar_t/front_back.cc | 1 +
.../21_strings/basic_string_view/include.cc | 2 +-
.../basic_string_view/inserters/char/1.cc | 1 +
.../basic_string_view/inserters/char/2.cc | 1 +
.../basic_string_view/inserters/char/3.cc | 1 +
.../basic_string_view/inserters/pod/10081-out.cc | 1 +
.../basic_string_view/inserters/wchar_t/1.cc | 1 +
.../basic_string_view/inserters/wchar_t/2.cc | 1 +
.../basic_string_view/inserters/wchar_t/3.cc | 1 +
.../basic_string_view/literals/types-char8_t.cc | 2 +-
.../21_strings/basic_string_view/literals/types.cc | 2 +-
.../basic_string_view/literals/values-char8_t.cc | 1 +
.../basic_string_view/literals/values.cc | 1 +
.../modifiers/remove_prefix/char/1.cc | 1 +
.../modifiers/remove_prefix/wchar_t/1.cc | 1 +
.../modifiers/remove_suffix/char/1.cc | 1 +
.../modifiers/remove_suffix/wchar_t/1.cc | 1 +
.../basic_string_view/operations/compare/char/1.cc | 1 +
.../operations/compare/char/13650.cc | 1 +
.../operations/compare/wchar_t/1.cc | 1 +
.../operations/compare/wchar_t/13650.cc | 1 +
.../basic_string_view/operations/copy/char/1.cc | 1 +
.../basic_string_view/operations/copy/wchar_t/1.cc | 1 +
.../basic_string_view/operations/data/char/1.cc | 1 +
.../basic_string_view/operations/data/wchar_t/1.cc | 1 +
.../basic_string_view/operations/find/char/1.cc | 1 +
.../basic_string_view/operations/find/char/2.cc | 1 +
.../basic_string_view/operations/find/char/3.cc | 1 +
.../basic_string_view/operations/find/char/4.cc | 1 +
.../basic_string_view/operations/find/wchar_t/1.cc | 1 +
.../basic_string_view/operations/find/wchar_t/2.cc | 1 +
.../basic_string_view/operations/find/wchar_t/3.cc | 1 +
.../basic_string_view/operations/find/wchar_t/4.cc | 1 +
.../basic_string_view/operations/rfind/char/1.cc | 1 +
.../basic_string_view/operations/rfind/char/2.cc | 1 +
.../basic_string_view/operations/rfind/char/3.cc | 1 +
.../operations/rfind/wchar_t/1.cc | 1 +
.../operations/rfind/wchar_t/2.cc | 1 +
.../operations/rfind/wchar_t/3.cc | 1 +
.../operations/string_conversion/1.cc | 1 +
.../basic_string_view/operations/substr/char/1.cc | 1 +
.../operations/substr/wchar_t/1.cc | 1 +
.../basic_string_view/range_access/char/1.cc | 2 +-
.../basic_string_view/range_access/wchar_t/1.cc | 2 +-
.../requirements/explicit_instantiation/1.cc | 2 +-
.../requirements/explicit_instantiation/char/1.cc | 2 +-
.../explicit_instantiation/char16_t/1.cc | 2 +-
.../explicit_instantiation/char32_t/1.cc | 2 +-
.../explicit_instantiation/char8_t/1.cc | 2 +-
.../explicit_instantiation/wchar_t/1.cc | 2 +-
.../basic_string_view/requirements/typedefs.cc | 2 +-
.../21_strings/basic_string_view/typedefs.cc | 2 +-
.../21_strings/basic_string_view/types/1.cc | 2 +-
.../array/specialized_algorithms/swap_cxx17.cc | 2 +-
.../23_containers/map/modifiers/extract.cc | 1 +
.../map/modifiers/insert_or_assign/1.cc | 1 +
.../testsuite/23_containers/map/modifiers/merge.cc | 1 +
.../23_containers/map/modifiers/try_emplace/1.cc | 1 +
.../23_containers/multimap/modifiers/extract.cc | 1 +
.../23_containers/multimap/modifiers/merge.cc | 1 +
.../23_containers/multiset/modifiers/extract.cc | 1 +
.../23_containers/multiset/modifiers/merge.cc | 1 +
.../23_containers/set/modifiers/extract.cc | 1 +
.../testsuite/23_containers/set/modifiers/merge.cc | 1 +
.../23_containers/span/back_assert_neg.cc | 3 +-
.../23_containers/span/first_2_assert_neg.cc | 3 +-
.../23_containers/span/first_assert_neg.cc | 3 +-
.../23_containers/span/front_assert_neg.cc | 3 +-
.../23_containers/span/index_op_assert_neg.cc | 3 +-
.../23_containers/span/last_2_assert_neg.cc | 3 +-
.../23_containers/span/last_assert_neg.cc | 3 +-
.../23_containers/span/subspan_2_assert_neg.cc | 3 +-
.../23_containers/span/subspan_3_assert_neg.cc | 3 +-
.../23_containers/span/subspan_4_assert_neg.cc | 3 +-
.../23_containers/span/subspan_5_assert_neg.cc | 3 +-
.../23_containers/span/subspan_6_assert_neg.cc | 3 +-
.../23_containers/span/subspan_assert_neg.cc | 3 +-
.../unordered_map/allocator/default_init.cc | 69 +
.../cons/noexcept_default_construct.cc | 68 +
.../unordered_map/cons/noexcept_move_construct.cc | 65 +
.../unordered_map/modifiers/extract.cc | 1 +
.../unordered_map/modifiers/insert_or_assign.cc | 1 +
.../23_containers/unordered_map/modifiers/merge.cc | 1 +
.../unordered_map/modifiers/move_assign.cc | 81 +
.../unordered_map/modifiers/try_emplace.cc | 1 +
.../cons/noexcept_default_construct.cc | 68 +
.../cons/noexcept_move_construct.cc | 65 +
.../unordered_multimap/modifiers/extract.cc | 1 +
.../unordered_multimap/modifiers/merge.cc | 1 +
.../cons/noexcept_default_construct.cc | 68 +
.../cons/noexcept_move_construct.cc | 65 +
.../unordered_multiset/modifiers/extract.cc | 1 +
.../unordered_multiset/modifiers/merge.cc | 1 +
.../unordered_set/allocator/default_init.cc | 69 +
.../cons/noexcept_default_construct.cc | 68 +
.../unordered_set/cons/noexcept_move_construct.cc | 65 +
.../unordered_set/modifiers/extract.cc | 1 +
.../23_containers/unordered_set/modifiers/merge.cc | 1 +
.../testsuite/23_containers/vector/bool/72847.cc | 2 +-
.../23_containers/vector/bool/allocator/swap.cc | 22 +-
.../vector/bool/cons/noexcept_move_construct.cc | 32 +-
.../headers/iterator/range_access_c++11.cc | 2 +-
.../headers/iterator/range_access_c++14.cc | 2 +-
.../headers/iterator/range_access_c++17.cc | 2 +-
.../24_iterators/headers/iterator/synopsis.cc | 2 +-
.../headers/iterator/synopsis_c++11.cc | 2 +-
.../headers/iterator/synopsis_c++14.cc | 2 +-
.../headers/iterator/synopsis_c++17.cc | 2 +-
libstdc++-v3/testsuite/25_algorithms/clamp/1.cc | 1 +
libstdc++-v3/testsuite/25_algorithms/clamp/2.cc | 1 +
.../testsuite/25_algorithms/clamp/constexpr.cc | 2 +-
.../clamp/requirements/explicit_instantiation/1.cc | 2 +-
.../requirements/explicit_instantiation/pod.cc | 2 +-
.../headers/cmath/functions_std_c++17.cc | 2 +-
.../headers/cmath/special_functions_global.cc | 2 +-
.../testsuite/26_numerics/numbers/float128.cc | 2 +-
.../testsuite/26_numerics/valarray/69116.cc | 2 +-
.../27_io/basic_istream/ignore/char/94749.cc | 4 +-
.../27_io/basic_istream/ignore/wchar_t/94749.cc | 4 +-
.../basic_ostream/inserters_other/char/lwg2221.cc | 2 +-
libstdc++-v3/testsuite/28_regex/simple_c++11.cc | 2 +-
.../29_atomics/atomic/is_always_lock_free.cc | 2 +-
.../testsuite/29_atomics/atomic_float/1.cc | 1 +
.../29_atomics/atomic_float/value_init.cc | 1 +
.../atomic_integral/is_always_lock_free.cc | 2 +-
.../headers/condition_variable/std_c++0x_neg.cc | 3 -
.../30_threads/headers/future/std_c++0x_neg.cc | 3 -
.../testsuite/30_threads/shared_lock/70766.cc | 2 +-
.../testsuite/30_threads/shared_mutex/cons/1.cc | 2 +-
.../30_threads/shared_mutex/cons/assign_neg.cc | 2 +-
.../30_threads/shared_mutex/cons/copy_neg.cc | 2 +-
.../shared_mutex/requirements/standard_layout.cc | 2 +-
.../30_threads/shared_mutex/try_lock/1.cc | 2 +-
.../30_threads/shared_mutex/try_lock/2.cc | 2 +-
.../testsuite/30_threads/shared_mutex/unlock/1.cc | 2 +-
.../filesystem/filesystem_error/cons.cc | 2 +-
libstdc++-v3/testsuite/lib/dg-options.exp | 5 +-
.../concept.arithmetic/floating_point.cc | 2 +-
.../testsuite/std/ranges/access/lwg3467.cc | 33 +
.../testsuite/tr1/headers/c++200x/complex.cc | 2 +-
libstdc++-v3/testsuite/util/testsuite_abi.cc | 11 +-
libstdc++-v3/testsuite/util/testsuite_allocator.h | 4 +-
libstdc++-v3/testsuite/util/testsuite_containers.h | 5 +-
libstdc++-v3/testsuite/util/testsuite_shared.cc | 7 +-
lto-plugin/ChangeLog | 5 +
lto-plugin/configure | 25 +-
1528 files changed, 59745 insertions(+), 27657 deletions(-)
diff --cc ChangeLog.modules
index dfb1a2aa7e2,00000000000..680900c3639
mode 100644,000000..100644
--- a/ChangeLog.modules
+++ b/ChangeLog.modules
@@@ -1,16070 -1,0 +1,16072 @@@
+2020-08-03 Nathan Sidwell <nathan@acm.org>
+
++ 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.
[...]
[diff truncated at 524288 bytes]
More information about the Libstdc++-cvs
mailing list