Commit Graph

176054 Commits

Author SHA1 Message Date
Marek Polacek
5bdd4c5d3f c++: Fix bogus -Wparentheses warning with fold-expression [PR94505]
We issue bogus -Wparentheses warnings (3 of them!) for this fold expression:

  ((B && true) || ...)

Firstly, issuing a warning for a compiler-generated expression is wrong
and secondly, B && true must be wrapped in ( ) otherwise you'll get
error: binary expression in operand of fold-expression.

	PR c++/94505 - bogus -Wparentheses warning with fold-expression.
	* pt.c (fold_expression): Add warning_sentinel for -Wparentheses
	before calling build_x_binary_op.

	* g++.dg/cpp1z/fold11.C: New test.
2020-04-20 15:35:06 -04:00
Marek Polacek
c5e4be6b36 coroutines: Fix STRIP_NOPS usage.
parm = STRIP_NOPS (parm); is unnecessary and generates
warning: operation on 'parm' may be undefined [-Wsequence-point]
when cp/coroutines.cc is compiled with -std=c++11.

	* coroutines.cc (captures_temporary): Don't assign the result of
	STRIP_NOPS to the same variable.
2020-04-20 15:19:16 -04:00
Andreas Krebbel
582fe481f4 S/390: Fix PR94666
The vector popcount expanders use a hardcoded subreg.  This might lead
to double subregs being generated which then fail to match.  With this
patch simplify_gen_subreg is used instead to fold the subregs.

gcc/ChangeLog:

2020-04-20  Andreas Krebbel  <krebbel@linux.ibm.com>

	* config/s390/vector.md ("popcountv8hi2_vx", "popcountv4si2_vx")
	("popcountv2di2_vx"): Use simplify_gen_subreg.

gcc/testsuite/ChangeLog:

2020-04-20  Andreas Krebbel  <krebbel@linux.ibm.com>

	* g++.dg/pr94666.C: New test.
2020-04-20 20:06:53 +02:00
Andreas Krebbel
2930bb3217 PR94613: Fix vec_sel builtin for IBM Z
The vsel instruction is a bit-wise select instruction.  Using an
IF_THEN_ELSE to express it in RTL is wrong and leads to wrong code being
generated in the combine pass.

With the patch the pattern is written using bit operations.  However,
I've just noticed that the manual still demands a fixed point mode for
AND/IOR and friends although several targets emit bit ops on floating
point vectors (including i386, Power, and s390). So I assume this is a
safe thing to do?!

gcc/ChangeLog:

2020-04-20  Andreas Krebbel  <krebbel@linux.ibm.com>

	PR target/94613
	* config/s390/s390-builtin-types.def: Add 3 new function modes.
	* config/s390/s390-builtins.def: Add mode dependent low-level
	builtin and map the overloaded builtins to these.
	* config/s390/vx-builtins.md ("vec_selV_HW"): Rename to ...
	("vsel<V_HW"): ... this and rewrite the pattern with bitops.

gcc/testsuite/ChangeLog:

2020-04-20  Andreas Krebbel  <krebbel@linux.ibm.com>

	PR target/94613
	* gcc.target/s390/zvector/pr94613.c: New test.
	* gcc.target/s390/zvector/vec_sel-1.c: New test.
2020-04-20 19:37:39 +02:00
Thomas König
0fe12b0234 Add numerous flags to the -fdump-fortran-original attribute dump.
2020-04-20  Thomas Koenig  <tkoenig@gcc.gnu.org>

	* dump-parse-tree.c (show_attr): Add numerous flags, some cleanup.
2020-04-20 19:19:20 +02:00
Jonathan Wakely
b0146791f0 libstdc++: Correct changelog of previous commit
After committing it I noticed I'd also accidentally added a change to
__synth3way as well, which I meant to do in a separate commit. I've
updated the changelog entry to reflect that additional change.

	* libsupc++/compare (__detail::__synth3way): Add noexcept-specifier.
2020-04-20 17:54:50 +01:00
Iain Buclaw
371d1011d7 libphobos: Fix option name for --with-libphobos-druntime-only.
libphobos/ChangeLog:

	* configure: Regenerate.
	* configure.ac: Fix option name for --with-libphobos-druntime-only.
2020-04-20 18:51:10 +02:00
Jonathan Wakely
73a0a21d22 libstdc++: Update __cpp_lib_three_way_comparison macro
With P1614R2 fully implemented (except for the <chrono> types which we
don't support at all) we can define the feature test macro to the new
value.

	* include/std/version (__cpp_lib_three_way_comparison): Update value.
	* libsupc++/compare (__cpp_lib_three_way_comparison): Likewise.
2020-04-20 17:50:10 +01:00
Jonathan Wakely
93843da697 libstdc++: Add comparison operators to associative containers
The last C++20 changes from P1614R2, "The Mothership has Landed"

	* include/bits/stl_map.h (map): Define operator<=> and remove
	operator< for C++20.
	* include/bits/stl_multimap.h (multimap): Likewise.
	* include/bits/stl_multiset.h (multiset): Likewise.
	* include/bits/stl_set.h (set): Likewise.
	* include/bits/stl_tree.h (_Rb_tree): Likewise.
	(_Rb_tree_iterator, _Rb_tree_const_iterator): Remove redundant
	operator!= for C++20.
	* include/debug/map.h (__gnu_debug::map): Define operator<=> for C++20.
	* include/debug/multimap.h (__gnu_debug::multimap): Likewise.
	* include/debug/multiset.h (__gnu_debug::multiset): Likewise.
	* include/debug/set.h (__gnu_debug::set): Likewise.
	* testsuite/23_containers/map/operators/cmp_c++20.cc: New test.
	* testsuite/23_containers/multimap/operators/cmp_c++20.cc: New test.
	* testsuite/23_containers/multiset/operators/cmp_c++20.cc: New test.
	* testsuite/23_containers/set/operators/cmp_c++20.cc: New test.
2020-04-20 17:50:10 +01:00
Iain Buclaw
8e1e6cdb8f libphobos: Remove undefined DRUNTIME_GC from configure scripts
libphobos/ChangeLog:

	* configure: Regenerate.
	* configure.ac: Remove DRUNTIME_GC.
2020-04-20 18:37:38 +02:00
Richard Sandiford
77aecf92a2 vect: Tweak vect_better_loop_vinfo_p handling of variable VFs
This patch fixes a large lmbench performance regression with
128-bit SVE, compiled in length-agnostic mode.

vect_better_loop_vinfo_p (new in GCC 10) tries to estimate whether
a new loop_vinfo is cheaper than a previous one, with an in-built
preference for the old one.  For variable VF it prefers the old
loop_vinfo if it is cheaper for at least one VF.  However, we have
no idea how likely that VF is in practice.

Another extreme would be to do what most of the rest of the
vectoriser does, and rely solely on the constant estimated VF.
But as noted in the comment, this means that a one-unit cost
difference would be enough to pick the new loop_vinfo,
despite the target generally preferring the old loop_vinfo
where possible.  The cost model just isn't accurate enough
for that to produce good results as things stand: there might
not be any practical benefit to the new loop_vinfo at the
estimated VF, and it would be significantly worse for higher VFs.

The patch instead goes for a hacky compromise: make sure that the new
loop_vinfo is also no worse than the old loop_vinfo at double the
estimated VF.  For all but trivial loops, this ensures that the
new loop_vinfo is only chosen if it is better than the old one
by a non-trivial amount at the estimated VF.  It also avoids
putting too much faith in the VF estimate.

I realise this isn't great, but it's supposed to be a conservative fix
suitable for stage 4.  The only affected testcases are the ones for
pr89007-*.c, where Advanced SIMD is indeed preferred for 128-bit SVE
and is no worse for 256-bit SVE.

Part of the problem here is that if the new loop_vinfo is better,
we discard the old one and never consider using it even as an
epilogue loop.  This means that if we choose Advanced SIMD over SVE,
we're much more likely to have left-over scalar elements.

Another is that the estimate provided by estimated_poly_value might have
different probabilities attached.  E.g. when tuning for a particular core,
the estimate is probably accurate, but when tuning for generic code,
the estimate is more of a guess.  Relying solely on the estimate is
probably correct for the former but not for the latter.

Hopefully those are things that we could tackle in GCC 11.

2020-04-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vect-loop.c (vect_better_loop_vinfo_p): If old_loop_vinfo
	has a variable VF, prefer new_loop_vinfo if it is cheaper for the
	estimated VF and is no worse at double the estimated VF.

gcc/testsuite/
	* gcc.target/aarch64/sve/cost_model_8.c: New test.
	* gcc.target/aarch64/sve/cost_model_9.c: Likewise.
	* gcc.target/aarch64/sve/pr89007-1.c: Add -msve-vector-bits=512.
	* gcc.target/aarch64/sve/pr89007-2.c: Likewise.
2020-04-20 17:13:29 +01:00
Richard Sandiford
5da301cbd8 aarch64: Fix vector builds used by SVE vec_init [PR94668]
This testcase triggered an ICE in rtx_vector_builder::step because
we were trying to use a stepped representation for floating-point
constants.  The underlying problem was that the arguments to
rtx_vector_builder were the wrong way around, meaning that some
variations were likely to be incorrectly encoded for integers
(but probably as a silent failure).

Also, aarch64_sve_expand_vector_init_handle_trailing_constants
tries to extend the trailing constant elements to a full vector
by following the "natural" pattern of the original vector, which
should generally lead to nicer constants.  However, for the testcase,
we'd then end up picking a variable for some elements.  Fixed by
stubbing out all variable elements with zeros.

That fix involved testing valid_for_const_vector_p.  For consistency,
the patch uses the same test when finding trailing constants, instead
of the previous aarch64_legitimate_constant_p.

2020-04-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	PR target/94668
	* config/aarch64/aarch64.c (aarch64_sve_expand_vector_init): Fix
	order of arguments to rtx_vector_builder.
	(aarch64_sve_expand_vector_init_handle_trailing_constants): Likewise.
	When extending the trailing constants to a full vector, replace any
	variables with zeros.

gcc/testsuite/
	PR target/94668
	* gcc.target/aarch64/sve/pr94668.c: New test.
2020-04-20 15:43:32 +01:00
Matthias Kretz
697b94cfae libstdc++: Avoid illegal argument to verbose in dg-test callback
If extra_tool_flags starts with a dash, an error like 'ERROR: verbose:
illegal argument: -march=native -O2 -std=c++17' is printed. This is
easily fixed by inserting a double dash before the variable.

2020-04-20  Matthias Kretz  <kretz@kde.org>

	* testsuite/lib/libstdc++.exp: Avoid illegal argument to verbose.
2020-04-20 15:29:44 +01:00
Nathan Sidwell
a6f400239d c++: tpl-tpl-parms are not canonicalizable types [pr94454]
We treat tpl-tpl-parms as types.  They're not; bound-tpl-tpl-parms
are.  We can get away with them being type-like.  Unfortunately we
give the original level==orig_level case a canonical type, but the
reduced cases of level<orig_level get structural equality.  This patch
gives them structural type always.

	* pt.c (canonical_type_parameter): Assert not a tpl-tpl-parm.
	(process_template_parm): tpl-tpl-parms are structural.
	(rewrite_template_parm): Propagate structuralness.
2020-04-20 06:52:30 -07:00
Nathan Sidwell
7fcb93431e c++: Expr pack expansion equality [pr94454]
We were not comparing expression pack expansions correctly. We could
consider distinct expansions equal and creating two, apparently equal,
specializations that would sometimes collide.  cp_tree_operand_length
says a pack has 1 operand (for mangling), whereas it actually has 3,
but only two of which are significant for equality.  We must special
case that in cp_tree_equal.  That new code matches the hasher and the
type_pack_expansion case in structural_comp_types.

	* tree.c (cp_tree_equal): [TEMPLATE_ID_EXPR, default] Refactor.
	[EXPR_PACK_EXPANSION]: Add.
2020-04-20 06:48:45 -07:00
Nathan Sidwell
aa576f2a86 c++: Template argument hashing [pr94454]
One of the problems hit by pr94454 was that the argument hasher was
not skipping nodes that template_args_equal would.  Fixed by replacing
the STRIP_NOPS invocation by a bespoke loop.  We also confuse the
canonical type machinery by treating tpl-tpl-parms as types.  They're
not; bound-tpl-tpl-parms are.  We can get away with them being
type-like.  Unfortunately we give the original level==orig_level case
a canonical type, but the reduced cases of level<orig_level get
structural equality.  That breaks the hasher because we'll use
TYPE_HASH (CANONICAL_TYPE ()) when we can. There's a note in
tsubst[TEMPLATE_TEMPLATE_PARM] about why the reduced ones cannot have
a canonical type. (I didn't feel like questioning that assertion at
this point.)

	* pt.c (iterative_hash_template_arg): Strip nodes as
	template_args_equal does.
	[ARGUMENT_PACK_SELECT, TREE_VEC, CONSTRUCTOR]: Refactor.
	[node_class:TEMPLATE_TEMPLATE_PARM]: Hash by level & index.
	[node_class:default]: Refactor.
2020-04-20 06:44:08 -07:00
Jan Hubicka
48c8231094 Fix ICE on invalid calls_comdat_local flag [pr94582]
PR ipa/94582
	* tree-inline.c (optimize_inline_calls): Recompute calls_comdat_local
	flag.

	* g++.dg/torture/pr94582.C: New test.
2020-04-20 15:25:50 +02:00
Harald Anlauf
aeb430aadc PR fortran/93364 - ICE in gfc_set_array_spec, at fortran/array.c:879
Add missing check in gfc_set_array_spec for sum of rank and corank to not
exceed GFC_MAX_DIMENSIONS.

2020-04-20  Harald Anlauf  <anlauf@gmx.de>

	PR fortran/93364
	* array.c (gfc_set_array_spec): Check for sum of rank and corank
	not exceeding GFC_MAX_DIMENSIONS.

2020-04-20  Harald Anlauf  <anlauf@gmx.de>

	PR fortran/93364
	* gfortran.dg/pr93364.f90: New test.
2020-04-20 14:20:19 +02:00
Martin Liska
9b4d38df3f
Fix spacing in symtab_node::dump_references.
* symtab.c (symtab_node::dump_references): Add space after
	one entry.
	(symtab_node::dump_referring): Likewise.
2020-04-20 14:09:41 +02:00
Steve Kargl
38acc41d6d PR 91800 - reject Hollerith constants as type initializer.
2020-04-20  Steve Kargl  <kargl@gcc.gnu.org>
	Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/91800
	* decl.c (variable_decl): Reject Hollerith constants as type
	initializer.

2020-04-20  Steve Kargl  <kargl@gcc.gnu.org>
	Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/91800
	* gfortran.dg/hollerith_9.f90: New test.
2020-04-20 13:21:38 +02:00
Tobias Burnus
85d8c05a02 Fix declare copyout in libgomp.oacc-c++/declare-pr94120.C
Testing on the host does not make sense for 'declare copyout' for
a same-scope stack-allocated variable. Once the copyout is done,
the variable is gone. Hence, test the variable on the device. This
can be revisit after the OpenACC semantic has been fixed; but with
that fix, the test PASSes again with devices.

        PR middle-end/94120
        * testsuite/libgomp.oacc-c++/declare-pr94120.C: Fix 'declare copy(out)'
        test case.
2020-04-20 12:38:50 +02:00
GCC Administrator
79b9d18ea1 Daily bump. 2020-04-20 00:16:17 +00:00
Jonathan Wakely
717e91dbc4 libstdc++: Define operator<=> for std::stack and std::queue
Some more C++20 changes from P1614R2, "The Mothership has Landed".

	* include/bits/stl_queue.h (queue): Define operator<=> for C++20.
	* include/bits/stl_stack.h (stack): Likewise.
	* testsuite/23_containers/queue/cmp_c++20.cc: New test.
	* testsuite/23_containers/stack/cmp_c++20.cc: New test.
2020-04-19 21:30:15 +01:00
Jonathan Wakely
7ab9c2430f libstdc++: Remove operator!= overloads for unordered containers
Some more C++20 changes from P1614R2, "The Mothership has Landed".

	* include/bits/unordered_map.h (unordered_map, unordered_multimap):
	Remove redundant operator!= for C++20.
	* include/bits/unordered_set.h (unordered_set, unordered_multiset):
	Likewise.
	* include/debug/unordered_map (unordered_map, unordered_multimap):
	Likewise.
	* include/debug/unordered_set (unordered_set, unordered_multiset):
	Likewise.
2020-04-19 21:05:32 +01:00
Jonathan Wakely
a2c0fa35d0 libstdc++: Fix redundant assignment (PR 94629)
This appears to be a copy&paste error, which cppcheck diagnoses.

	PR other/94629
	* include/debug/formatter.h (_Error_formatter::_Parameter): Fix
	redundant assignment in constructor.
2020-04-19 21:05:32 +01:00
David Edelsohn
36bc6c6520 rs6000: Skip DWARF5 and -fcompare-debug testcases on AIX.
AIX does not support DWARF5 sections.
-fcompare-debug causes gratuitous testcase failures on AIX.

2020-04-19  David Edelsohn  <dje.gcc@gmail.com>

        * g++.dg/debug/dwarf2/pr85550.C: Skip AIX.
        * g++.dg/debug/pr94272.C: Skip AIX.
        * g++.dg/debug/pr94281.C: Skip AIX.
        * g++.dg/debug/pr94323.C: Skip AIX.
2020-04-19 14:27:18 -04:00
Iain Buclaw
3f81d84c9f libphobos: Merge upstream phobos bf0d0a37c
std.array.Appender and RefAppender: use .opSlice() instead of data()

Previously, Appender.data() was used to extract a slice of the Appender's array.
Now use the [] slice operator instead.  The same goes for RefAppender.

Fixes: PR d/94455

Reviewed-on: https://github.com/dlang/phobos/pull/7450
2020-04-19 18:14:30 +02:00
Iain Buclaw
fc18607748 libphobos: Merge upstream phobos 99003a75a
Fixes hasLength unittest to pass on X32.

References: PR d/94609

Reviewed-on: https://github.com/dlang/phobos/pull/7448
2020-04-19 15:48:32 +02:00
Iain Buclaw
62f3d4ea89 d/dmd: Merge upstream dmd ba99ee345
Initializes the VectorArrayExp::size field with the correct value.

Fixes: PR d/94652

Reviewed-on: https://github.com/dlang/dmd/pull/11046
2020-04-19 15:07:29 +02:00
Iain Buclaw
ace4b1acba d/dmd: Merge upstream dmd 09be6ee14
Initializes ncost before use, which was caught by valgrind.

Fixes: PR d/94653

Reviewed-on: https://github.com/dlang/dmd/pull/11045
2020-04-19 14:58:41 +02:00
Uros Bizjak
df73e5842f i386: Remove unneeded assignments when triggering SSE exceptions
According to "Intel 64 and IA32 Arch SDM, Vol. 3:

"Because SIMD floating-point exceptions are precise and occur immediately,
the situation does not arise where an x87 FPU instruction, a WAIT/FWAIT
instruction, or another SSE/SSE2/SSE3 instruction will catch a pending
unmasked SIMD floating-point exception."

Remove unneeded assignments to volatile memory.

libgcc/ChangeLog:

	* config/i386/sfp-exceptions.c (__sfp_handle_exceptions) [__SSE_MATH__]:
	Remove unneeded assignments to volatile memory.

libatomic/ChangeLog:

	* config/x86/fenv.c (__atomic_feraiseexcept) [__SSE_MATH__]:
	Remove unneeded assignments to volatile memory.

libgfortran/ChangeLog:

	* config/fpu-387.h (local_feraiseexcept) [__SSE_MATH__]:
	Remove unneeded assignments to volatile memory.
2020-04-19 14:27:12 +02:00
Iain Sandoe
9382018b8b coroutines, testsuite: Require C++17 for two tests.
While the coroutines implementation, and most of the coroutines
tests, will operate with C++14 or newer, these tests require
facilities introduced in C++17.  Add the target requirement.

gcc/testsuite/

2020-04-19  Iain Sandoe  <iain@sandoe.co.uk>

	* g++.dg/coroutines/torture/co-await-17-capture-comp-ref.C: Require
	C++17.
	* g++.dg/coroutines/torture/co-ret-15-default-return_void.C: Likewise.
2020-04-19 13:16:29 +01:00
Thomas König
82aa0d5b9b PR 94347 - fix previous ChangeLog entry. 2020-04-19 14:08:16 +02:00
Thomas König
ba36d0b9d4 PR 94347 - add a test case for something a PR has fixed itself.
2020-04-19  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/94347
	* gfortran.dg/char_pointer_init_1.f90: New test.
2020-04-19 14:05:46 +02:00
Thomas König
e91c0a35e5 Commit test case for PR 57129.
2020-04-19  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/57129
	* gfortran.dg/subroutine_as_type.f90: New test.
2020-04-19 13:06:22 +02:00
Thomas König
4dc6437183 Fix PR fortran/93500, ICE on invalid.
Returning &gfc_bad_expr when simplifying bounds after a divisin by zero
happened results in the division by zero error actually reaching the user.

2020-04-19  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/93500
	* resolve.c (resolve_operator): If both operands are
	NULL, return false.
	* simplify.c (simplify_bound): If a division by zero
	was seen during bound simplification, free the
	corresponcing expression and return &gfc_bad_expr.

2020-04-19  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/93500
	* arith_divide_3.f90: New test.
2020-04-19 12:56:32 +02:00
Jakub Jelinek
e1113ffbd6 c, objc: Fix up c_parser_objc_selector_arg after CPP_SCOPE changes [PR94637]
Similarly to inline asm, :: (or any other number of consecutive colons) can
appear in ObjC @selector argument and with the introduction of CPP_SCOPE
into the C FE, we need to trat CPP_SCOPE as two CPP_COLON tokens.
The C++ FE does that already that way.

2020-04-19  Jakub Jelinek  <jakub@redhat.com>

	PR objc/94637
	* c-parser.c (c_parser_objc_selector_arg): Handle CPP_SCOPE like
	two CPP_COLON tokens.

	* objc.dg/pr94637.m: New test.
2020-04-19 12:13:33 +02:00
Iain Buclaw
8a9ce39f8b d: Fix FAIL in gdc.dg/runnable.d on X32 targets (PR94609)
Patch fixes test failure seen on X32 where a nested struct was passed in
registers, rather than via invisible reference.  Now, all non-POD
structs are passed by invisible reference, not just those with a
user-defined copy constructor/destructor.

gcc/d/ChangeLog:

	PR d/94609
	* d-codegen.cc (argument_reference_p): Don't check TREE_ADDRESSABLE.
	(type_passed_as): Build reference type if TREE_ADDRESSABLE.
	* d-convert.cc (convert_for_argument): Build explicit TARGET_EXPR if
	needed for arguments passed by invisible reference.
	* types.cc (TypeVisitor::visit (TypeStruct *)): Mark all structs that
	are not POD as TREE_ADDRESSABLE.
2020-04-19 09:54:25 +02:00
GCC Administrator
56d207dd40 Daily bump. 2020-04-19 00:16:16 +00:00
Iain Buclaw
1821ae72ca Add missing changelog entries for r10-7790 2020-04-18 20:53:08 +02:00
Iain Buclaw
261bd78d57 libphobos: Add --with-libphobos-druntime-only option.
The intended purpose of the option is both for targets that don't
support phobos yet, and for gdc itself to support bootstrapping itself
as a self-hosted D compiler.

The libphobos testsuite has been updated to only add libphobos to the
search paths if it's being built.  A new D2 testsuite directive
RUNNABLE_PHOBOS_TEST has also been patched in to disable some runnable
tests that have phobos dependencies, of which is a temporary measure
until upstream DMD fixes or removes these tests entirely.

gcc/testsuite/ChangeLog:

	* lib/gdc-utils.exp (gdc-convert-test): Add dg-skip-if for tests that
	depending on the phobos standard library.

libphobos/ChangeLog:

	* configure: Regenerate.
	* configure.ac: Add --with-libphobos-druntime-only option and the
	conditional ENABLE_LIBDRUNTIME_ONLY.
	* configure.tgt: Define LIBDRUNTIME_ONLY.
	* src/Makefile.am: Add phobos sources if not ENABLE_LIBDRUNTIME_ONLY.
	* src/Makefile.in: Regenerate.
	* testsuite/testsuite_flags.in: Add phobos path if compiling phobos.
2020-04-18 18:25:49 +02:00
Jeff Law
baf3b9b2e5 Don't let DEBUG_INSNSs change register renaming decisions
PR debug/94439
	* regrename.c (check_new_reg_p): Ignore DEBUG_INSNs when walking
	the chain.

	PR debug/94439
	* gcc.dg/torture/pr94439.c: New test.
2020-04-18 09:39:18 -06:00
Iain Buclaw
b57e1621eb testsuite: Disable gdc standard runtime tests if phobos is not built.
The current check_effective_target_d_runtime procedure returns false if
the target is built without any core runtime library for D being
available (--disable-libphobos).  This additional procedure is for
targets where the core runtime library exists, but without the higher
level standard library.

gcc/ChangeLog:

	* doc/sourcebuild.texi (Effective-Target Keywords, Environment
	attributes): Document d_runtime_has_std_library.

gcc/testsuite/ChangeLog:

	* gdc.dg/link.d: Use d_runtime_has_std_library effective target.
	* gdc.dg/runnable.d: Move phobos tests to...
	* gdc.dg/runnable2.d: ...here.  New test.
	* lib/target-supports.exp
	(check_effective_target_d_runtime_has_std_library): New.

libphobos/ChangeLog:

	* testsuite/libphobos.phobos/phobos.exp: Skip if effective target is
	not d_runtime_has_std_library.
	* testsuite/libphobos.phobos_shared/phobos_shared.exp: Likewise.
2020-04-18 14:07:41 +02:00
Patrick Palka
f83adb68ed c++: spec_hasher::equal and PARM_DECLs [PR94632]
In the testcase below, during specialization of c<int>::d, we build two
identical specializations of the parameter type b<decltype(e)::k> -- one when
substituting into c<int>::d's TYPE_ARG_TYPES and another when substituting into
c<int>::d's DECL_ARGUMENTS.

We don't reuse the first specialization the second time around as a consequence
of the fix for PR c++/56247 which made PARM_DECLs always compare different from
one another during spec_hasher::equal.  As a result, when looking up existing
specializations of 'b', spec_hasher::equal considers the template argument
decltype(e')::k to be different from decltype(e'')::k, where e' and e'' are the
result of two calls to tsubst_copy on the PARM_DECL e.

Since the two specializations are considered different due to the mentioned fix,
their TYPE_CANONICAL points to themselves even though they are otherwise
identical types, and this triggers an ICE in maybe_rebuild_function_decl_type
when comparing the TYPE_ARG_TYPES of c<int>::d to its DECL_ARGUMENTS.

This patch fixes this issue at the spec_hasher::equal level by ignoring the
'comparing_specializations' flag in cp_tree_equal whenever the DECL_CONTEXTs of
the two parameters are identical.  This seems to be a sufficient condition to be
able to correctly compare PARM_DECLs structurally.  (This also subsumes the
CONSTRAINT_VAR_P check since constraint variables all have empty, and therefore
identical, DECL_CONTEXTs.)

gcc/cp/ChangeLog:

	PR c++/94632
	* tree.c (cp_tree_equal) <case PARM_DECL>: Ignore
	comparing_specializations if the parameters' contexts are identical.

gcc/testsuite/ChangeLog:

	PR c++/94632
	* g++.dg/template/canon-type-14.C: New test.
2020-04-18 06:23:10 -04:00
Patrick Palka
e43b28ae7f c++: Abbreviated function template return type [PR92187]
When updating an auto return type of an abbreviated function template in
splice_late_return_type, we should also propagate PLACEHOLDER_TYPE_CONSTRAINTS
(and cv-qualifiers) of the original auto node.

gcc/cp/ChangeLog:

	PR c++/92187
	* pt.c (splice_late_return_type): Propagate cv-qualifiers and
	PLACEHOLDER_TYPE_CONSTRAINTS from the original auto node to the new one.

gcc/testsuite/ChangeLog:

	PR c++/92187
	* g++.dg/concepts/abbrev5.C: New test.
	* g++.dg/concepts/abbrev6.C: New test.
2020-04-18 06:22:14 -04:00
GCC Administrator
c5bac7d127 Daily bump. 2020-04-18 00:16:16 +00:00
Jonathan Wakely
27c171775a libstdc++: Add comparison operators to <chrono> types
Some more C++20 changes from P1614R2, "The Mothership has Landed".

	* include/std/chrono (duration, time_point): Define operator<=> and
	remove redundant operator!= for C++20.
	* testsuite/20_util/duration/comparison_operators/three_way.cc: New
	test.
	* testsuite/20_util/time_point/comparison_operators/three_way.cc: New
	test.
2020-04-18 00:47:45 +01:00
Jonathan Wakely
c996029406 libstdc++: Fix testsuite utility's use of allocators
In C++20 the rebind and const_reference members of std::allocator are
gone, so this testsuite utility stopped working, causing
ext/pb_ds/regression/priority_queue_rand_debug.cc to FAIL.

	* testsuite/util/native_type/native_priority_queue.hpp: Use
	allocator_traits to rebind allocator.
2020-04-18 00:12:26 +01:00
Jonathan Wakely
bd2420f8fa libstdc++: Add comparison operators to sequence containers
Some more C++20 changes from P1614R2, "The Mothership has Landed".

This implements <=> for sequence containers (and the __normal_iterator
and _Pointer_adapter class templates).

	* include/bits/forward_list.h (forward_list): Define operator<=> and
	remove redundant comparison operators for C++20.
	* include/bits/stl_bvector.h (vector<bool, Alloc>): Likewise.
	* include/bits/stl_deque.h (deque): Likewise.
	* include/bits/stl_iterator.h (__normal_iterator): Likewise.
	* include/bits/stl_list.h (list): Likewise.
	* include/bits/stl_vector.h (vector): Likewise.
	* include/debug/deque (__gnu_debug::deque): Likewise.
	* include/debug/forward_list (__gnu_debug::forward_list): Likewise.
	* include/debug/list (__gnu_debug::list): Likewise.
	* include/debug/safe_iterator.h (__gnu_debug::_Safe_iterator):
	Likewise.
	* include/debug/vector (__gnu_debug::vector): Likewise.
	* include/ext/pointer.h (__gnu_cxx::_Pointer_adapter): Define
	operator<=> for C++20.
	* testsuite/23_containers/deque/operators/cmp_c++20.cc: New test.
	* testsuite/23_containers/forward_list/cmp_c++20.cc: New test.
	* testsuite/23_containers/list/cmp_c++20.cc: New test.
	* testsuite/23_containers/vector/bool/cmp_c++20.cc: New test.
	* testsuite/23_containers/vector/cmp_c++20.cc: New test.
2020-04-17 23:41:04 +01:00
Jeff Law
3737ccc424 [committed] [PR rtl-optimization/90275] Another 90275 related cse.c fix
This time instead of having a NOP copy insn that we can completely ignore and
ultimately remove, we have a NOP set within a multi-set PARALLEL.  It triggers,
the same failure when the source of such a set is a hard register for the same
reasons as we've already noted in the BZ and patches-to-date.

For prior cases we've been able to mark the insn as a nop set and ignore it for
the rest of cse_insn, ultimately removing it.  That's not really an option here
as there are other sets that we have to preserve.

We might be able to fix this instance by splitting the multi-set insn, but I'm
not keen to introduce splitting into cse.  Furthermore, the target may not be
able to split the insn.  So I considered this is non-starter.

What I finally settled on was to use the existing do_not_record machinery to
ignore the nop set within the parallel (and only that set within the parallel).

One might argue that we should always ignore a REG_UNUSED set.  But I rejected
that idea -- we could have cse-able divmod insns where the first had a
REG_UNUSED note for a destination, but the second did not.

One might also argue that we could have a nop set without a REG_UNUSED in a
multi-set parallel and thus we could trigger yet another insert_regs ICE at
some point.  I tend to think this is a possibility.  If we see this happen,
we'll have to revisit.

	PR rtl-optimization/90275
	* cse.c (cse_insn): Avoid recording nop sets in multi-set parallels
	when the destination has a REG_UNUSED note.
2020-04-17 15:40:43 -06:00