Jakub Jelinek [Fri, 1 Jan 2021 16:26:04 +0000 (17:26 +0100)]
Rotate ChangeLog files - part 1 - add ChangeLog-2020.
2021-01-01 Jakub Jelinek <jakub@redhat.com>
gcc/
* ChangeLog-2020: Rotate ChangeLog. New file.
gcc/ada/
* ChangeLog-2020: Rotate ChangeLog. New file.
gcc/cp/
* ChangeLog-2020: Rotate ChangeLog. New file.
gcc/d/
* ChangeLog-2020: Rotate ChangeLog. New file.
gcc/fortran/
* ChangeLog-2020: Rotate ChangeLog. New file.
gcc/testsuite/
* ChangeLog-2020: Rotate ChangeLog. New file.
libgfortran/
* ChangeLog-2020: Rotate ChangeLog. New file.
libstdc++-v3/
* ChangeLog-2020: Rotate ChangeLog. New file.
Joel Brobecker [Fri, 1 Jan 2021 00:38:03 +0000 (21:38 -0300)]
disable some aapcs/vfp*.c test if not arm_fp16_alternative_ok
The tests use -mfp16-format=alternative, and so should not be run
if that option isn't supported.
for gcc/testsuite/ChangeLog
* lib/target-supports.exp
(check_effective_target_arm_fp16_alternative_ok_nocache):
Return zero for *-*-vxworks7r* targets.
* gcc.target/arm/aapcs/vfp22.c: Require arm_fp16_alternative_ok.
* gcc.target/arm/aapcs/vfp23.c: Likewise.
* gcc.target/arm/aapcs/vfp24.c: Likewise.
* gcc.target/arm/aapcs/vfp25.c: Likewise.
Jerome Lambourg [Fri, 1 Jan 2021 00:37:48 +0000 (21:37 -0300)]
fix testsuite/g++.dg/init/new26.C for C++-14 and later
This test fails during the execution on VxWorks 7 when using
C++-14 and C++-17.
for gcc/testsuite/ChangeLog
* g++.dg/init/new26.C: Fix overriding of the delete operator
for c++14 profile.
Jerome Lambourg [Fri, 1 Jan 2021 00:38:13 +0000 (21:38 -0300)]
g++.dg/tls/pr79288.C: Skip on vxworks_kernel (TLS model not supported)
The only TLS model supported in VxWorks kernel mode is local-exec.
for gcc/testsuite/ChangeLog
* g++.dg/tls/pr79288.C: Skip on vxworks_kernel (TLS model
not supported).
Joel Brobecker [Fri, 1 Jan 2021 00:38:05 +0000 (21:38 -0300)]
compile gcc.target/arm/{pr78255-2.c,memset-inline-2.c} with -mno-long-calls
If the target is configured such that -mlong-call is passed
by default, the function calls these tests are trying to detect
by scanning the assembly file are performed using long calls,
like so:
| foo:
| @ memset-inline-2.c:12: memset (a, -1, 14);
| mov r2, #14 @,
| mvn r1, #0 @,
| ldr r0, .L2 @,
| ldr r3, .L2+4 @ tmp112,
| bx r3 @ tmp112
Looking at .L2 (and in particular at .L2+4):
| .L2:
| .word a
| .word memset <<<---
This change adds -mno-long-calls to the list of compiler options
to make sure we generate short call code, allowing the assembly
matching to pass.
This is added unconditionally to the dg-options (as opposed to using
dg-additional-options) because this test is already specific to ARM
targets, and -mno-long-calls is available on all ARM targets.
for gcc/testsuite/ChangeLog
* gcc.target/arm/memset-inline-2.c: Add -mno-long-calls to
the test's dg-options.
* gcc.target/arm/pr78255-2.c: Likewise.
Jerome Lambourg [Fri, 1 Jan 2021 00:38:00 +0000 (21:38 -0300)]
Fix testsuite/g++.old-deja/g++.mike/p658.C build failure on VxWorks RTP
The conflicting definition of OK is present in VxWorks RTP headers too.
for gcc/testsuite/ChangeLog
* g++.old-deja/g++.mike/p658.C: Also undefine OK on VxWorks RTP.
Jerome Lambourg [Fri, 1 Jan 2021 00:37:59 +0000 (21:37 -0300)]
Fix testsuite/g++.dg/opt/
20050511-1.C compilation error on VxWorks 7
In VxWorks 7, UINT32 is defined in both modes, kernel and rtp. Adjust
the work around accordingly.
for gcc/testsuite/ChangeLog
* g++.dg/opt/
20050511-1.C: Work around UINT32 in vxworks rtp
headers too.
Jerome Lambourg [Fri, 1 Jan 2021 00:37:56 +0000 (21:37 -0300)]
Skip testsuite/g++.old-deja/g++.pt/const2.C on vxworks_kernel
Linking in vxworks kernel-mode is partial linking, so missing symbols
are not detected.
for gcc/testsuite/ChangeLog
* g++.old-deja/g++.pt/const2.C: Skip on vxworks kernel.
Jerome Lambourg [Fri, 1 Jan 2021 00:37:54 +0000 (21:37 -0300)]
Remove VxWorks-specific test directives in g++.dg/warn/miss-format-1.C
These are no longer applicable.
for gcc/testsuite/ChangeLog
* g++.dg/warn/miss-format-1.C: Remove vxworks-specific test
directives.
Jerome Lambourg [Fri, 1 Jan 2021 04:55:01 +0000 (01:55 -0300)]
Undefine ERROR in g++.dg/tree-ssa/copyprop.C
VxWorks headers define ERROR as a macro, which conflicts with the use
in the test.
for gcc/testsuite/ChangeLog
* g++.dg/tree-ssa/copyprop.C: Undefine ERROR if defined.
Jerome Lambourg [Fri, 1 Jan 2021 04:55:00 +0000 (01:55 -0300)]
skip testsuite/g++.dg/other/anon5.C on vxworks_kernel targets
The vxworks kernel-mode linking is partial linking, so it cannot
detect missing symbols.
for gcc/testsuite/ChangeLog
* g++.dg/other/anon5.C: Skip on vxworks kernel.
Jerome Lambourg [Fri, 1 Jan 2021 04:54:59 +0000 (01:54 -0300)]
Add conditions on VxWorks versions for gcc.dg/vxworks/initpri?.c
Adjust vxworks initpri expectations, given that vxworks7 has switched
to .init_array.
for gcc/testsuite/ChangeLog
* gcc.dg/vxworks/initpri1.c: Tigthen VxWorks version check.
* gcc.dg/vxworks/initpri2.c: Likewise.
Joel Brobecker [Fri, 1 Jan 2021 04:54:58 +0000 (01:54 -0300)]
gcc.dg/intmax_t-1.c compiles without error on VxWorks 7 SR06x0
This test currently fails on VxWorks 7 SR06x0 targets when in kernel
mode, because it expects a discrepancy between built-in and system
intmax_t for all VxWorks targets when in kernel mode. Fortunately,
this has now been fixed when targetting VxWorks 7 SR06x0, so this
commit adjusts the "dg-error" condition to exclude newer versions of
VxWorks 7.
for gcc/testsuite/ChangeLog
* gcc.dg/intmax_t-1.c: Do not expect an error on *-*-vxworks7r*
targets.
Olivier Hainque [Fri, 1 Jan 2021 04:54:57 +0000 (01:54 -0300)]
Fix VxWorks xfail filters on pthread-init-?.c
Match xfail on kernel instead of rtp mode.
for gcc/testsuite/changeLog
* gcc.dg/pthread-init-1.c: Fix the VxWorks xfail filters.
* gcc.dg/pthread-init-2.c: Ditto.
Olivier Hainque [Fri, 1 Jan 2021 00:37:42 +0000 (21:37 -0300)]
Add missing vxworks filters to lib/target-supports.exp functions
Explicitly disable some vxworks-missing features in the testsuite, that
the current feature tests detect as present.
for gcc/testsuite/ChangeLog
* lib/target-supports.exp (check_weak_available,
check_fork_available, check_effective_target_lto,
check_effective_target_mempcpy): Add vxworks filters.
Alexandre Oliva [Fri, 1 Jan 2021 00:38:27 +0000 (21:38 -0300)]
-mno-long-calls for mve_libcall tests
The implicit -mlong-calls used in our vxworks configurations changes
the call sequences from those expected in the mve_libcall testcases.
This patch brings the test output in line with the expectations, with
an explicit -mno-long-calls.
for gcc/testsuite/ChangeLog
* gcc.target/arm/mve/intrinsics/mve_libcall1.c: Pass an
explicit -mno-long-calls.
* gcc.target/arm/mve/intrinsics/mve_libcall2.c: Likewise.
Alexandre Oliva [Fri, 1 Jan 2021 00:38:24 +0000 (21:38 -0300)]
-mno-long-calls for arm/no_unique_address tests
The implicit -mlong-calls from our vxworks configurations makes the
tail-call instructions differ from those expected by the
no_unique_address tests in gcc.target/arm.
This patch adds -mno-long-calls to the compilation commands, so that
we generate the expected sequences.
for gcc/testsuite/ChangeLog
* g++.target/arm/no_unique_address_1.C: Add -mno-long-calls.
* g++.target/arm/no_unique_address_2.C: Likewise.
Alexandre Oliva [Fri, 1 Jan 2021 00:38:23 +0000 (21:38 -0300)]
-mno-long-calls for arm/headmerge tests
The headmerge tests pass a constant to conditional calls, so that the
same constant is always passed to a function, though it's a different
function depending on which path is taken.
The test checks that the constant appears only once in the assembly
output, as a means to verify that the insns setting up the argument
are unified: they appear as separate insns up to jump2, where
crossjump identifies a common prefix to all conditional paths and
unifies them.
Alas, with -mlong-calls, that we enable in our arm-vxworks
configurations, the argument register is loaded after loading the
callee address into another register. Since each path calls a
different function, there's no common initial code sequence for
crossjump to unify, and the argument register set up remains separate,
so the test fails.
Though it would surely be desirable for the compiler to perform the
unification of the argument register setting up, this patch merely
avoids the effects of -mlong-calls, with an explicit -mno-long-calls.
for gcc/testsuite/ChangeLog
* gcc.target/arm/headmerge-1.c: Add -mno-long-calls.
* gcc.target/arm/headmerge-2.c: Likewise.
Alexandre Oliva [Fri, 1 Jan 2021 00:38:22 +0000 (21:38 -0300)]
-mno-long-calls for expected regalloc in arm/fp16-aapcs-2.c test
The implicit -mlong-calls used in our arm-vxworks configurations
changes the register allocation patterns in the arm/fp16-aapcs-2.c
test: r3 ends up used in the long-call sequence, and we end up using
ip as a temporary, which doesn't match the expected mov patterns.
This patch adds an explicit -mno-long-calls for the generated code to
match the expectation.
for gcc/testsuite/ChangeLog
* gcc.target/arm/fp16-aapcs-2.c: Use -mno-long-calls.
GCC Administrator [Fri, 1 Jan 2021 00:16:20 +0000 (00:16 +0000)]
Daily bump.
Jakub Jelinek [Thu, 31 Dec 2020 23:03:35 +0000 (00:03 +0100)]
testsuite: Fix up pr56719.c testcase [PR98489]
On some targets, there are no < 8191; and >= 8191; strings,
but < 8191) and >= 8191), so just remove the ; from the regexps.
2021-01-01 Jakub Jelinek <jakub@redhat.com>
PR testsuite/98489
PR tree-optimization/56719
* gcc.dg/tree-ssa/pr56719.c: Remove semicolon from
scan-tree-dump-times regexps.
Richard Sandiford [Thu, 31 Dec 2020 16:51:34 +0000 (16:51 +0000)]
vect: Avoid generating out-of-range shifts [PR98302]
In this testcase we end up with:
unsigned long long x = ...;
char y = (char) (x << 37);
The overwidening pattern realised that only the low 8 bits
of x << 37 are needed, but then tried to turn that into:
unsigned long long x = ...;
char y = (char) x << 37;
which gives an out-of-range shift. In this case y can simply
be replaced by zero, but as the comment in the patch says,
it's kind-of awkward to do that in the middle of vectorisation.
Most of the overwidening stuff is about keeping operations
as narrow as possible, which is important for vectorisation
but could be counter-productive for scalars (especially on
RISC targets). In contrast, optimising y to zero in the above
feels like an independent optimisation that would benefit scalar
code and that should happen before vectorisation.
gcc/
PR tree-optimization/98302
* tree-vect-patterns.c (vect_determine_precisions_from_users): Make
sure that the precision remains greater than the shift count.
gcc/testsuite/
PR tree-optimization/98302
* gcc.dg/vect/pr98302.c: New test.
Richard Sandiford [Thu, 31 Dec 2020 16:51:33 +0000 (16:51 +0000)]
vect: Fix bogus alignment assumption in alias checks [PR94994]
This PR is about a case in which the vectoriser was feeding
incorrect alignment information to tree-data-ref.c, leading
to incorrect runtime alias checks. The alignment was taken
from the TREE_TYPE of the DR_REF, which in this case was a
COMPONENT_REF with a normally-aligned type. However, the
underlying MEM_REF was only byte-aligned.
This patch uses dr_alignment to calculate the (byte) alignment
instead, just like we do when creating vector MEM_REFs.
gcc/
PR tree-optimization/94994
* tree-vect-data-refs.c (vect_vfa_align): Use dr_alignment.
gcc/testsuite/
PR tree-optimization/94994
* gcc.dg/vect/pr94994.c: New test.
Richard Sandiford [Thu, 31 Dec 2020 16:10:47 +0000 (16:10 +0000)]
genmodes: Update GET_MODE_MASK when changing NUNITS [PR98214]
The static GET_MODE_MASKs for SVE vectors are based on the
static precisions, which in turn are based on 128-bit SVE.
The precisions are later updated based on -msve-vector-bits
(usually to become variable length), but the GET_MODE_MASK
stayed the same. This caused combine to fold:
(*_extract:DI (subreg:DI (reg:VNxMM R) 0) ...)
to zero because the extracted bits appeared to be insignificant.
gcc/
PR rtl-optimization/98214
* genmodes.c (emit_insn_modes_h): Emit a definition of CONST_MODE_MASK.
(emit_mode_mask): Treat mode_mask_array as non-constant if adj_nunits.
(emit_mode_adjustments): Update GET_MODE_MASK when updating
GET_MODE_NUNITS.
* machmode.h (mode_mask_array): Use CONST_MODE_MASK.
Jakub Jelinek [Thu, 31 Dec 2020 10:09:26 +0000 (11:09 +0100)]
match.pd: Add clz(X) == 0 -> (int)X < 0 etc. simpifications [PR94802]
The following patch adds some clz simplifications. If
clz is 0, then the MSB of the argument is set, and if clz is prec-1, then
the argument is 1.
2020-12-31 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/94802
* match.pd (clz(X) == 0 -> (int)X < 0): New simplification.
(clz(X) == (prec-1) -> X == 1): Likewise.
* gcc.dg/tree-ssa/pr94802-1.c: New test.
Jakub Jelinek [Thu, 31 Dec 2020 10:08:15 +0000 (11:08 +0100)]
match.pd: Add (-(X < 0) | 1) * X -> abs (X) etc. simplifications [PR94785]
The following patch adds two simplifications to recognize idioms
for ABS_EXPR resp. ABSU_EXPR.
2020-12-31 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/94785
* match.pd ((-(X < 0) | 1) * X -> abs (X)): New simplification.
((-(X < 0) | 1U) * X -> absu (X)): Likewise.
* gcc.dg/tree-ssa/pr94785.c: New test.
Jakub Jelinek [Thu, 31 Dec 2020 10:06:56 +0000 (11:06 +0100)]
wide-int: Fix wi::to_mpz [PR98474]
The following testcase is miscompiled, because niter analysis miscomputes
the number of iterations to 0.
The problem is that niter analysis uses mpz_t (wonder why, wouldn't
widest_int do the same job?) and when wi::to_mpz is called e.g. on the
TYPE_MAX_VALUE of __uint128_t, it initializes the mpz_t result with wrong
value.
wi::to_mpz has code to handle negative wide_ints in signed types by
inverting all bits, importing to mpz and complementing it, which is fine,
but doesn't handle correctly the case when the wide_int's len (times
HOST_BITS_PER_WIDE_INT) is smaller than precision when wi::neg_p.
E.g. the 0xffffffffffffffffffffffffffffffff TYPE_MAX_VALUE is represented
in wide_int as 0xffffffffffffffff len 1, and wi::to_mpz would create
0xffffffffffffffff mpz_t value from that.
This patch handles it by adding the needed -1 host wide int words (and has
also code to deal with precision that aren't multiple of
HOST_BITS_PER_WIDE_INT).
2020-12-31 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/98474
* wide-int.cc (wi::to_mpz): If wide_int has MSB set, but type
is unsigned and excess negative, append set bits after len until
precision.
* gcc.c-torture/execute/pr98474.c: New test.
Jakub Jelinek [Thu, 31 Dec 2020 09:20:39 +0000 (10:20 +0100)]
fold-const: Avoid (cast) ((cast2) x p+ y) folding for -fsanitize=alignment [PR98206]
The following testcase is diagnosed by UBSan as invalid, even when it is
valid.
We have a derived type Base2 at offset 1 with alignment 1 and do:
(const Derived &) ((const Base2 *) this + -1)
but the folder before ubsan in the FE gets a chance to instrument it
optimizes that into:
(const Derived &) this + -1
and so we require that this has 8-byte alignment which Derived class needs.
Fixed by avoiding such an optimization when -fsanitize=alignment is in
effect if it would affect the alignments (and guarded with !in_gimple_form
because we don't really care during GIMPLE, though pointer conversions are
useless then and so such folding isn't needed very much during GIMPLE).
2020-12-31 Jakub Jelinek <jakub@redhat.com>
PR c++/98206
* fold-const.c: Include asan.h.
(fold_unary_loc): Don't optimize (ptr_type) (((ptr_type2) x) p+ y)
into ((ptr_type) x) p+ y if sanitizing alignment in GENERIC and
ptr_type points to type with higher alignment than ptr_type2.
* g++.dg/ubsan/align-4.C: New test.
Jakub Jelinek [Thu, 31 Dec 2020 09:19:06 +0000 (10:19 +0100)]
reassoc: Optimize x > 0x1fff || y > 0x1fff into (x | y) > 0x1fff [PR56719]
The following patch adds an optimization mentioned in PR56719 #c8.
We already have the x != 0 && y != 0 && z != 0 into (x | y | z) != 0
and x != -1 && y != -1 && y != -1 into (x & y & z) != -1
optimizations, this patch just extends that to
x < C && y < C && z < C for power of two constants C into
(x | y | z) < C (for unsigned comparisons).
I didn't want to create too many buckets (there can be TYPE_PRECISION such
constants), so the patch instead just uses one buckets for all such
constants and loops over that bucket up to TYPE_PRECISION times.
2020-12-31 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/56719
* tree-ssa-reassoc.c (optimize_range_tests_cmp_bitwise): Also optimize
x < C && y < C && z < C when C is a power of two constant into
(x | y | z) < C.
* gcc.dg/tree-ssa/pr56719.c: New test.
Iain Buclaw [Thu, 31 Dec 2020 00:05:01 +0000 (01:05 +0100)]
d: Mangled Symbols now back reference types and identifiers
Symbols with extern(D) linkage are now mangled using back references to
types and identifiers if these occur more than once in the mangled name
as emitted before. This reduces symbol length, especially with chained
expressions of templated functions with Voldemort return types.
For example, the average symbol length of the 127000+ symbols created by
a libphobos unittest build is reduced by a factor of about 3, while the
longest symbol shrinks from 416133 to 1142 characters.
Reviewed-on: https://github.com/dlang/dmd/pull/12079
gcc/d/ChangeLog:
* dmd/MERGE: Merge upstream dmd
2bd4fc3fe.
GCC Administrator [Thu, 31 Dec 2020 00:16:29 +0000 (00:16 +0000)]
Daily bump.
Ian Lance Taylor [Wed, 23 Dec 2020 17:57:37 +0000 (09:57 -0800)]
libgo: update to Go1.16beta1 release
This does not yet include support for the //go:embed directive added
in this release.
* Makefile.am (check-runtime): Don't create check-runtime-dir.
(mostlyclean-local): Don't remove check-runtime-dir.
(check-go-tool, check-vet): Copy in go.mod and modules.txt.
(check-cgo-test, check-carchive-test): Add go.mod file.
* Makefile.in: Regenerate.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/280172
Uros Bizjak [Wed, 30 Dec 2020 16:41:21 +0000 (17:41 +0100)]
i386: Remove unnecessary clobbers from combine splitters.
There is no need for combine splitters to emit insn patterns with clobbers,
the pass is smart enough to add clobbers to patterns as necessary.
2020-12-30 Uroš Bizjak <ubizjak@gmail.com>
gcc/
* config/i386/i386.md: Remove unnecessary clobbers
from combine splitters.
Iain Buclaw [Thu, 24 Dec 2020 21:23:16 +0000 (22:23 +0100)]
d: Simplify quoting characters in deps_add_target
The implementation in d-lang.cc was based on what was present in libcpp.
This synchronizes the escaping logic to match the current version.
gcc/d/ChangeLog:
* d-lang.cc (deps_add_target): Handle quoting ':' character.
Reimplement backslash tracking.
Iain Buclaw [Wed, 23 Dec 2020 17:04:47 +0000 (18:04 +0100)]
d: Give the result of evaluated expressions a location
CST trees that were converted back to a D front-end AST node lost all
location information of the original expression. Now this is propagated
on to the literal expression.
gcc/d/ChangeLog:
* d-tree.h (d_eval_constant_expression): Add location argument.
* d-builtins.cc (d_eval_constant_expression): Give generated constants
a proper file location.
* d-compiler.cc (Compiler::paintAsType): Pass expression location to
d_eval_constant_expression.
* d-frontend.cc (eval_builtin): Likewise.
Jakub Jelinek [Wed, 30 Dec 2020 10:21:24 +0000 (11:21 +0100)]
i386: Optimize pmovmskb on inverted vector to inversion of pmovmskb result [PR98461]
The following patch adds combine splitters to optimize:
- vpcmpeqd %ymm1, %ymm1, %ymm1
- vpandn %ymm1, %ymm0, %ymm0
vpmovmskb %ymm0, %eax
+ notl %eax
etc. (for vectors with less than 32 elements with xorl instead of notl).
2020-12-30 Jakub Jelinek <jakub@redhat.com>
PR target/98461
* config/i386/sse.md (<sse2_avx2>_pmovmskb): Add splitters
for pmovmskb of NOT vector.
* gcc.target/i386/sse2-pr98461.c: New test.
* gcc.target/i386/avx2-pr98461.c: New test.
GCC Administrator [Wed, 30 Dec 2020 00:16:25 +0000 (00:16 +0000)]
Daily bump.
Paul Thomas [Tue, 29 Dec 2020 17:44:48 +0000 (17:44 +0000)]
Fortran: Correct missing structure constructor comps. [PR97612].
2020-12-29 Paul Thomas <pault@gcc.gnu.org>
gcc/fortran
PR fortran/97612
* primary.c (build_actual_constructor): Missing allocatable
components are set unallocated using EXPR_NULL. Then missing
components are tested for a default initializer.
gcc/testsuite/
PR fortran/97612
* gfortran.dg/structure_constructor_17.f90: New test.
Paul Thomas [Tue, 29 Dec 2020 17:37:25 +0000 (17:37 +0000)]
Fortran: Fix deferred character lengths in array constructors [PR93833].
2020-12-29 Paul Thomas <pault@gcc.gnu.org>
gcc/fortran
PR fortran/93833
* trans-array.c (get_array_ctor_var_strlen): If the character
length backend_decl cannot be found, convert the expression and
use the string length. Clear up some minor white space issues
in the rest of the file.
gcc/testsuite/
PR fortran/93833
* gfortran.dg/deferred_character_36.f90 : New test.
Claudiu Zissulescu [Tue, 29 Dec 2020 11:30:05 +0000 (13:30 +0200)]
arc: generate mac(u) insn instead of macd(u) when destination is accl
Generate MAC(U) instruction instead of MACD(U) when the destination
register is already choosen as ACCL register.
gcc/
2020-12-29 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/arc.md (maddsidi4_split): Skip macd gen, use mac insn
instead.
(macd): Update register letters.
(umaddsidi4_split): Skip macdu gen, use macu insn instead.
(macdu): Update register letters.
Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
Claudiu Zissulescu [Tue, 29 Dec 2020 11:30:05 +0000 (13:30 +0200)]
arc: flip if-condition predicates in secondary reload hook
The ARC code contains code which should only work with the old reload
pass. Such code is found in arc_secondary_reload hook, however it was
not properly quarded. Reverse the if-condition predicate such that
req_equiv_mem is called when lra is not in progress.
gcc/
2020-12-29 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/arc.c (arc_secondary_reload): Flip if-condition
predicates.
Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
Claudiu Zissulescu [Tue, 29 Dec 2020 11:30:05 +0000 (13:30 +0200)]
arc: Make use reg_renumber safe.
The REGNO_OK_FOR_BASE_P is using reg_renumber array. However, it is
not always defined. Use it only when it is defined.
gcc/
2020-12-29 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/arc.h (REGNO_OK_FOR_BASE_P): Check if defined
reg_renumber.
Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
Claudiu Zissulescu [Tue, 29 Dec 2020 11:30:05 +0000 (13:30 +0200)]
arc: Update test pattern.
gcc/testsuite
2020-12-29 Claudiu Zissulescu <claziss@synopsys.com>
* gcc.target/arc/loop-3.c: Update test pattern.
Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
Claudiu Zissulescu [Tue, 29 Dec 2020 11:30:04 +0000 (13:30 +0200)]
arc: Fix cached to uncached moves.
We need an temporary register when moving data from a cached memory to
an uncached memory. Fix this issue and add a test for it.
gcc/
2020-12-29 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/arc.c (prepare_move_operands): Use a temporary
registers when we have cached mem-to-uncached mem moves.
gcc/testsuite/
2020-12-29 Vladimir Isaev <isaev@synopsys.com>
* gcc.target/arc/uncached-9.c: New test.
Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
Claudiu Zissulescu [Tue, 29 Dec 2020 11:30:04 +0000 (13:30 +0200)]
arc: Don't use predicated vadd2 instructions in mov patterns.
Update movdi, movdf and mov vectors not to use predicated vadd2
instructions. vadd2 is used as a "fast" move in these patterns. This
fixes a number of failures in dejagnu.
gcc/
2020-12-29 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/arc.md (movdi_insn): Update pattern, no predicated
vadd2 usage.
(movdf_insn): Likewise.
* config/arc/simdext.md (movVEC_insn): Likewise.
Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
Uros Bizjak [Tue, 29 Dec 2020 07:43:38 +0000 (08:43 +0100)]
i386: Rounding functions TLC
Use copy_to_reg where appropriate, use int_mode_for_mode
and fix comment indentation.
2020-12-29 Uroš Bizjak <ubizjak@gmail.com>
gcc/
* config/i386/i386-expand.c (ix86_gen_TWO52): Use REAL_MODE_FORMAT
to determine number of mantissa bits. Use real_2expN instead
of real_ldexp.
(ix86_expand_rint): Use copy_to_reg.
(ix86_expand_floorceildf_32): Ditto.
(ix86_expand_truncdf_32): Ditto.
(ix86_expand_rounddf_32): Ditto.
(ix86_expand_floorceil): Use copy_to_reg and int_mode_for_mode.
(ix86_expand_trunc): Ditto.
(ix86_expand_round): Ditto.
GCC Administrator [Tue, 29 Dec 2020 00:16:34 +0000 (00:16 +0000)]
Daily bump.
Gerald Pfeifer [Mon, 28 Dec 2020 22:42:45 +0000 (23:42 +0100)]
libgomp: Avoid bad "up" link in libgomp docs
The libgomp texinfo docs lead to an invalid "up" link on the Top node,
which we can avoid similarly to the Top link in the main GCC manual.
2020-12-28 Sandra Loosemore <sandra@codesourcery.com>
libgomp/
* libgomp.texi (Top): Avoid bad "up" link.
Gerald Pfeifer [Mon, 28 Dec 2020 20:41:55 +0000 (21:41 +0100)]
doc: Remove HSAIL from Language Standards
Support for HSAIL has been deprecated with GCC 10 and their web server
has been down for weeks.
gcc/
2020-12-28 Gerald Pfeifer <gerald@pfeifer.com>
* doc/standards.texi (HSAIL): Remove section.
Uros Bizjak [Mon, 28 Dec 2020 20:30:08 +0000 (21:30 +0100)]
i386: Fix __builtin_rint with FE_DOWNWARD rounding direction [PR96793]
x86_expand_rint expander uses x86_sse_copysign_to_positive, which
is unable to change the sign from - to +. When FE_DOWNWARD rounding
direction is in effect, the expanded sequence that involves subtraction
can trigger x - x = -0.0 special rule. x86_sse_copysign_to_positive
fails to change the sign of the intermediate value, assumed to always
be positive, back to positive.
The patch adds one extra fabs that strips the sign from the intermediate
value when flag_rounding_math is in effect.
2020-12-28 Uroš Bizjak <ubizjak@gmail.com>
gcc/
PR target/96793
* config/i386/i386-expand.c (ix86_expand_rint):
Remove the sign of the intermediate value for flag_rounding_math.
gcc/testsuite/
PR target/96793
* gcc.target/i386/pr96793-2.c: New test.
Uros Bizjak [Mon, 28 Dec 2020 15:52:45 +0000 (16:52 +0100)]
i386: Use existing temporary register in rounding functions
It is possible to avoid the call to force_reg and use existing
temporary register in ix86_expand_trunc, ix86_expand_round and
ix86_expand_rounddf_32 expanders.
2020-12-28 Uroš Bizjak <ubizjak@gmail.com>
gcc/
* config/i386/i386-expand.c (ix86_expand_trunc): Use
existing temporary register to avoid a call to force_reg.
Hongyu Wang [Fri, 25 Dec 2020 01:25:39 +0000 (09:25 +0800)]
Fix standard name for zero/sign extend expanders
gcc/ChangeLog:
* config/i386/i386.md (optab): New code attr.
* config/i386/sse.md (<code>v32qiv32hi2): Rename to ...
(<optab>v32qiv32hi2) ... this.
(<code>v16qiv16hi2): Likewise.
(<code>v8qiv8hi2): Likewise.
(<code>v16qiv16si2): Likewise.
(<code>v8qiv8si2): Likewise.
(<code>v4qiv4si2): Likewise.
(<code>v16hiv16si2): Likewise.
(<code>v8hiv8si2): Likewise.
(<code>v4hiv4si2): Likewise.
(<code>v8qiv8di2): Likewise.
(<code>v4qiv4di2): Likewise.
(<code>v2qiv2di2): Likewise.
(<code>v8hiv8di2): Likewise.
(<code>v4hiv4di2): Likewise.
(<code>v2hiv2di2): Likewise.
(<code>v8siv8di2): Likewise.
(<code>v4siv4di2): Likewise.
(<code>v2siv2di2): Likewise.
gcc/testsuite/ChangeLog:
* gcc.target/i386/pr92658-avx2-2.c: New test.
* gcc.target/i386/pr92658-avx512bw-2.c: Likewise.
* gcc.target/i386/pr92658-sse4-2.c: Likewise.
GCC Administrator [Mon, 28 Dec 2020 00:16:28 +0000 (00:16 +0000)]
Daily bump.
Gerald Pfeifer [Sun, 27 Dec 2020 20:40:36 +0000 (21:40 +0100)]
doc: New source for "Memory Model for Static Analysis" paper
gcc:
2020-12-27 Gerald Pfeifer <gerald@pfeifer.com>
* doc/analyzer.texi (Analyzer Internals): Find a new source for
the "A Memory Model for Static Analysis of C Programs" paper.
Gerald Pfeifer [Sun, 27 Dec 2020 20:24:36 +0000 (21:24 +0100)]
libstdc++: Update link to Arm ABI
libstdc++-v3:
2020-12-27 Gerald Pfeifer <gerald@pfeifer.com>
* doc/xml/manual/abi.xml: Update link to Arm ABI.
* doc/html/manual/abi.html: Regenerate.
Jeff Law [Sun, 27 Dec 2020 18:42:40 +0000 (11:42 -0700)]
Fix regressions for iq2000-elf after recent changes
gcc/testsuite
* gcc.dg/tree-ssa/asm-2.c: Use different register for iq2000.
* gcc.dg/tree-ssa/asm-3.c: Likewise.
Paul Thomas [Sun, 27 Dec 2020 14:59:38 +0000 (14:59 +0000)]
Fortran: Fix some select rank issues [PR97694 and 97723].
2020-12-27 Paul Thomas <pault@gcc.gnu.org>
gcc/fortran
PR fortran/97694
PR fortran/97723
* check.c (allocatable_check): Select rank temporaries are
permitted even though they are treated as associate variables.
* resolve.c (gfc_resolve_code): Break on select rank as well as
select type so that the block os resolved.
* trans-stmt.c (trans_associate_var): Class associate variables
that are optional dummies must use the backend_decl.
gcc/testsuite/
PR fortran/97694
PR fortran/97723
* gfortran.dg/select_rank_5.f90: New test.
Gerald Pfeifer [Sun, 27 Dec 2020 10:16:21 +0000 (11:16 +0100)]
libstdc++: Move Valgrind references to https
libstdc++-v3:
2020-12-27 Gerald Pfeifer <gerald@pfeifer.com>
* doc/xml/manual/debug.xml: Move Valgrind references to https.
* doc/html/manual/debug.html: Regenerate.
GCC Administrator [Sun, 27 Dec 2020 00:16:18 +0000 (00:16 +0000)]
Daily bump.
Iain Sandoe [Sat, 26 Dec 2020 19:46:50 +0000 (19:46 +0000)]
Objective-C++ : Fix up testcase EOF diagnostics.
Some Objective-C++ testcases need modification in reponse to the
solution to PR 96045.
gcc/testsuite/ChangeLog:
PR c++/96045
* obj-c++.dg/property/property-neg-6.mm: Adjust EOF
diagnostic location.
* obj-c++.dg/syntax-error-10.mm: Likewise.
* obj-c++.dg/syntax-error-8.mm: Likewise.
* obj-c++.dg/syntax-error-9.mm: Likewise.
Paul Thomas [Sat, 26 Dec 2020 16:44:24 +0000 (16:44 +0000)]
Fortran: Correction to recent patch in light of comments [PR98022].
2020-12-26 Paul Thomas <pault@gcc.gnu.org>
gcc/fortran
PR fortran/98022
* data.c (gfc_assign_data_value): Throw an error for inquiry
references. Follow with corrected code that would provide the
expected result and provides clean error recovery.
gcc/testsuite/
PR fortran/98022
* gfortran.dg/data_inquiry_ref.f90: Change to dg-compile and
add errors for inquiry references.
Paul Thomas [Sat, 26 Dec 2020 15:08:11 +0000 (15:08 +0000)]
Fix failures with -m32 and some memory leaks.
2020-12-23 Paul Thomas <pault@gcc.gnu.org>
gcc/fortran
PR fortran/83118
* trans-array.c (gfc_alloc_allocatable_for_assignment): Make
sure that class expressions are captured for dummy arguments by
use of gfc_get_class_from_gfc_expr otherwise the wrong vptr is
used.
* trans-expr.c (gfc_get_class_from_gfc_expr): New function.
(gfc_get_class_from_expr): If a constant expression is
encountered, return NULL_TREE;
(gfc_trans_assignment_1): Deallocate rhs allocatable components
after passing derived type function results to class lhs.
* trans.h : Add prototype for gfc_get_class_from_gfc_expr.
Gerald Pfeifer [Fri, 25 Dec 2020 23:27:23 +0000 (00:27 +0100)]
libstdc++: Update link to Intel/GNU compatibility paper
libstdc++-v3:
2020-12-26 Gerald Pfeifer <gerald@pfeifer.com>
* doc/xml/manual/abi.xml: Update link to Intel's compatibility
with GNU compilers document.
* doc/html/manual/abi.html: Regenerate.
GCC Administrator [Sat, 26 Dec 2020 00:16:19 +0000 (00:16 +0000)]
Daily bump.
Gerald Pfeifer [Fri, 25 Dec 2020 18:14:35 +0000 (19:14 +0100)]
libstdc++: Update link to Java docs
libstdc++-v3:
2020-12-25 Gerald Pfeifer <gerald@pfeifer.com>
* doc/xml/manual/messages.xml: Update link to Java docs.
* doc/html/manual/facets.html: Ditto.
Gerald Pfeifer [Fri, 25 Dec 2020 14:30:42 +0000 (15:30 +0100)]
doc: Fix reference to libcody
github.com requests (via 301 Moved Permanently) to use gibhub.com,
not www.github.com.
gcc/ChangeLog:
2020-12-25 Gerald Pfeifer <gerald@pfeifer.com>
* doc/invoke.texi (C++ Module Mapper): Fix reference to libcody.
Harald Anlauf [Fri, 25 Dec 2020 14:40:39 +0000 (15:40 +0100)]
PR93685 - ICE in gfc_constructor_append_expr, at fortran/constructor.c:135
Fix handling of F2018 enhancements to DATA statements that allows
initialization of pointer components to derived types, and adjust error
handling for the CHARACTER case.
gcc/fortran/ChangeLog:
* data.c (gfc_assign_data_value): Restrict use of
create_character_initializer to constant initializers.
* trans-expr.c (gfc_conv_initializer): Ensure that character
initializer is constant, otherwise fall through to get the same
error handling as for non-character cases.
gcc/testsuite/ChangeLog:
* gfortran.dg/pr93685_1.f90: New test.
* gfortran.dg/pr93685_2.f90: New test.
Gerald Pfeifer [Fri, 25 Dec 2020 14:20:43 +0000 (15:20 +0100)]
libstdc++: Convert three doxygen.nl links to https
libstdc++-v3:
2020-12-25 Gerald Pfeifer <gerald@pfeifer.com>
* doc/xml/manual/documentation_hacking.xml: Convert three links
to doxygen.nl to https.
* doc/html/manual/documentation_hacking.html: Regenerate.
GCC Administrator [Fri, 25 Dec 2020 00:16:20 +0000 (00:16 +0000)]
Daily bump.
Iain Sandoe [Wed, 27 Nov 2019 13:58:10 +0000 (13:58 +0000)]
C++ : Add the -stdlib= option.
This option allows the user to specifiy alternate C++ runtime libraries,
for example when a platform uses libc++ as the installed C++ runtime.
We introduce the command line option: -stdlib= which is the user-facing
mechanism to select the C++ runtime to be used when compiling and linking
code. This is the same option spelling as that used by clang to allow the
use of libstdc++.
The availability (and thus function) of the option are a configure-time
choice using the configuration control:
--with-gxx-libcxx-include-dir=
Specification of the path for the libc++ headers, enables the -stdlib=
option (using the path as given), default values are set when the path
is unconfigured.
If --with-gxx-libcxx-include-dir is given together with --with-sysroot=,
then we test to see if the include path starts with the sysroot and, if so,
record the sysroot-relative component as the local path. At runtime, we
prepend the sysroot that is actually active.
At link time, we use the C++ runtime in force and (if that is libc++) also
append the libc++abi ABI library. As for other cases, if a target sets the
name pointer for the ABI library to NULL the G++ driver will omit it from
the link line.
gcc/ChangeLog:
* configure.ac: Add gxx-libcxx-include-dir handled
in the same way as the regular cxx header directory.
* Makefile.in: Regenerated.
* config.in: Likewise.
* configure: Likewise.
* cppdefault.c: Pick up libc++ headers if the option
is enabled.
* cppdefault.h (struct default_include): Amend comments
to reflect the extended use of the cplusplus field.
* incpath.c (add_standard_paths): Allow for multiple
c++ header include path variants.
* doc/invoke.texi: Document the -stdlib= option.
gcc/c-family/ChangeLog:
* c.opt: Add -stdlib= option and enumerations for
libstdc++ and libc++.
gcc/cp/ChangeLog:
* g++spec.c (LIBCXX, LIBCXX_PROFILE, LIBCXX_STATIC): New.
(LIBCXXABI, LIBCXXABI_PROFILE, LIBCXXABI_STATIC): New.
(enum stdcxxlib_kind): New.
(lang_specific_driver): Allow selection amongst multiple
c++ runtime libraries.
Kito Cheng [Wed, 23 Dec 2020 15:34:50 +0000 (07:34 -0800)]
RISC-V: Fix python3 compatibility for multilib-generator
The subprocess return string is raw bytes in python3, it must decode
before used as string, verifed with python2 and python3.
gcc/ChangeLog:
* config/riscv/multilib-generator (arch_canonicalize): Call
decode for the subprocess return value.
Ian Lance Taylor [Thu, 24 Dec 2020 00:32:30 +0000 (16:32 -0800)]
compiler: parenthesize channel type strings if necessary
Avoid the ambiguity between "chan <- (chan int)" and "chan (<- chan int)".
This parenthesizes the same way as the gc compiler.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/279961
GCC Administrator [Thu, 24 Dec 2020 00:16:26 +0000 (00:16 +0000)]
Daily bump.
Martin Sebor [Wed, 23 Dec 2020 23:34:12 +0000 (16:34 -0700)]
PR middle-end/98160 - ICE in warn_dealloc_offset on member placement new and delete
gcc/ChangeLog:
PR middle-end/98160
* builtins.c (warn_dealloc_offset): Avoid assuming calls are made
through declared functions and not pointers.
gcc/testsuite/ChangeLog:
PR middle-end/98160
* g++.dg/warn/pr98160.C: New test.
Martin Sebor [Wed, 23 Dec 2020 23:28:06 +0000 (16:28 -0700)]
PR c++/98413 - ICE on placement new and member pointer
gcc/ChangeLog:
PR c++/98413
* builtins.c (get_offset_range): Avoid non-integers/-pointers.
gcc/testsuite/ChangeLog:
PR c++/98413
* g++.dg/warn/pr98413.C: New test.
Olivier Hainque [Wed, 23 Dec 2020 23:24:29 +0000 (20:24 -0300)]
Account for VxWorks headers in libstdc++ test on names
Undefine various macros unexpectedly defined by VxWorks headers.
for libstdc++-v3/ChangeLog
* testsuite/17_intro/names.cc: Account for VxWorks headers.
Joel Brobecker [Wed, 23 Dec 2020 23:24:29 +0000 (20:24 -0300)]
mark some tests in gcc.target/arm as requiring "fpic" support
Require effective target fpic support in tests using pic flags.
for gcc/testsuite/ChangeLog
* gcc.target/arm/data-rel-1.c: Require "fpic" support.
* gcc.target/arm/data-rel-2.c: Likewise.
* gcc.target/arm/data-rel-3.c: Ditto.
* gcc.target/arm/pr44788.c: Ditto.
* gcc.target/arm/pr52006.c: Ditto.
* gcc.target/arm/pr59858.c: Ditto.
* gcc.target/arm/tlscall.c: Ditto.
* gcc.target/arm/require-pic-register-loc.c: Ditto.
Adjust line numbers.
Nathan Sidwell [Wed, 23 Dec 2020 22:17:17 +0000 (14:17 -0800)]
c++: EOF location [PR 96045]
Setting the EOF token location to be the start of a line just after
the ending newline is not most helpful. While that location is
probably the right place to report preprocessing and lexing issues,
when parsing, the location just after the last token is better. That
way we get to point at some actual text. Setting the location from
the previous token has the advantage over just setting the location to
be the end of the final line, in that any ending comments do not get
considered, which I think is better.
PR c++/96045
gcc/cp/
* parser.c (cp_lexer_new_main): Adjust EOF token location.
gcc/testsuite/
* g++.dg/diagnostic/pr96045-1.C: New.
* g++.dg/diagnostic/pr96045-2.C: New.
* g++.dg/diagnostic/pr96045-3.C: New.
* c-c++-common/goacc/pr79428-1.c: Adjust EOF diagnostic location.
* c-c++-common/gomp/pr79428-2.c: Likewise
* c-c++-common/raw-string-6.c: Likewise
* g++.dg/cpp0x/decltype63.C: Likewise
* g++.dg/cpp0x/gen-attrs-64.C: Likewise
* g++.dg/cpp0x/pr68726.C: Likewise
* g++.dg/cpp0x/pr78341.C: Likewise
* g++.dg/cpp1y/pr65202.C: Likewise
* g++.dg/cpp1y/pr65340.C: Likewise
* g++.dg/cpp1y/pr68578.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/attr4.C: Likewise
* g++.dg/parse/cond4.C: Likewise
* g++.dg/parse/crash10.C: Likewise
* g++.dg/parse/crash18.C: Likewise
* g++.dg/parse/crash27.C: Likewise
* g++.dg/parse/crash34.C: Likewise
* g++.dg/parse/crash35.C: Likewise
* g++.dg/parse/crash52.C: Likewise
* g++.dg/parse/crash59.C: Likewise
* g++.dg/parse/crash61.C: Likewise
* g++.dg/parse/crash67.C: Likewise
* g++.dg/parse/error14.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/parse/pr96258.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/crash90.C: Likewise
* g++.dg/template/error-recovery1.C: Likewise
* g++.dg/template/error57.C: Likewise
* g++.old-deja/g++.other/crash31.C: Likewise
Jason Merrill [Tue, 22 Dec 2020 20:41:56 +0000 (15:41 -0500)]
c++: Fix initializing empty base from prvalue [PR97597]
unsafe_return_slot_p wasn't recognizing an empty base as
potentially-overlapping, which it definitely is.
The change to build_base_path is to make the virtual conversion also
recognized by is_empty_base_ref; unsafe_return_slot_p doesn't to handle
virtual conversions, but hypothetical future callers might.
gcc/cp/ChangeLog:
PR c++/97597
* class.c (is_empty_base_ref): New.
(build_base_path): Add NOP_EXPR after offset.
* cp-tree.h (is_empty_base_ref): Declare it.
* call.c (unsafe_return_slot_p): Call it.
gcc/testsuite/ChangeLog:
PR c++/97597
* g++.dg/init/empty3.C: New test.
Ian Lance Taylor [Wed, 23 Dec 2020 21:54:35 +0000 (13:54 -0800)]
compiler: nil-checked pointers and index expressions can trap
The compiler was treating indirections through pointers that had been
explicitly checked against nil and slice and string index expressions
as non-trapping memory references. That is true for ordinary Go
programs, but it isn't true if the programs construct their own memory
addresses. In particular it isn't true for the kinds of programs that
want to use runtime.SetPanicOnFault.
The effect of this will be slightly larger binaries, due to additional
exception information, and perhaps slightly less optimization.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/279960
Jason Merrill [Wed, 23 Dec 2020 22:06:39 +0000 (17:06 -0500)]
c++: Improve testcase [PR98332]
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/constexpr-overflow3.C: Use INT_MAX.
Jakub Jelinek [Wed, 23 Dec 2020 21:45:56 +0000 (22:45 +0100)]
c++: Fix up floating point complex handling in build_zero_init_1 [PR98353]
While the gimplifier patch I've just committed fixed an ICE, in some cases
like on the committed testcase cp folding doesn't happen after
build_zero_init_1 because it is called already during gimplification.
For the scalar types, if we want to use convert, the problem with complex floats
is that it returns a COMPLEX_EXPR with FLOAT_EXPR arguments which have
INTEGER_CST 0 as argument. As fold isn't recursive, it doesn't do anything
in that case, we need to first fold those FLOAT_EXPRs to REAL_CST 0.0 and
only afterwards the COMPLEX_EXPR can be folded into COMPLEX_CST with 0.0
arguments.
This patch instead just uses build_zero_cst that creates the zero constant for
any scalar types (and more) directly, instead of going through multiple hops.
2020-12-23 Jakub Jelinek <jakub@redhat.com>
PR c++/98353
* init.c (build_zero_init_1): Use build_zero_cst for SCALAR_TYPE_P
zero initializers.
Jason Merrill [Tue, 22 Dec 2020 21:40:37 +0000 (16:40 -0500)]
c++: Fix constexpr array ICE [PR98332]
The element initializer was non-constant, so its CONSTRUCTOR element ended
up NULL, so unshare_constructor crashed trying to look at it. This patch
fixes this in two places: First, by returning when we see a non-constant
initializer; second, by not crashing on NULL.
gcc/cp/ChangeLog:
PR c++/98332
* constexpr.c (unshare_constructor): Check for NULL.
(cxx_eval_vec_init_1): Always exit early if non-constant.
gcc/testsuite/ChangeLog:
PR c++/98332
* g++.dg/cpp0x/constexpr-overflow3.C: New test.
Iain Sandoe [Wed, 23 Dec 2020 17:16:08 +0000 (17:16 +0000)]
Darwin : Adjust handling of MACOSX_DEPLOYMENT_TARGET for macOS 11.
The shift to macOS version 11 also means that '11' without any
following '.x' is accepted as a valid version number. This adjusts
the validation code to accept this and map it to 11.0.0 which
matches what the clang toolchain appears to do.
gcc/ChangeLog:
* config/darwin-driver.c (validate_macosx_version_min): Allow
MACOSX_DEPLOYMENT_TARGET=11.
(darwin_default_min_version): Adjust warning spelling to avoid
an apostrophe.
Ian Lance Taylor [Wed, 23 Dec 2020 06:26:43 +0000 (22:26 -0800)]
compiler: remove references to slicecopy and slicestringcopy
The only calls to the runtime functions were removed in CL 170005.
The slicestringcopy function will be removed in the Go 1.16beta1 release.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/279932
Iain Buclaw [Tue, 22 Dec 2020 08:47:22 +0000 (09:47 +0100)]
d: Force TYPE_MODE of classes and non-POD structs as BLKmode
Without this being forced, the optimizer could still make decisions that
require objects of the non-POD types to need a temporary, which would
result in an ICE during the expand to RTL passes.
gcc/d/ChangeLog:
PR d/98427
* types.cc (TypeVisitor::visit (TypeStruct *)): Set TYPE_MODE of all
non-trivial types as BLKmode.
(TypeVisitor::visit (TypeClass *)): Likewise.
gcc/testsuite/ChangeLog:
PR d/98427
* gdc.dg/pr98427.d: New test.
Nathan Sidwell [Wed, 23 Dec 2020 16:04:52 +0000 (08:04 -0800)]
libcody: Remove testsuite [PR 98318]
libcody's testsuite is not very portable, and is testing a host
library, so will do weird things on cross compiling, I think. Let's
just drop it.
libcody/
* Makefile.in (LDFLAGS): Drop -L..
* tests/01-serialize/connect.cc: Delete.
* tests/01-serialize/decoder.cc: Delete.
* tests/01-serialize/encoder.cc: Delete.
* tests/02-comms/client-1.cc: Delete.
* tests/02-comms/pivot-1.cc: Delete.
* tests/02-comms/server-1.cc: Delete.
* tests/Makesub.in: Delete.
* tests/jouster: Delete.
Uros Bizjak [Wed, 23 Dec 2020 15:47:52 +0000 (16:47 +0100)]
i386: Fix __builtin_trunc with FE_DOWNWARD rounding direction [PR96793]
x86_expand_truncdf_32 expander uses x86_sse_copysign_to_positive, which
is unable to change the sign from - to +. When FE_DOWNWARD rounding
direction is in effect, the expanded sequence that involves subtraction
can trigger x - x = -0.0 special rule. x86_sse_copysign_to_positive
fails to change the sign of the intermediate value, assumed to always
be positive, back to positive.
The patch adds one extra fabs that strips the sign from the intermediate
value when flag_rounding_math is in effect.
2020-12-23 Uroš Bizjak <ubizjak@gmail.com>
gcc/
PR target/96793
* config/i386/i386-expand.c (ix86_expand_truncdf_32):
Remove the sign of the intermediate value for flag_rounding_math.
gcc/testsuite/
PR target/96793
* gcc.target/i386/pr96793-1.c: New test.
Nathan Sidwell [Wed, 23 Dec 2020 12:50:00 +0000 (04:50 -0800)]
c++tools: Fix PIE [PR 98324]
This adds --enable-default-pie support to c++tools, so that the sample
server is build -fPIE if requested.
PR bootstrap/98324
c++tools/
* Makefile.in: Add FLAGPIE.
* configure.ac: Add --enable-default-pie support.
* configure: Rebuilt.
GCC Administrator [Wed, 23 Dec 2020 00:16:35 +0000 (00:16 +0000)]
Daily bump.
Ian Lance Taylor [Tue, 22 Dec 2020 21:50:18 +0000 (13:50 -0800)]
compiler: initialize saw_send_stmt locals
The C++ compiler wasn't warning because we take their address.
Fixes golang/go#43252
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/279752
Ian Lance Taylor [Tue, 22 Dec 2020 19:04:35 +0000 (11:04 -0800)]
runtime: eliminate scase.kind field
This is the gofrontend version of https://golang.org/cl/245125.
Original CL description:
Currently, we include a "kind" field on scase to distinguish the three
kinds of cases in a select statement: sends, receives, and defaults.
This commit removes by kind field by instead arranging for the
compiler to always place sends before receives, and to provide their
counts separately. It also passes an explicit "block bool" parameter
to avoid needing to include a default case in the array.
It's safe to shuffle cases like this because the runtime will
randomize the order they're polled in anyway.
For golang/go#40410.
This is being brought over to gofrontend as a step toward upgrading to
Go1.16beta1.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/279735
Nathan Sidwell [Tue, 22 Dec 2020 20:42:00 +0000 (12:42 -0800)]
testsuite: C++ module tests
This adds most of the modules tests. I do not include the tests that
excercise system & C++ library header files. Those will be later.
gcc/testsuite/
* g++.dg/modules/access-1_a.C: New.: New.
* g++.dg/modules/access-1_b.C: New.
* g++.dg/modules/access-1_c.C: New.
* g++.dg/modules/adhoc-1_a.C: New.
* g++.dg/modules/adhoc-1_b.C: New.
* g++.dg/modules/adl-1_a.C: New.
* g++.dg/modules/adl-1_b.C: New.
* g++.dg/modules/adl-1_c.C: New.
* g++.dg/modules/adl-2_a.C: New.
* g++.dg/modules/adl-2_b.C: New.
* g++.dg/modules/adl-2_c.C: New.
* g++.dg/modules/adl-3_a.C: New.
* g++.dg/modules/adl-3_b.C: New.
* g++.dg/modules/adl-3_c.C: New.
* g++.dg/modules/adl-4_a.C: New.
* g++.dg/modules/adl-4_b.C: New.
* g++.dg/modules/adl-5_a.c: New.
* g++.dg/modules/adl-5_b.C: New.
* g++.dg/modules/adl-5_c.C: New.
* g++.dg/modules/adl-5_d.C: New.
* g++.dg/modules/alias-1_a.H: New.
* g++.dg/modules/alias-1_b.C: New.
* g++.dg/modules/alias-1_c.C: New.
* g++.dg/modules/alias-1_d.C: New.
* g++.dg/modules/alias-1_e.C: New.
* g++.dg/modules/alias-1_f.C: New.
* g++.dg/modules/alias-2_a.H: New.
* g++.dg/modules/alias-2_b.C: New.
* g++.dg/modules/align-type-1_a.C: New.
* g++.dg/modules/align-type-1_b.C: New.
* g++.dg/modules/ambig-1_a.C: New.
* g++.dg/modules/ambig-1_b.C: New.
* g++.dg/modules/anon-1_a.C: New.
* g++.dg/modules/anon-1_b.C: New.
* g++.dg/modules/anon-1_c.C: New.
* g++.dg/modules/anon-2.h: New.
* g++.dg/modules/anon-2_a.H: New.
* g++.dg/modules/anon-2_b.C: New.
* g++.dg/modules/atom-decl-0_a.C: New.
* g++.dg/modules/atom-decl-0_b.C: New.
* g++.dg/modules/atom-decl-0_c.C: New.
* g++.dg/modules/atom-decl-2.C: New.
* g++.dg/modules/atom-decl-3.C: New.
* g++.dg/modules/atom-pragma-1.C: New.
* g++.dg/modules/atom-pragma-3.C: New.
* g++.dg/modules/atom-preamble-1.C: New.
* g++.dg/modules/atom-preamble-2_a.C: New.
* g++.dg/modules/atom-preamble-2_b.C: New.
* g++.dg/modules/atom-preamble-2_c.C: New.
* g++.dg/modules/atom-preamble-2_d.C: New.
* g++.dg/modules/atom-preamble-2_e.C: New.
* g++.dg/modules/atom-preamble-2_f.C: New.
* g++.dg/modules/atom-preamble-3.C: New.
* g++.dg/modules/atom-preamble-4.C: New.
* g++.dg/modules/auto-1.h: New.
* g++.dg/modules/auto-1_a.H: New.
* g++.dg/modules/auto-1_b.C: New.
* g++.dg/modules/auto-2.h: New.
* g++.dg/modules/auto-2_a.H: New.
* g++.dg/modules/auto-2_b.C: New.
* g++.dg/modules/bad-mapper-1.C: New.
* g++.dg/modules/bad-mapper-2.C: New.
* g++.dg/modules/bad-mapper-3.C: New.
* g++.dg/modules/ben-1.map: New.
* g++.dg/modules/ben-1_a.C: New.
* g++.dg/modules/ben-1_b.C: New.
* g++.dg/modules/bfield-1_a.C: New.
* g++.dg/modules/bfield-1_b.C: New.
* g++.dg/modules/bfield-2_a.C: New.
* g++.dg/modules/bfield-2_b.C: New.
* g++.dg/modules/bool-1.h: New.
* g++.dg/modules/bool-1_a.H: New.
* g++.dg/modules/bool-1_b.H: New.
* g++.dg/modules/bool-1_c.C: New.
* g++.dg/modules/bug-1_a.C: New.
* g++.dg/modules/bug-1_b.C: New.
* g++.dg/modules/builtin-1_a.C: New.
* g++.dg/modules/builtin-1_b.C: New.
* g++.dg/modules/builtin-2.C: New.
* g++.dg/modules/builtin-3_b.C: New.
* g++.dg/modules/builtin-4_a.H: New.
* g++.dg/modules/builtin-4_b.C: New.
* g++.dg/modules/builtin-5_a.H: New.
* g++.dg/modules/builtin-5_b.C: New.
* g++.dg/modules/builtin-6_a.H: New.
* g++.dg/modules/builtin-6_b.C: New.
* g++.dg/modules/builtin-7_a.H: New.
* g++.dg/modules/builtin-7_b.C: New.
* g++.dg/modules/by-name-1.C: New.
* g++.dg/modules/cexpr-1_a.C: New.
* g++.dg/modules/cexpr-1_b.C: New.
* g++.dg/modules/cexpr-2_a.C: New.
* g++.dg/modules/cexpr-2_b.C: New.
* g++.dg/modules/circ-1_a.C: New.
* g++.dg/modules/circ-1_b.C: New.
* g++.dg/modules/circ-1_c.C: New.
* g++.dg/modules/circ-1_d.C: New.
* g++.dg/modules/class-1_a.C: New.
* g++.dg/modules/class-1_b.C: New.
* g++.dg/modules/class-1_c.C: New.
* g++.dg/modules/class-2_a.C: New.
* g++.dg/modules/class-2_b.C: New.
* g++.dg/modules/class-3_a.C: New.
* g++.dg/modules/class-3_b.C: New.
* g++.dg/modules/class-3_c.C: New.
* g++.dg/modules/class-3_d.C: New.
* g++.dg/modules/class-4_a.C: New.
* g++.dg/modules/class-4_b.C: New.
* g++.dg/modules/class-5_a.C: New.
* g++.dg/modules/class-5_b.C: New.
* g++.dg/modules/class-5_c.C: New.
* g++.dg/modules/class-6_a.C: New.
* g++.dg/modules/class-6_b.C: New.
* g++.dg/modules/class-6_c.C: New.
* g++.dg/modules/class-7_a.C: New.
* g++.dg/modules/class-7_b.C: New.
* g++.dg/modules/class-7_c.C: New.
* g++.dg/modules/class-8_a.C: New.
* g++.dg/modules/class-8_b.C: New.
* g++.dg/modules/clone-1_a.C: New.
* g++.dg/modules/clone-1_b.C: New.
* g++.dg/modules/concept-1_a.C: New.
* g++.dg/modules/concept-1_b.C: New.
* g++.dg/modules/concept-2_a.C: New.
* g++.dg/modules/concept-2_b.C: New.
* g++.dg/modules/concept-3_a.C: New.
* g++.dg/modules/concept-3_b.C: New.
* g++.dg/modules/concept-4.H: New.
* g++.dg/modules/concept-5.h: New.
* g++.dg/modules/concept-5_a.H: New.
* g++.dg/modules/concept-5_b.C: New.
* g++.dg/modules/concept-6.h: New.
* g++.dg/modules/concept-6_a.H: New.
* g++.dg/modules/concept-6_b.C: New.
* g++.dg/modules/constrained-partial-1_a.C: New.
* g++.dg/modules/constrained-partial-1_b.C: New.
* g++.dg/modules/convop-1_a.C: New.
* g++.dg/modules/convop-1_b.C: New.
* g++.dg/modules/cpp-1.C: New.
* g++.dg/modules/cpp-2_a.H: New.
* g++.dg/modules/cpp-2_b.H: New.
* g++.dg/modules/cpp-2_c.C: New.
* g++.dg/modules/cpp-3.C: New.
* g++.dg/modules/cpp-4.C: New.
* g++.dg/modules/cpp-4.h: New.
* g++.dg/modules/cpp-5_a.H: New.
* g++.dg/modules/cpp-5_b.C: New.
* g++.dg/modules/cpp-5_c.C: New.
* g++.dg/modules/cpp-6_a.H: New.
* g++.dg/modules/cpp-6_b.H: New.
* g++.dg/modules/cpp-6_c.C: New.
* g++.dg/modules/debug-1_a.C: New.
* g++.dg/modules/debug-1_b.C: New.
* g++.dg/modules/decomp-1_a.C: New.
* g++.dg/modules/decomp-1_b.C: New.
* g++.dg/modules/deferred-1.h: New.
* g++.dg/modules/deferred-1_a.H: New.
* g++.dg/modules/deferred-1_b.C: New.
* g++.dg/modules/dep-1_a.C: New.
* g++.dg/modules/dep-1_b.C: New.
* g++.dg/modules/dep-2.C: New.
* g++.dg/modules/dep-3.C: New.
* g++.dg/modules/dir-only-1.C: New.
* g++.dg/modules/dir-only-2_a.H: New.
* g++.dg/modules/dir-only-2_b.C: New.
* g++.dg/modules/dir-only-3.C: New.
* g++.dg/modules/dir-only-4.C: New.
* g++.dg/modules/dir-recovery.C: New.
* g++.dg/modules/enum-1_a.C: New.
* g++.dg/modules/enum-1_b.C: New.
* g++.dg/modules/enum-2_a.C: New.
* g++.dg/modules/enum-2_b.C: New.
* g++.dg/modules/enum-3_a.C: New.
* g++.dg/modules/enum-3_b.C: New.
* g++.dg/modules/enum-4_a.C: New.
* g++.dg/modules/enum-4_b.C: New.
* g++.dg/modules/enum-5_a.H: New.
* g++.dg/modules/enum-5_b.C: New.
* g++.dg/modules/enum-6_a.H: New.
* g++.dg/modules/enum-6_b.C: New.
* g++.dg/modules/enum-7.C: New.
* g++.dg/modules/enum-8_a.H: New.
* g++.dg/modules/enum-8_b.H: New.
* g++.dg/modules/enum-8_c.C: New.
* g++.dg/modules/enum-8_d.C: New.
* g++.dg/modules/enum-bad-1_a.H: New.
* g++.dg/modules/enum-bad-1_b.C: New.
* g++.dg/modules/err-1_a.C: New.
* g++.dg/modules/err-1_b.C: New.
* g++.dg/modules/err-1_c.C: New.
* g++.dg/modules/err-1_d.C: New.
* g++.dg/modules/except-1.C: New.
* g++.dg/modules/except-2.h: New.
* g++.dg/modules/except-2_a.H: New.
* g++.dg/modules/except-2_b.C: New.
* g++.dg/modules/except-3.h: New.
* g++.dg/modules/except-3_a.H: New.
* g++.dg/modules/except-3_b.C: New.
* g++.dg/modules/exp-xlate-1_a.H: New.
* g++.dg/modules/exp-xlate-1_b.C: New.
* g++.dg/modules/export-1.C: New.
* g++.dg/modules/extern-tpl-1_a.H: New.
* g++.dg/modules/extern-tpl-1_b.C: New.
* g++.dg/modules/extern-tpl-1_c.C: New.
* g++.dg/modules/extern-tpl-2_a.H: New.
* g++.dg/modules/extern-tpl-2_b.H: New.
* g++.dg/modules/extern-tpl-2_c.C: New.
* g++.dg/modules/extern-tpl-2_d.C: New.
* g++.dg/modules/flag-1_a.C: New.
* g++.dg/modules/flag-1_b.C: New.
* g++.dg/modules/fn-inline-1_a.C: New.
* g++.dg/modules/fn-inline-1_b.C: New.
* g++.dg/modules/fn-inline-1_c.C: New.
* g++.dg/modules/freeze-1_a.C: New.
* g++.dg/modules/freeze-1_b.C: New.
* g++.dg/modules/freeze-1_c.C: New.
* g++.dg/modules/freeze-1_d.C: New.
* g++.dg/modules/friend-1_a.C: New.
* g++.dg/modules/friend-1_b.C: New.
* g++.dg/modules/friend-1_c.C: New.
* g++.dg/modules/friend-2_a.C: New.
* g++.dg/modules/friend-2_b.C: New.
* g++.dg/modules/friend-3.C: New.
* g++.dg/modules/friend-4_a.C: New.
* g++.dg/modules/friend-4_b.C: New.
* g++.dg/modules/friend-5_a.C: New.
* g++.dg/modules/friend-5_b.C: New.
* g++.dg/modules/gc-1_a.C: New.
* g++.dg/modules/gc-1_b.C: New.
* g++.dg/modules/gc-1_c.C: New.
* g++.dg/modules/gc-1_d.C: New.
* g++.dg/modules/gc-2.map: New.
* g++.dg/modules/gc-2_a.C: New.
* g++.dg/modules/global-1_a.C: New.
* g++.dg/modules/global-1_b.C: New.
* g++.dg/modules/gmf-1_a.C: New.
* g++.dg/modules/gmf-1_b.C: New.
* g++.dg/modules/gmf-2_a.H: New.
* g++.dg/modules/gmf-2_b.C: New.
* g++.dg/modules/gmf-2_c.C: New.
* g++.dg/modules/gmf-2_d.C: New.
* g++.dg/modules/gvar_a.C: New.
* g++.dg/modules/gvar_b.C: New.
* g++.dg/modules/hdr-1_a.H: New.
* g++.dg/modules/hdr-1_b.H: New.
* g++.dg/modules/hdr-1_c.C: New.
* g++.dg/modules/hdr-init-1_a.H: New.
* g++.dg/modules/hdr-init-1_b.H: New.
* g++.dg/modules/hdr-init-1_c.C: New.
* g++.dg/modules/horcrux-1_a.C: New.
* g++.dg/modules/horcrux-1_b.C: New.
* g++.dg/modules/ice-1.C: New.
* g++.dg/modules/imp-inline-1_a.C: New.
* g++.dg/modules/imp-inline-1_b.C: New.
* g++.dg/modules/imp-member-1_a.C: New.
* g++.dg/modules/imp-member-1_b.C: New.
* g++.dg/modules/imp-member-1_c.C: New.
* g++.dg/modules/imp-member-1_d.C: New.
* g++.dg/modules/imp-member-1_e.C: New.
* g++.dg/modules/imp-member-2_a.C: New.
* g++.dg/modules/imp-member-2_b.C: New.
* g++.dg/modules/imp-member-2_c.C: New.
* g++.dg/modules/imp-member-3.H: New.
* g++.dg/modules/import-1_a.C: New.
* g++.dg/modules/import-1_b.C: New.
* g++.dg/modules/import-1_c.C: New.
* g++.dg/modules/import-1_d.C: New.
* g++.dg/modules/import-1_e.C: New.
* g++.dg/modules/import-1_f.C: New.
* g++.dg/modules/import-1_g.C: New.
* g++.dg/modules/import-2.C: New.
* g++.dg/modules/inc-xlate-1.map: New.
* g++.dg/modules/inc-xlate-1_a.H: New.
* g++.dg/modules/inc-xlate-1_b.H: New.
* g++.dg/modules/inc-xlate-1_c.C: New.
* g++.dg/modules/inc-xlate-1_e.C: New.
* g++.dg/modules/indirect-1_a.C: New.
* g++.dg/modules/indirect-1_b.C: New.
* g++.dg/modules/indirect-1_c.C: New.
* g++.dg/modules/indirect-2_a.C: New.
* g++.dg/modules/indirect-2_b.C: New.
* g++.dg/modules/indirect-2_c.C: New.
* g++.dg/modules/indirect-3_a.C: New.
* g++.dg/modules/indirect-3_b.C: New.
* g++.dg/modules/indirect-3_c.C: New.
* g++.dg/modules/indirect-4_a.C: New.
* g++.dg/modules/indirect-4_b.C: New.
* g++.dg/modules/indirect-4_c.C: New.
* g++.dg/modules/inext-1.H: New.
* g++.dg/modules/inh-tmpl-ctor-1.h: New.
* g++.dg/modules/inh-tmpl-ctor-1_a.H: New.
* g++.dg/modules/inh-tmpl-ctor-1_b.C: New.
* g++.dg/modules/init-1_a.C: New.
* g++.dg/modules/init-1_b.C: New.
* g++.dg/modules/init-2_a.C: New.
* g++.dg/modules/init-2_b.C: New.
* g++.dg/modules/init-2_c.C: New.
* g++.dg/modules/inst-1_a.C: New.
* g++.dg/modules/inst-1_b.C: New.
* g++.dg/modules/inst-2_a.C: New.
* g++.dg/modules/inst-2_b.C: New.
* g++.dg/modules/inst-3_a.C: New.
* g++.dg/modules/inst-3_b.C: New.
* g++.dg/modules/inst-4_a.C: New.
* g++.dg/modules/inst-4_b.C: New.
* g++.dg/modules/inst-5_a.H: New.
* g++.dg/modules/inst-5_b.C: New.
* g++.dg/modules/internal-1.C: New.
* g++.dg/modules/internal-2_a.H: New.
* g++.dg/modules/internal-2_b.H: New.
* g++.dg/modules/internal-2_c.C: New.
* g++.dg/modules/isalnum.H: New.
* g++.dg/modules/keyword-1_a.C: New.
* g++.dg/modules/keyword-1_b.C: New.
* g++.dg/modules/lambda-1_a.C: New.
* g++.dg/modules/lambda-1_b.C: New.
* g++.dg/modules/lambda-2.h: New.
* g++.dg/modules/lambda-2_a.H: New.
* g++.dg/modules/lambda-2_b.C: New.
* g++.dg/modules/lambda-2_c.C: New.
* g++.dg/modules/lambda-3.h: New.
* g++.dg/modules/lambda-3_a.H: New.
* g++.dg/modules/lambda-3_b.C: New.
* g++.dg/modules/lambda-3_c.C: New.
* g++.dg/modules/lambda-4.h: New.
* g++.dg/modules/lambda-4_a.H: New.
* g++.dg/modules/lambda-4_b.C: New.
* g++.dg/modules/lang-1_a.H: New.
* g++.dg/modules/lang-1_b.C: New.
* g++.dg/modules/lang-1_c.C: New.
* g++.dg/modules/lang-2_a.C: New.
* g++.dg/modules/lang-2_b.C: New.
* g++.dg/modules/late-ret-1.H: New.
* g++.dg/modules/late-ret-2_a.H: New.
* g++.dg/modules/late-ret-2_b.H: New.
* g++.dg/modules/late-ret-2_c.C: New.
* g++.dg/modules/late-ret-3_a.H: New.
* g++.dg/modules/late-ret-3_b.H: New.
* g++.dg/modules/late-ret-3_c.C: New.
* g++.dg/modules/lazy-1_a.C: New.
* g++.dg/modules/lazy-1_b.C: New.
* g++.dg/modules/leg-merge-1_a.H: New.
* g++.dg/modules/leg-merge-1_b.H: New.
* g++.dg/modules/leg-merge-1_c.C: New.
* g++.dg/modules/leg-merge-1_d.C: New.
* g++.dg/modules/leg-merge-2_a.H: New.
* g++.dg/modules/leg-merge-2_b.H: New.
* g++.dg/modules/leg-merge-2_c.C: New.
* g++.dg/modules/leg-merge-3_a.H: New.
* g++.dg/modules/leg-merge-3_b.H: New.
* g++.dg/modules/leg-merge-3_c.C: New.
* g++.dg/modules/leg-merge-3_d.C: New.
* g++.dg/modules/leg-merge-4_a.H: New.
* g++.dg/modules/leg-merge-4_b.H: New.
* g++.dg/modules/leg-merge-4_c.C: New.
* g++.dg/modules/leg-merge-5_a.H: New.
* g++.dg/modules/leg-merge-5_b.H: New.
* g++.dg/modules/leg-merge-5_c.C: New.
* g++.dg/modules/leg-merge-6_a.H: New.
* g++.dg/modules/leg-merge-6_b.H: New.
* g++.dg/modules/leg-merge-6_c.C: New.
* g++.dg/modules/leg-merge-7_a.H: New.
* g++.dg/modules/leg-merge-7_b.H: New.
* g++.dg/modules/leg-merge-7_c.C: New.
* g++.dg/modules/leg-merge-8_a.H: New.
* g++.dg/modules/leg-merge-8_b.H: New.
* g++.dg/modules/leg-merge-8_c.C: New.
* g++.dg/modules/leg-merge-9_a.H: New.
* g++.dg/modules/leg-merge-9_b.H: New.
* g++.dg/modules/leg-merge-9_c.C: New.
* g++.dg/modules/legacy-1_a.H: New.
* g++.dg/modules/legacy-1_b.C: New.
* g++.dg/modules/legacy-1_c.C: New.
* g++.dg/modules/legacy-2.h: New.
* g++.dg/modules/legacy-2.map: New.
* g++.dg/modules/legacy-2_a.H: New.
* g++.dg/modules/legacy-2_b.H: New.
* g++.dg/modules/legacy-2_c.C: New.
* g++.dg/modules/legacy-2_d.C: New.
* g++.dg/modules/legacy-3.h: New.
* g++.dg/modules/legacy-3_a.H: New.
* g++.dg/modules/legacy-3_b.H: New.
* g++.dg/modules/legacy-3_c.H: New.
* g++.dg/modules/legacy-6.map: New.
* g++.dg/modules/legacy-6_a.H: New.
* g++.dg/modules/legacy-6_b.H: New.
* g++.dg/modules/legacy-6_c.C: New.
* g++.dg/modules/legacy-6_d.C: New.
* g++.dg/modules/legacy-6_e.C: New.
* g++.dg/modules/legacy-6_f.C: New.
* g++.dg/modules/legacy-7_a.H: New.
* g++.dg/modules/legacy-7_b.C: New.
* g++.dg/modules/legacy-8_a.H: New.
* g++.dg/modules/legacy-8_b.H: New.
* g++.dg/modules/legacy-8_c.C: New.
* g++.dg/modules/legacy-8_d.C: New.
* g++.dg/modules/legacy-8_e.C: New.
* g++.dg/modules/libfn-1_a.C: New.
* g++.dg/modules/libfn-1_b.C: New.
* g++.dg/modules/literals-1_a.C: New.
* g++.dg/modules/literals-1_b.C: New.
* g++.dg/modules/loc-1_a.C: New.
* g++.dg/modules/loc-1_b.C: New.
* g++.dg/modules/loc-1_c.C: New.
* g++.dg/modules/loc-2_a.C: New.
* g++.dg/modules/loc-2_b.C: New.
* g++.dg/modules/loc-2_c.C: New.
* g++.dg/modules/loc-2_d.C: New.
* g++.dg/modules/loc-2_e.C: New.
* g++.dg/modules/loc-2_f.C: New.
* g++.dg/modules/loc-wrapper-1.h: New.
* g++.dg/modules/loc-wrapper-1_a.H: New.
* g++.dg/modules/loc-wrapper-1_b.C: New.
* g++.dg/modules/local-1_a.C: New.
* g++.dg/modules/local-1_b.C: New.
* g++.dg/modules/local-extern-1.C: New.
* g++.dg/modules/local-extern-2.H: New.
* g++.dg/modules/local-struct-1_a.C: New.
* g++.dg/modules/local-struct-1_b.C: New.
* g++.dg/modules/macloc-1_a.C: New.
* g++.dg/modules/macloc-1_b.C: New.
* g++.dg/modules/macloc-1_c.C: New.
* g++.dg/modules/macloc-1_d.C: New.
* g++.dg/modules/macloc-2_a.H: New.
* g++.dg/modules/macloc-2_b.C: New.
* g++.dg/modules/macro-1_a.H: New.
* g++.dg/modules/macro-1_b.C: New.
* g++.dg/modules/macro-2_a.H: New.
* g++.dg/modules/macro-2_b.H: New.
* g++.dg/modules/macro-2_c.H: New.
* g++.dg/modules/macro-2_d.C: New.
* g++.dg/modules/macro-3_a.H: New.
* g++.dg/modules/macro-3_b.H: New.
* g++.dg/modules/macro-3_c.C: New.
* g++.dg/modules/macro-4_a.H: New.
* g++.dg/modules/macro-4_b.H: New.
* g++.dg/modules/macro-4_c.H: New.
* g++.dg/modules/macro-4_d.C: New.
* g++.dg/modules/macro-4_e.C: New.
* g++.dg/modules/macro-4_f.C: New.
* g++.dg/modules/macro-4_g.C: New.
* g++.dg/modules/macro-5_a.H: New.
* g++.dg/modules/macro-5_b.H: New.
* g++.dg/modules/macro-5_c.C: New.
* g++.dg/modules/macro-6_a.H: New.
* g++.dg/modules/macro-6_b.C: New.
* g++.dg/modules/macro-6_c.C: New.
* g++.dg/modules/macro-7_a.C: New.
* g++.dg/modules/macro-7_b.C: New.
* g++.dg/modules/macro-7_c.C: New.
* g++.dg/modules/map-1.map: New.
* g++.dg/modules/map-1_a.C: New.
* g++.dg/modules/map-1_b.C: New.
* g++.dg/modules/map-1_b.map: New.
* g++.dg/modules/map-2.C: New.
* g++.dg/modules/map-2.map: New.
* g++.dg/modules/member-def-1_a.C: New.
* g++.dg/modules/member-def-1_b.C: New.
* g++.dg/modules/member-def-1_c.C: New.
* g++.dg/modules/member-def-1_d.C: New.
* g++.dg/modules/member-def-2_a.C: New.
* g++.dg/modules/member-def-2_b.C: New.
* g++.dg/modules/member-def-2_c.C: New.
* g++.dg/modules/member-def-2_d.C: New.
* g++.dg/modules/memref-1_a.C: New.
* g++.dg/modules/memref-1_b.C: New.
* g++.dg/modules/merge-10.h: New.
* g++.dg/modules/merge-10_a.H: New.
* g++.dg/modules/merge-10_b.C: New.
* g++.dg/modules/merge-11.h: New.
* g++.dg/modules/merge-11_a.H: New.
* g++.dg/modules/merge-11_b.C: New.
* g++.dg/modules/merge-12.h: New.
* g++.dg/modules/merge-12_a.H: New.
* g++.dg/modules/merge-12_b.C: New.
* g++.dg/modules/merge-13.h: New.
* g++.dg/modules/merge-13_a.H: New.
* g++.dg/modules/merge-13_b.C: New.
* g++.dg/modules/merge-14.h: New.
* g++.dg/modules/merge-14_a.H: New.
* g++.dg/modules/merge-14_b.C: New.
* g++.dg/modules/merge-15.h: New.
* g++.dg/modules/merge-15_a.H: New.
* g++.dg/modules/merge-15_b.C: New.
* g++.dg/modules/merge-1_a.C: New.
* g++.dg/modules/merge-1_b.C: New.
* g++.dg/modules/merge-2_a.H: New.
* g++.dg/modules/merge-2_b.C: New.
* g++.dg/modules/merge-3_a.H: New.
* g++.dg/modules/merge-3_b.C: New.
* g++.dg/modules/merge-4.h: New.
* g++.dg/modules/merge-4_a.H: New.
* g++.dg/modules/merge-4_b.C: New.
* g++.dg/modules/merge-5.h: New.
* g++.dg/modules/merge-5_a.H: New.
* g++.dg/modules/merge-5_b.C: New.
* g++.dg/modules/merge-6.h: New.
* g++.dg/modules/merge-6_a.H: New.
* g++.dg/modules/merge-6_b.C: New.
* g++.dg/modules/merge-7.h: New.
* g++.dg/modules/merge-7_a.H: New.
* g++.dg/modules/merge-7_b.C: New.
* g++.dg/modules/merge-8.h: New.
* g++.dg/modules/merge-8_a.H: New.
* g++.dg/modules/merge-8_b.C: New.
* g++.dg/modules/merge-9.h: New.
* g++.dg/modules/merge-9_a.H: New.
* g++.dg/modules/merge-9_b.C: New.
* g++.dg/modules/mod-exp-1_a.C: New.
* g++.dg/modules/mod-exp-1_b.C: New.
* g++.dg/modules/mod-imp-1_a.C: New.
* g++.dg/modules/mod-imp-1_b.C: New.
* g++.dg/modules/mod-imp-1_c.C: New.
* g++.dg/modules/mod-imp-1_d.C: New.
* g++.dg/modules/mod-impl-1_a.C: New.
* g++.dg/modules/mod-impl-1_b.C: New.
* g++.dg/modules/mod-impl-1_c.C: New.
* g++.dg/modules/mod-impl-1_d.C: New.
* g++.dg/modules/mod-indirect-1_a.C: New.
* g++.dg/modules/mod-indirect-1_b.C: New.
* g++.dg/modules/mod-indirect-1_c.C: New.
* g++.dg/modules/mod-indirect-1_d.C: New.
* g++.dg/modules/mod-indirect-1_e.C: New.
* g++.dg/modules/mod-stamp-1_a.C: New.
* g++.dg/modules/mod-stamp-1_b.C: New.
* g++.dg/modules/mod-stamp-1_c.C: New.
* g++.dg/modules/mod-stamp-1_d.C: New.
* g++.dg/modules/mod-sym-1.C: New.
* g++.dg/modules/mod-sym-2.C: New.
* g++.dg/modules/mod-sym-3.C: New.
* g++.dg/modules/mod-tpl-1_a.C: New.
* g++.dg/modules/mod-tpl-1_b.C: New.
* g++.dg/modules/mod-tpl-2_a.C: New.
* g++.dg/modules/mod-tpl-2_b.C: New.
* g++.dg/modules/mutual-friend.ii: New.
* g++.dg/modules/namespace-1_a.C: New.
* g++.dg/modules/namespace-1_b.C: New.
* g++.dg/modules/namespace-1_c.C: New.
* g++.dg/modules/namespace-2_a.C: New.
* g++.dg/modules/namespace-2_b.C: New.
* g++.dg/modules/namespace-3_a.C: New.
* g++.dg/modules/namespace-3_b.C: New.
* g++.dg/modules/namespace-4_a.C: New.
* g++.dg/modules/namespace-4_b.C: New.
* g++.dg/modules/namespace-4_c.C: New.
* g++.dg/modules/nest-1_a.C: New.
* g++.dg/modules/nest-1_b.C: New.
* g++.dg/modules/nest-1_c.C: New.
* g++.dg/modules/nested-1_a.C: New.
* g++.dg/modules/nested-1_b.C: New.
* g++.dg/modules/nested-1_c.C: New.
* g++.dg/modules/nested-2_a.C: New.
* g++.dg/modules/nested-2_b.C: New.
* 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/nodes-1_a.C: New.
* g++.dg/modules/nodes-1_b.C: New.
* g++.dg/modules/noexcept-1.h: New.
* g++.dg/modules/noexcept-1_a.H: New.
* g++.dg/modules/noexcept-1_b.C: New.
* g++.dg/modules/ns-alias-1_a.C: New.
* g++.dg/modules/ns-alias-1_b.C: New.
* g++.dg/modules/ns-alias-1_c.C: New.
* g++.dg/modules/ns-dir-1_a.C: New.
* g++.dg/modules/ns-dir-1_b.C: New.
* g++.dg/modules/ns-dup-1_a.C: New.
* g++.dg/modules/ns-dup-1_b.C: New.
* g++.dg/modules/ns-imp-1_a.C: New.
* g++.dg/modules/ns-imp-1_b.C: New.
* g++.dg/modules/ns-imp-1_c.C: New.
* g++.dg/modules/ns-part-1_a.C: New.
* g++.dg/modules/ns-part-1_b.C: New.
* g++.dg/modules/ns-part-1_c.C: New.
* g++.dg/modules/nsdmi-1_a.C: New.
* g++.dg/modules/nsdmi-1_b.C: New.
* g++.dg/modules/nsdmi-2.C: New.
* g++.dg/modules/omp-1_a.C: New.
* g++.dg/modules/omp-1_b.C: New.
* g++.dg/modules/omp-1_c.C: New.
* g++.dg/modules/omp-2_a.C: New.
* g++.dg/modules/omp-2_b.C: New.
* g++.dg/modules/only-1.C: New.
* g++.dg/modules/only-2.C: New.
* g++.dg/modules/only-3.C: New.
* g++.dg/modules/operator-1_a.C: New.
* g++.dg/modules/operator-1_b.C: New.
* g++.dg/modules/p0713-1.C: New.
* g++.dg/modules/p0713-2.C: New.
* g++.dg/modules/p0713-3.C: New.
* g++.dg/modules/part-1_a.C: New.
* g++.dg/modules/part-1_b.C: New.
* g++.dg/modules/part-1_c.C: New.
* g++.dg/modules/part-2_a.C: New.
* g++.dg/modules/part-2_b.C: New.
* g++.dg/modules/part-2_c.C: New.
* g++.dg/modules/part-2_d.C: New.
* g++.dg/modules/part-2_e.C: New.
* g++.dg/modules/part-3_a.C: New.
* g++.dg/modules/part-3_b.C: New.
* g++.dg/modules/part-3_c.C: New.
* g++.dg/modules/part-3_d.C: New.
* g++.dg/modules/part-4_a.C: New.
* g++.dg/modules/part-4_b.C: New.
* g++.dg/modules/part-4_c.C: New.
* g++.dg/modules/part-6_a.C: New.
* g++.dg/modules/part-6_b.C: New.
* g++.dg/modules/part-6_c.C: New.
* g++.dg/modules/part-6_d.C: New.
* g++.dg/modules/part-6_e.C: New.
* g++.dg/modules/part-7_a.C: New.
* g++.dg/modules/part-7_b.C: New.
* g++.dg/modules/part-7_c.C: New.
* g++.dg/modules/part-hdr-1_a.H: New.
* g++.dg/modules/part-hdr-1_b.C: New.
* g++.dg/modules/part-hdr-1_c.C: New.
* g++.dg/modules/part-mac-1_a.H: New.
* g++.dg/modules/part-mac-1_b.C: New.
* g++.dg/modules/part-mac-1_c.C: New.
* g++.dg/modules/partial-1.h: New.
* g++.dg/modules/partial-1_a.H: New.
* g++.dg/modules/partial-1_b.C: New.
* g++.dg/modules/pmf-1.h: New.
* g++.dg/modules/pmf-1_a.H: New.
* g++.dg/modules/pmf-1_b.C: New.
* g++.dg/modules/pmf-2.h: New.
* g++.dg/modules/pmf-2_a.H: New.
* g++.dg/modules/pmf-2_b.C: New.
* g++.dg/modules/pmp-1_a.C: New.
* g++.dg/modules/pmp-1_b.C: New.
* g++.dg/modules/pmp-2.C: New.
* g++.dg/modules/pmp-3.C: New.
* g++.dg/modules/pragma-1_a.H: New.
* g++.dg/modules/pragma-1_b.C: New.
* g++.dg/modules/predef-1.C: New.
* g++.dg/modules/predef-1.h: New.
* g++.dg/modules/predef-2.h: New.
* g++.dg/modules/predef-2_a.C: New.
* g++.dg/modules/predef-2_b.C: New.
* g++.dg/modules/preproc-1.C: New.
* g++.dg/modules/preproc-2_a.H: New.
* g++.dg/modules/preproc-2_b.C: New.
* g++.dg/modules/printf-1_a.H: New.
* g++.dg/modules/printf-1_b.C: New.
* g++.dg/modules/reparent-1_a.C: New.
* g++.dg/modules/reparent-1_b.C: New.
* g++.dg/modules/reparent-1_c.C: New.
* g++.dg/modules/scc-1.C: New.
* g++.dg/modules/scc-2.C: New.
* g++.dg/modules/shadow-1_a.C: New.
* g++.dg/modules/shadow-1_b.C: New.
* g++.dg/modules/stat-tpl-1_a.H: New.
* g++.dg/modules/static-1_a.C: New.
* g++.dg/modules/static-1_b.C: New.
* g++.dg/modules/static-1_c.C: New.
* g++.dg/modules/std-1_a.C: New.
* g++.dg/modules/std-1_b.C: New.
* g++.dg/modules/stdns_a.C: New.
* g++.dg/modules/stdns_b.C: New.
* g++.dg/modules/sv-1.h: New.
* g++.dg/modules/sv-1_a.C: New.
* g++.dg/modules/sv-1_b.C: New.
* g++.dg/modules/sym-subst-1.C: New.
* g++.dg/modules/sym-subst-2_a.C: New.
* g++.dg/modules/sym-subst-2_b.C: New.
* g++.dg/modules/sym-subst-3_a.C: New.
* g++.dg/modules/sym-subst-3_b.C: New.
* g++.dg/modules/sym-subst-4.C: New.
* g++.dg/modules/sym-subst-5.C: New.
* g++.dg/modules/sym-subst-6.C: New.
* g++.dg/modules/sys/alias-2_a.H: New.
* g++.dg/modules/sys/inext-1.H: New.
* g++.dg/modules/tdef-1_a.C: New.
* g++.dg/modules/tdef-1_b.C: New.
* g++.dg/modules/tdef-2_a.C: New.
* g++.dg/modules/tdef-2_b.C: New.
* g++.dg/modules/tdef-2_c.C: New.
* g++.dg/modules/tdef-3_a.C: New.
* g++.dg/modules/tdef-3_b.C: New.
* g++.dg/modules/tdef-3_c.C: New.
* g++.dg/modules/tdef-4_a.C: New.
* g++.dg/modules/tdef-4_b.C: New.
* g++.dg/modules/tdef-4_c.C: New.
* g++.dg/modules/tdef-5_a.C: New.
* g++.dg/modules/tdef-5_b.C: New.
* g++.dg/modules/tdef-6_a.H: New.
* g++.dg/modules/tdef-6_b.C: New.
* g++.dg/modules/tdef-7.h: New.
* g++.dg/modules/tdef-7_a.H: New.
* g++.dg/modules/tdef-7_b.C: New.
* g++.dg/modules/tdef-8_a.C: New.
* g++.dg/modules/tdef-8_b.C: New.
* g++.dg/modules/tdef-inst-1.h: New.
* g++.dg/modules/tdef-inst-1_a.C: New.
* g++.dg/modules/tdef-inst-1_b.C: New.
* g++.dg/modules/thunk-1_a.C: New.
* g++.dg/modules/thunk-1_b.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.
* g++.dg/modules/token-1.C: New.
* g++.dg/modules/token-2_a.C: New.
* g++.dg/modules/token-2_b.C: New.
* g++.dg/modules/token-3.C: New.
* g++.dg/modules/token-4.C: New.
* g++.dg/modules/token-5.C: New.
* g++.dg/modules/tpl-alias-1.h: New.
* g++.dg/modules/tpl-alias-1_a.H: New.
* g++.dg/modules/tpl-alias-1_b.C: New.
* g++.dg/modules/tpl-ary-1.h: New.
* g++.dg/modules/tpl-ary-1_a.H: New.
* g++.dg/modules/tpl-ary-1_b.C: New.
* g++.dg/modules/tpl-extern-fn-1_a.H: New.
* g++.dg/modules/tpl-extern-fn-1_b.C: New.
* g++.dg/modules/tpl-extern-var-1_a.H: New.
* g++.dg/modules/tpl-extern-var-1_b.C: New.
* g++.dg/modules/tpl-friend-1_a.C: New.
* g++.dg/modules/tpl-friend-1_b.C: New.
* g++.dg/modules/tpl-friend-2_a.C: New.
* g++.dg/modules/tpl-friend-2_b.C: New.
* g++.dg/modules/tpl-friend-3_a.C: New.
* g++.dg/modules/tpl-friend-3_b.C: New.
* g++.dg/modules/tpl-friend-4_a.C: New.
* g++.dg/modules/tpl-friend-4_b.C: New.
* g++.dg/modules/tpl-friend-5_a.C: New.
* g++.dg/modules/tpl-friend-5_b.C: New.
* g++.dg/modules/tpl-friend-6_a.C: New.
* g++.dg/modules/tpl-friend-6_b.C: New.
* g++.dg/modules/tpl-friend-7_a.C: New.
* g++.dg/modules/tpl-friend-7_b.C: New.
* g++.dg/modules/tpl-friend-merge-1.cc: New.
* g++.dg/modules/tpl-friend-merge-1.h: New.
* g++.dg/modules/tpl-friend-merge-1_a.H: New.
* g++.dg/modules/tpl-friend-merge-1_b.H: New.
* g++.dg/modules/tpl-friend-merge-1_c.H: New.
* g++.dg/modules/tpl-friend-merge-1_d.C: New.
* g++.dg/modules/tpl-friend-merge-1_e.C: New.
* g++.dg/modules/tpl-friend-merge-1_f.C: New.
* g++.dg/modules/tpl-spec-1_a.C: New.
* g++.dg/modules/tpl-spec-1_b.C: New.
* g++.dg/modules/tpl-spec-2_a.C: New.
* g++.dg/modules/tpl-spec-2_b.C: New.
* g++.dg/modules/tpl-spec-2_c.C: New.
* g++.dg/modules/tpl-spec-2_d.C: New.
* g++.dg/modules/tpl-spec-3_a.C: New.
* g++.dg/modules/tpl-spec-3_b.C: New.
* g++.dg/modules/tpl-spec-4_a.C: New.
* g++.dg/modules/tpl-spec-4_b.C: New.
* g++.dg/modules/tpl-spec-5_a.C: New.
* g++.dg/modules/tpl-spec-5_b.C: New.
* g++.dg/modules/tpl-spec-6_a.C: New.
* g++.dg/modules/tpl-spec-6_b.C: New.
* g++.dg/modules/tpl-spec-7.C: New.
* g++.dg/modules/tpl-tpl-friend-1_a.C: New.
* g++.dg/modules/tpl-tpl-friend-1_b.C: New.
* g++.dg/modules/tpl-tpl-mem-1_a.C: New.
* g++.dg/modules/tpl-tpl-mem-1_b.C: New.
* g++.dg/modules/tpl-tpl-merge-1.h: New.
* g++.dg/modules/tpl-tpl-merge-1_a.H: New.
* g++.dg/modules/tpl-tpl-merge-1_b.C: New.
* g++.dg/modules/tpl-tpl-merge-2.h: New.
* g++.dg/modules/tpl-tpl-merge-2_a.H: New.
* g++.dg/modules/tpl-tpl-merge-2_b.C: New.
* g++.dg/modules/tpl-tpl-parm-1_a.H: New.
* g++.dg/modules/tpl-tpl-parm-1_b.C: New.
* g++.dg/modules/tpl-tpl-parm-2.h: New.
* g++.dg/modules/tpl-tpl-parm-2_a.H: New.
* g++.dg/modules/tpl-tpl-parm-2_b.C: New.
* g++.dg/modules/tplmem-1_a.C: New.
* g++.dg/modules/tplmem-1_b.C: New.
* g++.dg/modules/tplmem-3_a.C: New.
* g++.dg/modules/tplmem-3_b.C: New.
* g++.dg/modules/ttp-1_a.C: New.
* g++.dg/modules/ttp-1_b.C: New.
* g++.dg/modules/ttp-2_a.C: New.
* g++.dg/modules/ttp-2_b.C: New.
* g++.dg/modules/ttp-3_a.C: New.
* g++.dg/modules/ttp-3_b.C: New.
* g++.dg/modules/typename-1_a.C: New.
* g++.dg/modules/typename-1_b.C: New.
* g++.dg/modules/unnamed-1_a.C: New.
* g++.dg/modules/unnamed-1_b.C: New.
* g++.dg/modules/unnamed-2.C: New.
* g++.dg/modules/used-1_a.H: New.
* g++.dg/modules/used-1_b.H: New.
* g++.dg/modules/used-1_c.C: New.
* g++.dg/modules/using-1_a.C: New.
* g++.dg/modules/using-1_b.C: New.
* g++.dg/modules/using-1_c.C: New.
* g++.dg/modules/using-2_a.C: New.
* g++.dg/modules/using-2_b.C: New.
* g++.dg/modules/using-2_c.C: New.
* g++.dg/modules/using-3.C: New.
* g++.dg/modules/using-4_a.C: New.
* g++.dg/modules/using-4_b.C: New.
* g++.dg/modules/using-5_a.C: New.
* g++.dg/modules/using-5_b.C: New.
* g++.dg/modules/using-6_a.C: New.
* g++.dg/modules/using-6_b.C: New.
* g++.dg/modules/using-7.C: New.
* g++.dg/modules/using-8_a.C: New.
* g++.dg/modules/using-8_b.C: New.
* g++.dg/modules/using-enum-1_a.H: New.
* g++.dg/modules/using-enum-1_b.C: New.
* g++.dg/modules/var-1_a.C: New.
* g++.dg/modules/var-1_b.C: New.
* g++.dg/modules/var-tpl-1_a.C: New.
* g++.dg/modules/var-tpl-1_b.C: New.
* g++.dg/modules/var-tpl-concept-1.h: New.
* g++.dg/modules/var-tpl-concept-1_a.C: New.
* g++.dg/modules/var-tpl-concept-1_b.C: New.
* g++.dg/modules/virt-1_a.C: New.
* g++.dg/modules/virt-1_b.C: New.
* g++.dg/modules/virt-2_a.C: New.
* g++.dg/modules/virt-2_b.C: New.
* g++.dg/modules/virt-2_c.C: New.
* g++.dg/modules/vmort-1_a.C: New.
* g++.dg/modules/vmort-1_b.C: New.
* g++.dg/modules/vmort-2_a.C: New.
* g++.dg/modules/vmort-2_b.C: New.
* g++.dg/modules/vmort-2_c.C: New.
* g++.dg/modules/vtt-1_a.C: New.
* g++.dg/modules/vtt-1_b.C: New.
* g++.dg/modules/vtt-1_c.C: New.
* g++.dg/modules/vtt-2.h: New.
* g++.dg/modules/vtt-2_a.H: New.
* g++.dg/modules/vtt-2_b.C: New.
Nathan Sidwell [Tue, 22 Dec 2020 20:39:58 +0000 (12:39 -0800)]
c++: Module ICE fix
A missing check for decl lang specific has made itself apparent.
gcc/cp/
* module.cc (has_definition): Check DECL_LANG_SPECIFIC.
Ian Lance Taylor [Tue, 22 Dec 2020 05:20:59 +0000 (21:20 -0800)]
runtime: add "success" field to sudog
This is the gofrontend version of https://golang.org/cl/245019.
Original CL description:
The current wakeup protocol for channel communications is that the
second goroutine sets gp.param to the sudog when a value is
successfully communicated over the channel, and to nil when the wakeup
is due to closing the channel.
Setting nil to indicate channel closure works okay for chansend and
chanrecv, because they're only communicating with one channel, so they
know it must be the channel that was closed. However, it means
selectgo has to re-poll all of the channels to figure out which one
was closed.
This commit adds a "success" field to sudog, and changes the wakeup
protocol to always set gp.param to sg, and to use sg.success to
indicate successful communication vs channel closure.
While here, this also reorganizes the chansend code slightly so that
the sudog is still released to the pool if the send blocks and then is
awoken because the channel closed.
For golang/go#40410
This is being brought over to gofrontend as a step toward upgrading to
Go1.16beta1, setting up for more compiler changes related to select handling.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/279734
Ian Lance Taylor [Tue, 22 Dec 2020 04:51:18 +0000 (20:51 -0800)]
runtime: omit nil-channel cases from selectgo's orders
This is the gofrontend version of https://golang.org/cl/245123.
Original CL description:
Currently, selectgo does an initial pass over the cases array to look
for entries with nil channels, so they can be easily recognized and
skipped later on. But this still involves actually visiting the cases.
This commit changes selectgo to omit cases with nil channels when
constructing pollorder, so that they'll be skipped over entirely later
on. It also checks for caseDefault up front, which will facilitate
changing it to use a "block bool" parameter instead.
Updates golang/go#40410
This is being brought over to gofrontend as a step toward upgrading to
Go1.16beta1, setting up for more compiler changes related to select handling.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/279733
Ian Lance Taylor [Mon, 21 Dec 2020 22:58:14 +0000 (14:58 -0800)]
runtime: remove scase.releasetime field
This is the gofrontend version of https://golang.org/cl/245122.
Original CL description:
selectgo will report at most one block event, so there's no need to
keep a releasetime for every select case. It suffices to simply track
the releasetime of the case responsible for the wakeup.
Updates golang/go#40410.
This is being brought over to gofrontend as a step toward upgrading to
Go1.16beta1.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/279732
Jakub Jelinek [Tue, 22 Dec 2020 19:18:10 +0000 (20:18 +0100)]
c++: Handle array members in build_comparison_op [PR93480]
http://eel.is/c++draft/class.compare.default#6 says for the
expanded list of subobjects:
"In that list, any subobject of array type is recursively expanded
to the sequence of its elements, in the order of increasing subscript."
but build_comparison_op just tried to compare the whole arrays, which
failed and therefore the defaulted comparison was deleted.
The following patch instead compares the array elements, and
if info.defining, adds runtime loops around it so that it iterates
over increasing subscripts.
For flexible array members it punts, we don't know how large those will be,
for zero sized arrays it doesn't even try to compare the elements,
because if there are no elements, there is nothing to compare, and
for [1] arrays it will not emit a loop because it is enough to use
[0] array ref to cover everything.
2020-12-21 Jakub Jelinek <jakub@redhat.com>
PR c++/93480
* method.c (common_comparison_type): If comps[i] is a TREE_LIST,
use its TREE_VALUE instead.
(build_comparison_op): Handle array members.
* g++.dg/cpp2a/spaceship-synth10.C: New test.
* g++.dg/cpp2a/spaceship-synth-neg5.C: New test.
Qian Jianhua [Tue, 22 Dec 2020 18:54:34 +0000 (18:54 +0000)]
arm&aarch64: subdivide the type attribute "alu_shfit_imm"
The type attribute "alu_shfit_imm" is subdivided into
"alu_shift_imm_lsl_1to4" and "alu_shift_imm_other", to accommodate
optimazations of some microarchitectures.
Here is the detailed discussion.
https://gcc.gnu.org/pipermail/gcc/2020-September/233594.html
gcc/
* config/arm/types.md (define_attr "autodetect_type"): New.
(define_attr "type"): Subdivide alu_shift_imm.
* config/arm/common.md: New file.
* config/aarch64/predicates.md:Include common.md.
* config/arm/predicates.md:Include common.md.
* config/aarch64/aarch64.md (*add_<shift>_<mode>): Set autodetect_type.
(*add_<shift>_si_uxtw): Likewise.
(*sub_<shift>_<mode>): Likewise.
(*sub_<shift>_si_uxtw): Likewise.
(*neg_<shift>_<mode>2): Likewise.
(*neg_<shift>_si2_uxtw): Likewise.
* config/arm/arm.md (*addsi3_carryin_shift): Likewise.
(add_not_shift_cin): Likewise.
(*subsi3_carryin_shift): Likewise.
(*subsi3_carryin_shift_alt): Likewise.
(*rsbsi3_carryin_shift): Likewise.
(*rsbsi3_carryin_shift_alt): Likewise.
(*arm_shiftsi3): Likewise.
(*<arith_shift_insn>_multsi): Likewise.
(*<arith_shift_insn>_shiftsi): Likewise.
(subsi3_carryin): Set new type.
(*if_arith_move): Set new type.
(*if_move_arith): Set new type.
(define_attr "core_cycles"): Use new type.
* config/arm/arm-fixed.md (arm_ssatsihi_shift): Set autodetect_type.
* config/arm/thumb2.md (*orsi_not_shiftsi_si): Likewise.
(*thumb2_shiftsi3_short): Set new type.
* config/aarch64/falkor.md (falkor_alu_1_xyz): Use new type.
* config/aarch64/saphira.md (saphira_alu_1_xyz): Likewise.
* config/aarch64/thunderx.md (thunderx_arith_shift): Likewise.
* config/aarch64/thunderx2t99.md (thunderx2t99_alu_shift): Likewise.
* config/aarch64/thunderx3t110.md (thunderx3t110_alu_shift): Likewise.
(thunderx3t110_alu_shift1): Likewise.
* config/aarch64/tsv110.md (tsv110_alu_shift): Likewise.
* config/arm/arm1020e.md (1020alu_shift_op): Likewise.
* config/arm/arm1026ejs.md (alu_shift_op): Likewise.
* config/arm/arm1136jfs.md (11_alu_shift_op): Likewise.
* config/arm/arm926ejs.md (9_alu_op): Likewise.
* config/arm/cortex-a15.md (cortex_a15_alu_shift): Likewise.
* config/arm/cortex-a17.md (cortex_a17_alu_shiftimm): Likewise.
* config/arm/cortex-a5.md (cortex_a5_alu_shift): Likewise.
* config/arm/cortex-a53.md (cortex_a53_alu_shift): Likewise.
* config/arm/cortex-a57.md (cortex_a57_alu_shift): Likewise.
* config/arm/cortex-a7.md (cortex_a7_alu_shift): Likewise.
* config/arm/cortex-a8.md (cortex_a8_alu_shift): Likewise.
* config/arm/cortex-a9.md (cortex_a9_dp_shift): Likewise.
* config/arm/cortex-m4.md (cortex_m4_alu): Likewise.
* config/arm/cortex-m7.md (cortex_m7_alu_shift): Likewise.
* config/arm/cortex-r4.md (cortex_r4_alu_shift): Likewise.
* config/arm/exynos-m1.md (exynos_m1_alu_shift): Likewise.
* config/arm/fa526.md (526_alu_shift_op): Likewise.
* config/arm/fa606te.md (606te_alu_op): Likewise.
* config/arm/fa626te.md (626te_alu_shift_op): Likewise.
* config/arm/fa726te.md (726te_alu_shift_op): Likewise.
* config/arm/fmp626.md (mp626_alu_shift_op): Likewise.
* config/arm/marvell-pj4.md (pj4_shift): Likewise.
(pj4_shift_conds): Likewise.
(pj4_alu_shift): Likewise.
(pj4_alu_shift_conds): Likewise.
* config/arm/xgene1.md (xgene1_alu): Likewise.
* config/arm/arm.c (xscale_sched_adjust_cost): Likewise.
Uros Bizjak [Tue, 22 Dec 2020 17:13:24 +0000 (18:13 +0100)]
i386: Fix __builtin_floor with FE_DOWNWARD rounding direction [PR96793]
x86_expand_floorceil expander uses x86_sse_copysign_to_positive, which
is unable to change the sign from - to +. When FE_DOWNWARD rounding
direction is in effect, the expanded sequence that involves subtraction
can trigger x - x = -0.0 special rule. x86_sse_copysign_to_positive
fails to change the sign of the intermediate value, assumed to always
be positive, back to positive.
The patch adds one extra fabs that strips the sign from the intermediate
value when flag_rounding_math is in effect.
2020-12-22 Uroš Bizjak <ubizjak@gmail.com>
gcc/
PR target/96793
* config/i386/i386-expand.c (ix86_expand_floorceil):
Remove the sign of the intermediate value for flag_rounding_math.
(ix86_expand_floorceildf_32): Ditto.
gcc/testsuite/
PR target/96793
* gcc.target/i386/pr96793.c: New test.