Richard Sandiford [Wed, 19 Feb 2020 12:59:17 +0000 (12:59 +0000)]
lra: Stop registers being incorrectly marked live v2 [PR92989]
This PR is about a case in which the clobbers at the start of
an EH receiver can lead to registers becoming unnecessarily
live in predecessor blocks. My first attempt at fixing this
made sure that we update the bb liveness info based on the
real live set:
http://gcc.gnu.org/g:
e648e57efca6ce6d751ef8c2038608817b514fb4
But it turns out that the clobbered registers were also added to
the "gen" set of LRA's private liveness problem, where "gen" in
this context means "generates a requirement for a live value".
So the clobbered registers could still end up live via that
mechanism instead.
This patch therefore reverts the patch above and takes the other
approach floated in the original patch description: model the full
clobber by making the registers live and then dead again.
There's no specific need to revert the original patch, since the
code should no longer be sensitive to the order of the bb liveness
update and the modelling of the clobber. But given that there's
no specific need to keep the original patch either, it seemed better
to restore the code to the more well-tested order.
Tested on aarch64-linux-gnu and x86_64-linux-gnu. OK to install?
Richard
2020-02-19 Richard Sandiford <richard.sandiford@arm.com>
gcc/
PR rtl-optimization/PR92989
* lra-lives.c (process_bb_lives): Restore the original order
of the bb liveness update. Call make_hard_regno_dead for each
register clobbered at the start of an EH receiver.
Jeff Law [Fri, 21 Feb 2020 20:24:27 +0000 (13:24 -0700)]
Do not propagate self-dependent value (PR ipa/93763) (ChangeLog)
PR ipa/93763
* ipa-cp.c (self_recursively_generated_p): Mark self-dependent value as
self-recursively generated.
Feng Xue [Mon, 17 Feb 2020 09:07:04 +0000 (17:07 +0800)]
Do not propagate self-dependent value (PR ipa/93763)
PR ipa/93763
* ipa-cp.c (self_recursively_generated_p): Mark self-dependent value as
self-recursively generated.
Iain Sandoe [Fri, 21 Feb 2020 20:12:39 +0000 (20:12 +0000)]
Darwin: Fix wrong quoting on an error string (PR93860).
The quotes should surround all of the literal content from the pragma
that has incorrect usage.
2020-02-21 Iain Sandoe <iain@sandoe.co.uk>
PR target/93860
* config/darwin-c.c (pop_field_alignment): Adjust quoting of
error string.
Martin Sebor [Fri, 21 Feb 2020 17:45:56 +0000 (10:45 -0700)]
PR c++/93753 - ICE on a flexible array followed by a member in an anonymous struct with an initializer
gcc/cp/ChangeLog:
PR gcov-profile/93753
* class.c (check_flexarrays): Tighten up a test for potential members
of anonymous structs or unions.
gcc/testsuite/ChangeLog:
PR gcov-profile/93753
* g++.dg/ext/flexary36.C: New test.
* g++.dg/lto/pr93166_0.C: Make struct with flexarray valid.
Jonathan Wakely [Fri, 21 Feb 2020 12:02:15 +0000 (12:02 +0000)]
libstdc++: Define <=> for tuple, optional and variant
Another piece of P1614R2.
* include/std/optional (operator<=>(optional<T>, optional<U>))
(operator<=>(optional<T>, nullopt), operator<=>(optional<T>, U)):
Define for C++20.
* include/std/tuple (__tuple_cmp): New helper function for <=>.
(operator<=>(tuple<T...>, tuple<U>...)): Define for C++20.
* include/std/variant (operator<=>(variant<T...>, variant<T...>))
(operator<=>(monostate, monostate)): Define for C++20.
* testsuite/20_util/optional/relops/three_way.cc: New test.
* testsuite/20_util/tuple/comparison_operators/three_way.cc: New test.
* testsuite/20_util/variant/89851.cc: Move to ...
* testsuite/20_util/variant/relops/89851.cc: ... here.
* testsuite/20_util/variant/90008.cc: Move to ...
* testsuite/20_util/variant/relops/90008.cc: ... here.
* testsuite/20_util/variant/relops/three_way.cc: New test.
Mihail Ionescu [Fri, 21 Feb 2020 15:26:06 +0000 (15:26 +0000)]
[PATCH, GCC/ARM] Add MVE target check to sourcebuild.texi
Follow up to: https://gcc.gnu.org/ml/gcc-patches/2020-02/msg01109.html
Committed as obvious.
gcc/ChangeLog:
2020-02-21 Mihail Ionescu <mihail.ionescu@arm.com>
* doc/sourcebuild.texi (arm_v8_1m_mve_ok):
Document new target supports option.
Dennis Zhang [Fri, 21 Feb 2020 15:36:13 +0000 (15:36 +0000)]
arm: ACLE I8MM multiply-accumulate
This patch adds intrinsics for matrix multiply-accumulate instructions
including vmmlaq_s32, vmmlaq_u32, and vusmmlaq_s32.
gcc/ChangeLog:
2020-02-21 Dennis Zhang <dennis.zhang@arm.com>
* config/arm/arm_neon.h (vmmlaq_s32, vmmlaq_u32, vusmmlaq_s32): New.
* config/arm/arm_neon_builtins.def (smmla, ummla, usmmla): New.
* config/arm/iterators.md (MATMUL): New iterator.
(sup): Add UNSPEC_MATMUL_S, UNSPEC_MATMUL_U, and UNSPEC_MATMUL_US.
(mmla_sfx): New attribute.
* config/arm/neon.md (neon_<sup>mmlav16qi): New.
* config/arm/unspecs.md (UNSPEC_MATMUL_S, UNSPEC_MATMUL_U): New.
(UNSPEC_MATMUL_US): New.
gcc/testsuite/ChangeLog:
2020-02-21 Dennis Zhang <dennis.zhang@arm.com>
* gcc.target/arm/simd/vmmla_1.c: New test.
Uros Bizjak [Fri, 21 Feb 2020 15:23:30 +0000 (16:23 +0100)]
testsuite: Add -fcommon to gcc.target/i386/pr69052.c
This testcase is susceptible to memory location details and start to fail
with default to -fno-common. Use -fcommon to set expected testing conditions.
* gcc.target/i386/pr69052.c: Require target ia32.
(dg-options): Add -fcommon and remove -pie.
Mihail Ionescu [Fri, 21 Feb 2020 15:21:23 +0000 (15:21 +0000)]
[PATCH, GCC/ARM] Fix MVE scalar shift tests
*** gcc/ChangeLog ***
2020-02-21 Mihail-Calin Ionescu <mihail.ionescu@arm.com>
* config/arm/arm.md: Prevent scalar shifts from being
used when big endian is enabled.
*** gcc/testsuite/ChangeLog ***
2020-02-21 Mihail-Calin Ionescu <mihail.ionescu@arm.com>
* gcc.target/arm/armv8_1m-shift-imm-1.c: Add MVE target checks.
* gcc.target/arm/armv8_1m-shift-reg-1.c: Likewise.
* lib/target-supports.exp
(check_effective_target_arm_v8_1m_mve_ok_nocache): New.
(check_effective_target_arm_v8_1m_mve_ok): New.
(add_options_for_v8_1m_mve): New.
Uros Bizjak [Fri, 21 Feb 2020 15:12:57 +0000 (16:12 +0100)]
testsuite: Require vect_mutiple_sizes for scan-tree-dump in vect-epilogues.c
Default testsuite flags do not enable V8QI (MMX) vector mode for
32bit x86 targets. Require vect_multiple_sizes effective target in
scan-tree-dump to avoid "LOOP EPILOGUE VECTORIZED" failure.
* gcc.dg/vect/vect-epilogues.c (scan-tree-dump): Require
vect_mutiple_sizes effective target.
Frederik Harwath [Fri, 21 Feb 2020 14:26:02 +0000 (15:26 +0100)]
Adapt libgomp acc_get_property.f90 test
The commit r10-6721-g8d1a1cb1b816381bf60cb1211c93b8eba1fe1472 has changed
the name of the type that is used for the return value of the Fortran
acc_get_property function without adapting the test acc_get_property.f90.
2020-02-21 Frederik Harwath <frederik@codesourcery.com>
* testsuite/libgomp.oacc-fortran/acc_get_property.f90: Adapt to
changes from 2020-02-19, i.e. use integer(c_size_t) instead of
integer(acc_device_property) for the type of the return value of
acc_get_property.
Jan Hubicka [Fri, 21 Feb 2020 14:36:00 +0000 (15:36 +0100)]
tree-optimization: fix access path oracle on mismatched array refs [PR93586]
nonoverlapping_array_refs_p is not supposed to give meaningful results when
bases of ref1 and ref2 are not same or completely disjoint and here it is
called on c[0][j_2][0] and c[0][1] so bases in sence of this functions are
"c[0][j_2]" and "c[0]" which do partially overlap. nonoverlapping_array_refs
however walks pair of array references and in this case it misses to note the
fact that if it walked across first mismatched pair it is no longer safe to
compare rest.
The reason why it continues matching is because it hopes it will
eventually get pair of COMPONENT_REFs from types of same size and use
TBAA to conclude that their addresses must be either same or completely
disjoint.
This patch makes the loop to terminate early but popping all the
remaining pairs so walking can continue. We could re-synchronize on
arrays of same size with TBAA but this is bit fishy (because we try to
support some sort of partial array overlaps) and hard to implement
(because of zero sized arrays and VLAs) so I think it is not worth the
effort.
In addition I notied that the function is not !flag_strict_aliasing safe
and added early exits on places we set seen_unmatched_ref_p since later
we do not check that in:
/* If we skipped array refs on type of different sizes, we can
no longer be sure that there are not partial overlaps. */
if (seen_unmatched_ref_p
&& !operand_equal_p (TYPE_SIZE (type1), TYPE_SIZE (type2), 0))
{
++alias_stats
.nonoverlapping_refs_since_match_p_may_alias;
}
PR tree-optimization/93586
* tree-ssa-alias.c (nonoverlapping_array_refs_p): Finish array walk
after mismatched array refs; do not sure type size information to
recover from unmatched referneces with !flag_strict_aliasing_p.
* gcc.dg/torture/pr93586.c: New testcase.
Andrew Stubbs [Thu, 20 Feb 2020 14:44:04 +0000 (14:44 +0000)]
amdgcn: Use correct offset mode for gather/scatter
The scatter/gather pattern names changed for GCC 10, but I hadn't noticed.
This switches the patterns to the new offset mode scheme.
2020-02-21 Andrew Stubbs <ams@codesourcery.com>
gcc/
* config/gcn/gcn-valu.md (gather_load<mode>): Rename to ...
(gather_load<mode>v64si): ... this and set operand 2 to V64SI.
(scatter_store<mode>): Rename to ...
(scatter_store<mode>v64si): ... this and set operand 1 to V64SI.
(scatter<mode>_exec): Delete. Move contents ...
(mask_scatter_store<mode>): ... here, and rename that to ...
(mask_gather_load<mode>v64si): ... this. Set operand 2 to V64SI.
Remove mode conversion.
(mask_gather_load<mode>): Rename to ...
(mask_scatter_store<mode>v64si): ... this. Set operand 1 to V64SI.
Remove mode conversion.
* config/gcn/gcn.c (gcn_expand_scaled_offsets): Remove mode conversion.
Martin Jambor [Fri, 21 Feb 2020 12:38:22 +0000 (13:38 +0100)]
sra: Only verify sizes of scalar accesses (PR 93845)
the testcase is another example - in addition to recent PR 93516 - where
the SRA access verifier is confused by the fact that get_ref_base_extent
can return different sizes for the same type, depending whether they are
COMPONENT_REF or not. In the previous bug I decided to keep the
verifier check for aggregate type even though it is not really important
and instead avoid easily detectable type-within-the-same-type situation.
This testcase is however a result of a fairly random looking type cast
and so cannot be handled in the same way.
Because the check is not really important for aggregates, this patch
simply disables it for non-register types.
2020-02-21 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/93845
* tree-sra.c (verify_sra_access_forest): Only test access size of
scalar types.
testsuite/
* g++.dg/tree-ssa/pr93845.C: New test.
Andrew Stubbs [Fri, 21 Feb 2020 11:07:55 +0000 (11:07 +0000)]
amdgcn: Align VGPR pairs
Aligning the registers is not needed by the architecture, but doing so
allows us to remove the requirement for bug-prone early-clobber
constraints from many split patterns (and avoid adding more in future).
2020-02-21 Andrew Stubbs <ams@codesourcery.com>
gcc/
* config/gcn/gcn.c (gcn_hard_regno_mode_ok): Align VGPR pairs.
* config/gcn/gcn-valu.md (addv64di3): Remove early-clobber.
(addv64di3_exec): Likewise.
(subv64di3): Likewise.
(subv64di3_exec): Likewise.
(addv64di3_zext): Likewise.
(addv64di3_zext_exec): Likewise.
(addv64di3_zext_dup): Likewise.
(addv64di3_zext_dup_exec): Likewise.
(addv64di3_zext_dup2): Likewise.
(addv64di3_zext_dup2_exec): Likewise.
(addv64di3_sext_dup2): Likewise.
(addv64di3_sext_dup2_exec): Likewise.
(<expander>v64di3): Likewise.
(<expander>v64di3_exec): Likewise.
(*<reduc_op>_dpp_shr_v64di): Likewise.
(*plus_carry_dpp_shr_v64di): Likewise.
* config/gcn/gcn.md (adddi3): Likewise.
(addptrdi3): Likewise.
(<expander>di3): Likewise.
Andrew Stubbs [Wed, 5 Feb 2020 11:32:38 +0000 (11:32 +0000)]
amdgcn: fix mode in vec_series
2020-02-21 Andrew Stubbs <ams@codesourcery.com>
gcc/
* config/gcn/gcn-valu.md (vec_seriesv64di): Use gen_vec_duplicatev64di.
Richard Sandiford [Wed, 19 Feb 2020 17:22:14 +0000 (17:22 +0000)]
aarch64: Add SVE support for -mlow-precision-sqrt
SVE was missing support for -mlow-precision-sqrt, which meant that
-march=armv8.2-a+sve -mlow-precision-sqrt could cause a performance
regression compared to -march=armv8.2-a -mlow-precision-sqrt.
2020-02-21 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64.c (aarch64_emit_approx_sqrt): Add SVE
support. Use aarch64_emit_mult instead of emitting multiplication
instructions directly.
* config/aarch64/aarch64-sve.md (sqrt<mode>2, rsqrt<mode>2)
(@aarch64_rsqrte<mode>, @aarch64_rsqrts<mode>): New expanders.
gcc/testsuite/
* gcc.target/aarch64/sve/rsqrt_1.c: New test.
* gcc.target/aarch64/sve/rsqrt_1_run.c: Likewise.
* gcc.target/aarch64/sve/sqrt_1.c: Likewise.
* gcc.target/aarch64/sve/sqrt_1_run.c: Likewise.
Richard Sandiford [Wed, 19 Feb 2020 18:28:48 +0000 (18:28 +0000)]
aarch64: Add SVE support for -mlow-precision-div
SVE was missing support for -mlow-precision-div, which meant that
-march=armv8.2-a+sve -mlow-precision-div could cause a performance
regression compared to -march=armv8.2-a -mlow-precision-div.
I ended up doing this much later than originally intended, sorry...
2020-02-21 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64.c (aarch64_emit_mult): New function.
(aarch64_emit_approx_div): Add SVE support. Use aarch64_emit_mult
instead of emitting multiplication instructions directly.
* config/aarch64/iterators.md (SVE_COND_FP_BINARY_OPTAB): New iterator.
* config/aarch64/aarch64-sve.md (div<mode>3, @aarch64_frecpe<mode>)
(@aarch64_frecps<mode>): New expanders.
gcc/testsuite/
* gcc.target/aarch64/sve/recip_1.c: New test.
* gcc.target/aarch64/sve/recip_1_run.c: Likewise.
* gcc.target/aarch64/sve/recip_2.c: Likewise.
* gcc.target/aarch64/sve/recip_2_run.c: Likewise.
Richard Sandiford [Thu, 20 Feb 2020 13:57:44 +0000 (13:57 +0000)]
aarch64: Bump AARCH64_APPROX_MODE to 64 bits
We now have more than 32 scalar and vector float modes, so the
32-bit AARCH64_APPROX_MODE would invoke UB for some of them.
Bumping to a 64-bit mask fixes that... for now.
Ideally we'd have a static assert to trap this, but logically
it would go at file scope. I think it would be better to wait
until the switch to C++11, so that we can use static_assert
directly.
2020-02-21 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64-protos.h (AARCH64_APPROX_MODE): Operate
on and produce uint64_ts rather than ints.
(AARCH64_APPROX_NONE, AARCH64_APPROX_ALL): Change to uint64_ts.
(cpu_approx_modes): Change the fields from unsigned int to uint64_t.
Richard Sandiford [Thu, 20 Feb 2020 15:04:19 +0000 (15:04 +0000)]
aarch64: Avoid creating an unused register
The rsqrt path of aarch64_emit_approx_sqrt created a pseudo
register that it never used.
2020-02-21 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64.c (aarch64_emit_approx_sqrt): Don't create
an unused xmsk register when handling approximate rsqrt.
Richard Sandiford [Thu, 20 Feb 2020 14:16:12 +0000 (14:16 +0000)]
aarch64: Fix inverted approx_sqrt condition
The fix for PR80530 included an accidental flipping of the
flag_finite_math_only check, so that -ffinite-math-only (and thus
-ffast-math) disabled approximate sqrt rather than enabling it.
This is tested by later patches but seemed worth splitting out.
2020-02-21 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64.c (aarch64_emit_approx_sqrt): Fix inverted
flag_finite_math_only condition.
Palmer Dabbelt [Wed, 30 Oct 2019 04:40:09 +0000 (21:40 -0700)]
MAINTAINERS: Change to my personal email address
I left SiFive a bit more than three months ago, and while I sent out a message
saying I was going to updated my email address I neclected to actually do so.
I'm moving to my personal email address to avoid the need to do this again.
gcc/ChangeLog
2020-02-20 Palmer Dabbelt <palmer@sifive.com>
* MAINTAINERS: Change palmer@sifive.com to palmer@dabbelt.com.
Alexandre Oliva [Fri, 21 Feb 2020 01:09:03 +0000 (22:09 -0300)]
Allow CONFIG_SHELL to override build-time shell in mkheaders
mkheaders.in uses substitutions of @SHELL@ to run fixinc.sh and
mkinstalldirs. Problem is, SHELL comes from CONFIG_SHELL for the
build system, and it needs not match whatever is available at an
unrelated host system after installation, when mkheaders is supposed
to be run.
I considered ditching the hardcoding altogether, but decided to retain
it, but allowing CONFIG_SHELL and SHELL to override it, if any of them
can successfully run mkinstalldirs, and if those and the substituted
@SHELL@ fail, fallback to /bin/sh and to plain execution of the
script, which appears to enable at least one shell on a system that
doesn't typicall have a shell to recognize a script by #!/bin/sh and
reinvoke itself to run it.
If all of these fail, we fail, but only after telling the user to
retry after setting CONFIG_SHELL, that fixincl itself also uses.
for fixincludes/ChangeLog
* mkheaders.in: Don't require build-time shell on host.
GCC Administrator [Fri, 21 Feb 2020 00:16:41 +0000 (00:16 +0000)]
Daily bump.
Martin Sebor [Thu, 20 Feb 2020 21:31:38 +0000 (14:31 -0700)]
PR c++/93801 - False -Wmismatched-tags upon redundant typename
gcc/cp/ChangeLog:
PR c++/93801
* parser.c (cp_parser_check_class_key): Only handle true C++ class-keys.
gcc/testsuite/ChangeLog:
PR c++/93801
* g++.dg/warn/Wredundant-tags-3.C: New test.
Uros Bizjak [Thu, 20 Feb 2020 21:17:44 +0000 (22:17 +0100)]
testsuite: Do not run g++.target/i386/pr93828.C on 32bit targets.
Uros Bizjak [Thu, 20 Feb 2020 20:06:18 +0000 (21:06 +0100)]
i386: Fix *vec_extractv2sf_1 and *vec_extractv2sf_1 shufps alternative [PR93828]
shufps moves two of the four packed single-precision floating-point values
from *destination* operand (first operand) into the low quadword of the
destination operand. Match source operand to the destination.
PR target/93828
* config/i386/mmx.md (*vec_extractv2sf_1): Match source operand
to destination operand for shufps alternative.
(*vec_extractv2si_1): Ditto.
testsuite/ChangeLog:
PR target/93828
* g++.target/i386/pr93828.C: New test.
Uros Bizjak [Thu, 20 Feb 2020 20:04:44 +0000 (21:04 +0100)]
i386: Fix *vec_extractv2sf_1 and *vec_extractv2sf_1 shufps alternative [PR93828]
shufps moves two of the four packed single-precision floating-point values
from *destination* operand (first operand) into the low quadword of the
destination operand. Match source operand to the destination.
PR target/93828
* config/i386/mmx.md (*vec_extractv2sf_1): Match source operand
to destination operand for shufps alternative.
(*vec_extractv2si_1): Ditto.
testsuite/ChangeLog:
PR target/93828
* g++.target/i386/pr93828.C: New test.
Patrick Palka [Wed, 19 Feb 2020 19:10:32 +0000 (14:10 -0500)]
libstdc++: Fix capturing of lvalue references in_RangeAdaptor::operator()
This fixes a dangling-reference issue with views::split and other multi-argument
adaptors that may take its extra arguments by reference.
When creating the _RangeAdaptorClosure in _RangeAdaptor::operator(), we
currently capture all provided arguments by value. When we then use the
_RangeAdaptorClosure and call it with a range, as in e.g.
v = views::split(p)(range),
we forward the range and the captures to the underlying adaptor routine. But
then when the temporary _RangeAdaptorClosure goes out of scope, the by-value
captures get destroyed and the references to these captures in the resulting view
become dangling.
This patch fixes this problem by capturing lvalue references by reference in
_RangeAdaptorClosure::operator(), and then forwarding the captures appropriately
to the underlying adaptor routine.
libstdc++-v3/ChangeLog:
* include/std/ranges (views::__adaptor::__maybe_refwrap): New utility
function.
(views::__adaptor::_RangeAdaptor::operator()): Add comments. Use
__maybe_refwrap to capture lvalue references by reference, and then use
unwrap_reference_t to forward the by-reference captures as references.
* testsuite/std/ranges/adaptors/split.cc: Augment test.
* testsuite/std/ranges/adaptors/split_neg.cc: New test.
Patrick Palka [Thu, 20 Feb 2020 04:14:02 +0000 (23:14 -0500)]
libstdc++: Forward second argument of views::iota using the correct type
We are forwarding the second argument of views::iota using the wrong type,
causing compile errors when calling views::iota with a value and bound of
different types, like in the test case below.
libstdc++-v3/ChangeLog:
* include/std/ranges (iota_view): Forward declare _Sentinel.
(iota_view::_Iterator): Befriend _Sentinel.
(iota_view::_Sentinel::_M_equal): New member function.
(iota_view::_Sentinel::operator==): Use it.
(views::_Iota::operator()): Forward __f using the correct type.
* testsuite/std/ranges/access/ssize.cc (test06): Don't call views::iota
with integers of different signedness, to appease iota_view's deduction
guide.
* testsuite/std/ranges/iota/iota_view.cc: Augment test.
Peter Bergner [Thu, 20 Feb 2020 17:25:12 +0000 (11:25 -0600)]
rs6000: Fix infinite loop building ghostscript and icu [PR93658]
Previous push didn't get the ChangeLog entries or the actual fix.
Push those now.
gcc/
PR target/93658
* config/rs6000/rs6000.c (rs6000_legitimate_address_p): Handle VSX
vector modes.
gcc/testsuite/
PR target/93658
* gcc.target/powerpc/pr93658.c: New test.
Tobias Burnus [Thu, 20 Feb 2020 17:11:32 +0000 (18:11 +0100)]
OpenACC's tile clause fix for implicit typing (PR93825)
2020-02-20 Tobias Burnus <tobias@codesourcery.com>
PR fortran/93825
* openmp.c (resolve_oacc_loop_blocks): Move call to
resolve_oacc_nested_loops from here ...
(resolve_oacc_loop): ... to here.
PR fortran/93825
* gfortran.dg/goacc/tile-3.f90: New.
Peter Bergner [Thu, 20 Feb 2020 17:08:02 +0000 (11:08 -0600)]
rs6000: Fix infinite loop building ghostscript and icu [PR93658]
Fix rs6000_legitimate_address_p(), which erroneously marks a valid Altivec
address as being invalid, which causes LRA's process_address() to go into
an infinite loop spilling the same address over and over again.
gcc/
PR target/93658
* config/rs6000/rs6000.c (rs6000_legitimate_address_p): Handle VSX
vector modes.
gcc/testsuite/
PR target/93658
* gcc.target/powerpc/pr93658.c: New test.
Jonathan Wakely [Thu, 20 Feb 2020 13:20:44 +0000 (13:20 +0000)]
libstdc++: Issues with range access CPOs (P2091R0)
This changes how arrays of unknown bound and/or incomplete element type
are handled.
* include/bits/range_access.h (ranges::begin): Reject array of
incomplete type.
(ranges::end, ranges::size): Require arrays to be bounded.
(ranges::data): Require lvalue or borrowed_range.
(ranges::iterator_t): Remove constraint.
* testsuite/std/ranges/access/begin.cc: Do not check array of
incomplete type.
* testsuite/std/ranges/access/begin_neg.cc: New test.
* testsuite/std/ranges/access/end_neg.cc: Adjust expected error.
* testsuite/std/ranges/access/size_neg.cc: Adjust expected error.
* testsuite/std/ranges/access/ssize.cc: Do not check array of
incomplete type.
Jonathan Wakely [Fri, 7 Feb 2020 20:50:00 +0000 (20:50 +0000)]
libstdc++: Define operator<=> for <system_error> types
Another piece of P1614R2 for C++20.
This also adds tests for operator< in C++11, which was present but
untested.
* include/std/system_error (error_category::operator<=>)
(operator<=>(const error_code&, const error_code&))
(operator<=>(const error_condition&, const error_condition&)): Define
for C++20.
* testsuite/19_diagnostics/error_category/operators/less.cc: New test.
* testsuite/19_diagnostics/error_category/operators/three_way.cc: New
test.
* testsuite/19_diagnostics/error_code/operators/equal.cc: Remove
incorrect comment.
* testsuite/19_diagnostics/error_code/operators/less.cc: New test.
* testsuite/19_diagnostics/error_code/operators/not_equal.cc: Remove
incorrect comment.
* testsuite/19_diagnostics/error_code/operators/three_way.cc: New test.
* testsuite/19_diagnostics/error_condition/operators/equal.cc: Remove
incorrect comment.
* testsuite/19_diagnostics/error_condition/operators/less.cc: New test.
* testsuite/19_diagnostics/error_condition/operators/not_equal.cc:
Remove incorrect comment.
* testsuite/19_diagnostics/error_condition/operators/three_way.cc: New
test.
Jonathan Wakely [Fri, 7 Feb 2020 20:50:00 +0000 (20:50 +0000)]
libstdc++: Remove std::type_info::operator!= for C++20
This function can be synthesized by the compiler now.
* libsupc++/typeinfo (type_info::operator!=): Remove for C++20.
Jonathan Wakely [Fri, 7 Feb 2020 20:28:06 +0000 (20:28 +0000)]
libstdc++: Add <=> to thread::id
* include/std/thread (thread::id::operator<=>): Define for C++20.
* testsuite/30_threads/thread/id/70294.cc: Do not take addresses of
functions in namespace std.
* testsuite/30_threads/thread/id/operators_c++20.cc: New test.
Martin Liska [Thu, 20 Feb 2020 11:01:48 +0000 (12:01 +0100)]
Remove superfluous word in documentation.
PR translation/93841
* config/or1k/or1k.opt: Remove superfluous word.
* doc/invoke.texi: Likewise.
Martin Liska [Thu, 20 Feb 2020 11:01:44 +0000 (12:01 +0100)]
Remove triling space for a warning.
PR translation/93838
* parser.c (cp_parser_decl_specifier_seq): Remove trailing space.
Martin Liska [Thu, 20 Feb 2020 11:01:41 +0000 (12:01 +0100)]
Fix error message for Darwin.
PR translation/93831
* config/darwin.c (darwin_override_options): Change 64b to 64-bit mode.
Martin Liska [Thu, 20 Feb 2020 11:01:09 +0000 (12:01 +0100)]
Remove trailing | in help message.
PR translation/93830
* common/config/avr/avr-common.c: Remote trailing "|".
Joseph Myers [Thu, 20 Feb 2020 01:17:02 +0000 (01:17 +0000)]
Update gcc de.po.
* de.po: Update.
GCC Administrator [Thu, 20 Feb 2020 00:16:56 +0000 (00:16 +0000)]
Daily bump.
Marek Polacek [Wed, 19 Feb 2020 21:36:38 +0000 (16:36 -0500)]
c++: Fix wrong-code with non-constexpr constructor [PR93169]
In order to detect modifying constant objects in constexpr evaluation,
which is UB, in r10-2655 I added code that sets TREE_READONLY on
CONSTRUCTORs of const-qualified objects after they have been fully
constructed. But I never made sure that what we're setting the flag
on actually is a CONSTRUCTOR. Consequently, as this test case shows,
we could set TREE_READONLY on a VAR_DECL that in fact wasn't constant,
causing problems later. Fixed by setting the flag on CONSTRUCTORs
only, and only when the evaluation produced something constant.
2020-02-19 Marek Polacek <polacek@redhat.com>
PR c++/93169 - wrong-code with a non-constexpr constructor.
* constexpr.c (cxx_eval_call_expression): Only set TREE_READONLY
on constant CONSTRUCTORs.
* g++.dg/cpp0x/constexpr-93169.C: New test.
Martin Sebor [Wed, 19 Feb 2020 23:54:50 +0000 (16:54 -0700)]
PR tree-optimization/92128 - fold more non-constant strlen relational expressions
gcc/testsuite/ChangeLog:
* gcc.dg/strlenopt-81.c: Align arrays to let strictly aligned targets
optimize away calls as expected.
Patrick Palka [Wed, 19 Feb 2020 18:54:21 +0000 (13:54 -0500)]
libstdc++: Add missing call to unused subroutine in split_view test
libstdc++-v3/ChangeLog:
* testsuite/std/ranges/adaptors/split.cc (test03): Don't include the
null terminator of the underlying string as part of the test_range.
(main): Call test03.
Jonathan Wakely [Wed, 19 Feb 2020 21:56:29 +0000 (21:56 +0000)]
libstdc++: make common_iterator<I, S> require copyable<I> (LWG 3385)
* include/bits/stl_iterator.h (common_iterator): Add copyable<I>
requirement (LWG 3385).
* testsuite/24_iterators/headers/iterator/synopsis_c++20.cc: Adjust
expected declaration.
Jonathan Wakely [Wed, 19 Feb 2020 22:00:14 +0000 (22:00 +0000)]
libstdc++: Add default-initializers to views (LWG 3364)
* include/std/ranges (take_while_view, drop_view, drop_while_view)
(elements_view:_Iterator): Initialize data members (LWG 3364).
Jonathan Wakely [Wed, 19 Feb 2020 21:45:59 +0000 (21:45 +0000)]
libstdc++: Simplify std::three_way_comparable_with (LWG 3360)
This also removes a useless condition that was supposed to be removed by
the P1959R0 changes, but left in when that was implemented.
* libsupc++/compare (three_way_comparable): Remove always-false check
that should have been removed with weak_equality (P1959R0).
(three_way_comparable_with): Likewise. Reorder requirements (LWG 3360).
Jonathan Wakely [Wed, 19 Feb 2020 21:40:03 +0000 (21:40 +0000)]
libstdc++: Simplify std::totally_ordered (LWG 3331)
* include/std/concepts (__detail::__partially_ordered_with): Move here
from <compare>.
(totally_ordered, totally_ordered_with): Use __partially_ordered_with
to simplify definition (LWG 3331).
* libsupc++/compare (__detail::__partially_ordered_with): Move to
<concepts>.
Jonathan Wakely [Wed, 19 Feb 2020 21:31:06 +0000 (21:31 +0000)]
libstdc++: Simplify std::totally_ordered_with (LWG 3329)
* include/std/concepts (totally_ordered_with): Remove redundant
requirement (LWG 3329).
Jonathan Wakely [Wed, 19 Feb 2020 17:04:07 +0000 (17:04 +0000)]
libstdc++: subrange converting constructor should disallow slicing (LWG 3282)
* include/std/ranges (__detail::__convertible_to_non_slicing): New
helper concept.
(__detail::__pair_like_convertible_to): Remove.
(__detail::__pair_like_convertible_from): Add requirements for
non-slicing conversions.
(subrange): Constrain constructors with __convertible_to_non_slicing.
Remove constructors from pair-like types. Add new deduction guide.
* testsuite/std/ranges/subrange/lwg3282_neg.cc: New test.
Jonathan Wakely [Wed, 19 Feb 2020 16:43:07 +0000 (16:43 +0000)]
libstdc++: ranges::iter_move should perform ADL-only lookup (LWG 3247)
* include/bits/iterator_concepts.h (iter_move): Add declaration to
prevent unqualified lookup finding a suitable declaration (LWG 3247).
Uros Bizjak [Wed, 19 Feb 2020 19:39:02 +0000 (20:39 +0100)]
testsuite: Add -msse2 to fix ia32 tests.
* gcc.dg/gimplefe-41.c: Add -msse2 additional options for x86 targets.
* gcc.dg/ipa/ipa-sra-19.c: Ditto.
Bernd Edlinger [Wed, 19 Feb 2020 17:47:39 +0000 (18:47 +0100)]
Fix a typo in comment.
2020-02-19 Bernd Edlinger <bernd.edlinger@hotmail.de>
* collect2.c (maybe_run_lto_and_relink): Fix typo in
comment.
Jonathan Wakely [Wed, 19 Feb 2020 15:21:31 +0000 (15:21 +0000)]
libstdc++: make polymorphic_allocator throw consistent type (LWG 3237)
* include/std/memory_resource (polymorphic_allocator::allocate)
(polymorphic_allocator::allocate_object): Change type of exception to
bad_array_new_length (LWG 3237).
* testsuite/20_util/polymorphic_allocator/lwg3237.cc: New test.
Jonathan Wakely [Wed, 19 Feb 2020 15:06:24 +0000 (15:06 +0000)]
libstdc++: Add __cpp_lib_unwrap_ref feature test macro
We already defined the traits in <type_traits> as now required by LWG
3348, but the macro was missing. This adds it.
* include/std/type_traits (__cpp_lib_unwrap_ref): Define (LWG 3348).
* include/std/version (__cpp_lib_unwrap_ref): Likewise.
* testsuite/20_util/unwrap_reference/1.cc: Check macro.
* testsuite/20_util/unwrap_reference/3.cc: New test.
Jonathan Wakely [Wed, 19 Feb 2020 15:01:41 +0000 (15:01 +0000)]
libstdc++: midpoint should not constrain T is complete (LWG 3200)
* include/std/numeric (midpoint(T8, T*)): Do not check for complete
type during overload resolution, use static assert instead (LWG 3200).
* testsuite/26_numerics/midpoint/pointer.cc: Do not test with
incomplete type.
* testsuite/26_numerics/midpoint/pointer_neg.cc: New test.
Jonathan Wakely [Wed, 19 Feb 2020 14:41:46 +0000 (14:41 +0000)]
libstdc++: span's deduction-guide for built-in arrays doesn't work (LWG 3369)
The 23_containers/span/deduction.cc test was already passing, but only
because I had previously implemented the original proposed resolution of
3255. As pointed out in 3255 that original P/R was incorrect because it
broke construction from array xvalues. This reverts the incorrect part
of 3255 (and adds tests for the case it broke), and implements the
resolution of 3369 instead.
* include/std/span (span(T (&)[N])): Use non-deduced context to
prevent first parameter from interfering with class template argument
deduction (LWG 3369).
* testsuite/23_containers/span/deduction.cc: Add missing 'const'.
* testsuite/23_containers/span/lwg3255.cc: Check for construction from
rvalues.
Jonathan Wakely [Wed, 19 Feb 2020 14:00:59 +0000 (14:00 +0000)]
libstdc++: Remove std::span::cbegin and std::span::cend (LWG 3320)
* include/std/span (span::const_iterator, span::const_reverse_iterator)
(span::cbegin(), span::cend(), span::crbegin(), span::crend()):
Remove (LWG 3320).
* testsuite/23_containers/span/everything.cc: Replace uses of cbegin
and cend.
* testsuite/20_util/specialized_algorithms/destroy/constrained.cc:
Likewise.
* testsuite/20_util/specialized_algorithms/uninitialized_copy/
constrained.cc: Likewise.
* testsuite/20_util/specialized_algorithms/
uninitialized_default_construct/constrained.cc: Likewise.
* testsuite/20_util/specialized_algorithms/uninitialized_fill/
constrained.cc: Likewise.
* testsuite/20_util/specialized_algorithms/uninitialized_move/
constrained.cc: Likewise.
* testsuite/20_util/specialized_algorithms/
uninitialized_value_construct/constrained.cc: Likewise.
Richard Sandiford [Tue, 18 Feb 2020 18:06:32 +0000 (18:06 +0000)]
vect: Fix offset calculation for -ve strides [PR93767]
This PR is a regression caused by r256644, which added support for alias
checks involving variable strides. One of the changes in that commit
was to split the access size out of the segment length. The PR shows
that I hadn't done that correctly for the handling of negative strides
in vect_compile_time_alias. The old code was:
const_length_a = (-wi::to_poly_wide (segment_length_a)).force_uhwi ();
offset_a = (offset_a + vect_get_scalar_dr_size (a)) - const_length_a;
where vect_get_scalar_dr_size (a) was cancelling out the subtraction
of the access size inherent in "- const_length_a". Taking the access
size out of the segment length meant that the addition was no longer
needed/correct.
2020-02-19 Richard Sandiford <richard.sandiford@arm.com>
gcc/
PR tree-optimization/93767
* tree-vect-data-refs.c (vect_compile_time_alias): Remove the
access-size bias from the offset calculations for negative strides.
gcc/testsuite/
PR tree-optimization/93767
* gcc.dg/vect/pr93767.c: New test.
Jonathan Wakely [Wed, 19 Feb 2020 12:30:10 +0000 (12:30 +0000)]
libstdc++: Add ranges_size_t and rename all_view (LWG 3335)
* include/bits/range_access.h (range_size_t): Define alias template.
* include/std/ranges (all_view): Rename to views::all_t (LWG 3335).
* testsuite/std/ranges/adaptors/filter.cc: Adjust to new name.
Jonathan Wakely [Wed, 19 Feb 2020 12:26:19 +0000 (12:26 +0000)]
libstdc++: Remove converting constructors from views (LWG 3280)
* include/std/ranges (filter_view, transform_view, take_view)
(join_view, split_view, reverse_view): Remove commented-out converting
constructors (LWG 3280).
Jonathan Wakely [Wed, 19 Feb 2020 12:14:54 +0000 (12:14 +0000)]
libstdc++: uninitialized_construct_using_allocator should use construct_at (LWG 3321)
* include/std/memory (uninitialized_construct_using_allocator): Use
std::construct_at (LWG 3321).
Jonathan Wakely [Wed, 19 Feb 2020 12:04:53 +0000 (12:04 +0000)]
libstdc++: Add nodiscard to polymorphic_allocator members (LWG 3304)
* include/std/memory_resource (polymorphic_allocator::allocate_bytes)
(polymorphic_allocator::allocate_object)
(polymorphic_allocator::new_object): Add nodiscard attribute (LWG3304).
Jonathan Wakely [Wed, 19 Feb 2020 11:54:19 +0000 (11:54 +0000)]
libstdc++: "safe" in several library names is misleading (LWG 3379)
* include/bits/range_access.h (enable_safe_range): Rename to
enable_borrowed_range.
(__detail::__maybe_safe_range): Rename to __maybe_borrowed_range.
(safe_range): Rename to borrowed_range.
* include/bits/ranges_algo.h: Adjust to use new names.
* include/bits/ranges_algobase.h: Likewise.
* include/bits/ranges_uninitialized.h: Likewise.
* include/std/ranges: Likewise.
(safe_iterator_t): Rename to borrowed_iterator_t.
(safe_subrange_t): Rename to borrowed_subrange_t.
* include/std/span: Adjust to use new names.
* include/std/string_view: Likewise.
* include/experimental/string_view: Likewise.
* testsuite/std/ranges/access/begin.cc: Likewise.
* testsuite/std/ranges/access/cbegin.cc: Likewise.
* testsuite/std/ranges/access/cdata.cc: Likewise.
* testsuite/std/ranges/access/cend.cc: Likewise.
* testsuite/std/ranges/access/crbegin.cc: Likewise.
* testsuite/std/ranges/access/crend.cc: Likewise.
* testsuite/std/ranges/access/data.cc: Likewise.
* testsuite/std/ranges/access/end.cc: Likewise.
* testsuite/std/ranges/access/rbegin.cc: Likewise.
* testsuite/std/ranges/access/rend.cc: Likewise.
* testsuite/std/ranges/safe_range.cc: Likewise.
* testsuite/std/ranges/safe_range_types.cc: Likewise.
* testsuite/util/testsuite_iterators.h: Likewise.
Jonathan Wakely [Wed, 19 Feb 2020 11:37:54 +0000 (11:37 +0000)]
libstdc++: tuple_element_t is also wrong for const subrange (LWG 3398)
* include/std/ranges (tuple_element<0, const subrange<I, S, K>>)
(tuple_element<1, const subrange<I, S, K>>): Add partial
specializations (LWG 3398).
* testsuite/std/ranges/subrange/tuple_like.cc: New test.
Jonathan Wakely [Wed, 19 Feb 2020 10:40:24 +0000 (10:40 +0000)]
libstdc++: Remove redundant bool casts in ranges algorithms
Some of these casts were added by me the other day, but some were
already present. I think they are all redundant following the
introduction of the boolean-testable concept in P1964R2.
* include/bits/ranges_algo.h (__find_fn, __find_first_of_fn)
(__adjacent_find_fn, __remove_if_fn, __remove_copy_if_fn)
(__unique_fn, __unique_copy_fn): Remove redundant conversions to bool.
Bernd Edlinger [Mon, 17 Feb 2020 16:40:07 +0000 (17:40 +0100)]
Fix -save-temp leaking files in /tmp
And avoid signal handler calling signal unsafe functions,
and/or calling unlink with uninitialized memory pointer.
2020-02-19 Bernd Edlinger <bernd.edlinger@hotmail.de>
* collect2.c (c_file, o_file): Make const again.
(ldout,lderrout, dump_ld_file): Remove.
(tool_cleanup): Avoid calling not signal-safe functions.
(maybe_run_lto_and_relink): Avoid possible signal handler
access to unintialzed memory (lto_o_files).
(main): Avoid leaking temp files in $TMPDIR.
Initialize c_file/o_file with concat, which avoids exposing
uninitialized memory to signal handler, which calls unlink(!).
Avoid calling maybe_unlink when the main function returns,
since the atexit handler is already doing this.
* collect2.h (dump_ld_file, ldout, lderrout): Remove.
Martin Jambor [Wed, 19 Feb 2020 10:13:52 +0000 (11:13 +0100)]
sra: Do not create zero sized accesses (PR 93776)
SRA can get a bit confused with zero-sized accesses like the one in
the testcase. Since there is nothing in the access, nothing is
scalarized, but we can get order of the structures wrong, which the
verifier is not happy about.
Fixed by simply ignoring such accesses.
2020-02-19 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/93776
* tree-sra.c (create_access): Do not create zero size accesses.
(get_access_for_expr): Do not search for zero sized accesses.
testsuite/
* gcc.dg/tree-ssa/pr93776.c: New test.
Martin Jambor [Wed, 19 Feb 2020 10:08:40 +0000 (11:08 +0100)]
sra: Avoid totally scalarizing overallping field_decls (PR 93667)
[[no_unique_address]] C++ attribute can cause two fields of a
RECORD_TYPE overlap, which currently confuses the totally scalarizing
code into creating invalid access tree. For GCC 10, I'd like to
simply disable total scalarization of types where this happens.
For GCC 11 I'll write down a TODO item to enable total scalarization
of cases like this where the problematic fields are basically empty -
despite having a non-zero size - i.e. when they are just RECORD_TYPEs
without any data fields.
2020-02-19 Martin Jambor <mjambor@suse.cz>
gcc/
PR tree-optimization/93667
* tree-sra.c (scalarizable_type_p): Return false if record fields
do not follow wach other.
gcc/testsuite/
PR tree-optimization/93667
* g++.dg/tree-ssa/pr93667.C: New test.
Tobias Burnus [Wed, 19 Feb 2020 08:13:44 +0000 (09:13 +0100)]
libgomp: Fixes + cleanup for OpenACC's Fortran module + openacc_lib.h
2020-02-19 Tobias Burnus <tobias@codesourcery.com>
* .gitattributes: New; whitespace handling for Fortran's openacc_lib.h.
* config/accel/openacc.f90 (openacc_kinds): Add acc_device_current.
(openacc_internal, acc_on_device_h): Fix argument name; minor cleanup.
* libgomp.texi (Enabling OpenACC): No longer mark as experimental.
(acc_set_device_num): Fix Fortran argument name, use same name for C.
(acc_get_property): Update Fortran interface to post-OpenACC 3.0
corrections; add note about the previous interface and named constant.
(OpenACC library and environment variables): Fix two typos.
* openacc.f90: Use for all procedures the argument names from the spec
as for …_h they are user visible.
(openacc_kinds): Rename acc_device_property to
acc_device_property_kinds and change value to int32 ; and update users.
Re-add acc_device_property for for backward compatibility.
(acc_get_property_string_h): Clean up as acc_device_property_kind
changed.
(acc_get_property_h): Likewise and return c_size_t instead of
acc_device_property.
(openacc): Also export acc_device_property_kinds.
(acc_async_test_h, acc_async_test_all_h, acc_on_device_h,
acc_is_present_32_h, acc_is_present_64_h): Simplify logical-return-value
handling; check against /= 0 instead of == 1 to match C.
* openacc_lib.h: Use for all procedures the argument names from the spec
as for …_h they are user visible. Place !GCC$ into the first column to
be active also for fixed-form souce form.
(acc_device_current, acc_device_property_kind, acc_device_property,
acc_property_memory, acc_property_free_memory, acc_property_name,
acc_property_vendor, acc_property_driver): New named constants.
(acc_get_property, acc_get_property_string): New generic interface.
Kito Cheng [Tue, 18 Feb 2020 05:47:50 +0000 (13:47 +0800)]
RISC-V: Using fmv.x.w/fmv.w.x rather than fmv.x.s/fmv.s.x
- fmv.x.s/fmv.s.x renamed to fmv.x.w/fmv.w.x in the latest RISC-V ISA
manual.
- Tested rv32gc/rv64gc on bare-metal with qemu.
ChangeLog
gcc/
Kito Cheng <kito.cheng@sifive.com>
* config/riscv/riscv.c (riscv_output_move) Using fmv.x.w/fmv.w.x
rather than fmv.x.s/fmv.s.x.
Patrick Palka [Tue, 18 Feb 2020 17:31:25 +0000 (12:31 -0500)]
libstdc++: P1983R0 Wording for GB301, US296, US292, US291, and US283
Among other changes, P1983R0 resolves LWG 3278 in a different way, so this patch
also reverts the already-applied wording of LWG 3278.
The wording for US291 (the join_view::begin hunk) also required adding the
friend _Iterator<!_Const> to join_view::_Iterator. This friend is needed so
that _Iterator's converting constructor can access the private members of an
_Iterator of the opposite constness.
The wording for US283 has already been applied it seems.
libstdc++-v3/ChangeLog:
P1983R0 Wording for GB301, US296, US292, US291, and US283
* include/std/ranges (filter_view::pred): New member function.
(join_view::_Iterator::_Iterator): Remove now-redundant comment since
P1983R0 fixes the highlighted issue in the same way.
(join_view::_Iterator<_Const>): Add friend
join_view::_Iterator<!_Const>.
(join_view::_M_inner): Remove mutable specifier, effectively reverting
the proposed wording changes of P3278.
(join_view::begin): Refine the condition for when to return a const
iterator.
(split_view::_OuterIter::_OuterIter): Adjust constraints.
* testsuite/std/ranges/adaptors/filter.cc: Test that filter_view::pred
exists and works.
liuhongt [Tue, 18 Feb 2020 12:51:44 +0000 (20:51 +0800)]
Add -mavx512vbmi2 to i386-2.C and i386-3.C
2020-02-18 Hongtao Liu <hongtao.liu@intel.com>
gcc/testsuite/
* g++.dg/other/i386-2.C: add -mavx512vbmi2
* g++.dg/other/i386-3.C: Ditto.
GCC Administrator [Wed, 19 Feb 2020 00:16:37 +0000 (00:16 +0000)]
Daily bump.
Jonathan Wakely [Tue, 18 Feb 2020 23:22:25 +0000 (23:22 +0000)]
libstdc++: Fix compilation of <ranges> with Clang (PR 93818)
PR libstdc++/93818
* include/std/ranges (_RangeAdaptor): Add deduction guide.
(filter_view::_Iterator): Add alias _Vp_iter and use in place of
iterator_t<_Vp>.
(filter_view::_Iterator::_S_iter_cat()): Add 'typename'.
(transform_view::_Iterator): Add alias _Base_iter and use in place of
iterator_t<_Base>.
(transform_view::_Iterator::_S_iter_cat()): Add 'typename'.
(join_view::_Iterator): Add _Outer_iter and _Inner_iter aliases.
(join_view::_Iterator::_S_iter_cat()): Add 'typename'.
(split_view::_InnerIter::_S_iter_cat()): Likewise.
James Greenhalgh [Tue, 18 Feb 2020 14:45:49 +0000 (14:45 +0000)]
aarch64: Move vmull_<high_>* to intrinsics
Move some arm_neon.h functions which currently use assembly over
to intrinsics.
2020-02-18 James Greenhalgh <james.greenhalgh@arm.com>
gcc/
* config/aarch64/aarch64-simd-builtins.def
(intrinsic_vec_smult_lo_): New.
(intrinsic_vec_umult_lo_): Likewise.
(vec_widen_smult_hi_): Likewise.
(vec_widen_umult_hi_): Likewise.
* config/aarch64/aarch64-simd.md
(aarch64_intrinsic_vec_<su>mult_lo_<mode>): New.
* config/aarch64/arm_neon.h (vmull_high_s8): Use intrinsics.
(vmull_high_s16): Likewise.
(vmull_high_s32): Likewise.
(vmull_high_u8): Likewise.
(vmull_high_u16): Likewise.
(vmull_high_u32): Likewise.
(vmull_s8): Likewise.
(vmull_s16): Likewise.
(vmull_s32): Likewise.
(vmull_u8): Likewise.
(vmull_u16): Likewise.
(vmull_u32): Likewise.
gcc/testsuite/
* gcc.target/aarch64/vmull_high.c: New.
Marek Polacek [Tue, 18 Feb 2020 20:54:54 +0000 (15:54 -0500)]
c++: Fix array-init1.C for ILP32 [PR93817]
I only tested LP64 targets and missed this maybe-long unsigned int.
Tested with
GXX_TESTSUITE_STDS=98,11,14,17,2a make check-c++ RUNTESTFLAGS='--target_board=unix\{-m32,-m64\} dg.exp=array-init1.C'
2020-02-18 Marek Polacek <polacek@redhat.com>
PR c++/93817
* g++.dg/diagnostic/array-init1.C: Fix for ILP32.
Jon Beniston [Tue, 18 Feb 2020 20:48:19 +0000 (20:48 +0000)]
gcc.dg/strcmpopt_6.c: Add space in array for terminator.
Ian Lance Taylor [Tue, 18 Feb 2020 02:16:41 +0000 (18:16 -0800)]
cmd/go: update -DGOPKGPATH to use current pkgpath encoding
This will need to be done in the gc version too, probably more cleverly.
This version will ensure that the next GCC release works correctly
when using the GCC version of the go tool.
Updates golang/go#37272
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/219817
Jonathan Wakely [Tue, 18 Feb 2020 18:56:30 +0000 (18:56 +0000)]
libstdc++: Fix new tests that fail for ILP32 targets
* testsuite/20_util/integer_comparisons/equal.cc: Fix invalid
assumption that long is wider than int.
* testsuite/20_util/integer_comparisons/greater_equal.cc: Likewise.
* testsuite/20_util/integer_comparisons/less.cc: Likewise.
* testsuite/20_util/integer_comparisons/less_equal.cc: Likewise.
* testsuite/20_util/integer_comparisons/not_equal.cc: Likewise.
Thomas König [Thu, 13 Feb 2020 21:22:04 +0000 (22:22 +0100)]
Use au->lock exclusively for locking in async I/O.
2020-02-18 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/93599
* io/async.c (destroy_adv_cond): Do not destroy lock.
(async_io): Make sure au->lock is locked for finishing of thread.
Do not lock/unlock around signalling emptysignal. Unlock au->lock
before return.
(init_adv_cond): Do not initialize lock.
(enqueue_transfer): Unlock after signal.
(enqueue_done_id): Likewise.
(enqueue_done): Likewise.
(enqueue_close): Likewise.
(enqueue_data_transfer): Likewise.
(async_wait_id): Do not lock/unlock around signalling au->work.
(async_wait): Unlock after signal.
* io/async.h (SIGNAL): Add comment about needed au->lock.
Remove locking/unlocking of advcond->lock.
(WAIT_SIGNAL_MUTEX): Add comment. Remove locking/unlocking of
advcond->lock. Unlock mutex only at the end. Loop on
__ghread_cond_wait returning zero.
(REVOKE_SIGNAL): Add comment. Remove locking/unlocking of
advcond->lock.
(struct adv_cond): Remove mutex from struct.
asdf
Jonathan Wakely [Tue, 18 Feb 2020 15:51:27 +0000 (15:51 +0000)]
libstdc++: P1976R2 Fixed-size span construction from dynamic range
This includes fixes for first, last, as_bytes and as_writable_bytes
which were missing from the paper.
* include/std/span (__cpp_lib_span): Update value.
(span(It, size_type), span(It, End)): Make conditionally explicit. Add
assertion.
(span(R&&), span(const span<OType, OExtent>&)): Likewise and relax
constraints.
(span::first<Count>(), span::last<Count>()): Use explicit type in
return statement.
(as_bytes, as_writable_bytes): Likewise.
* include/std/version (__cpp_lib_span): Update value.
* testsuite/23_containers/span/1.cc: Check new value.
* testsuite/23_containers/span/2.cc: Check new value.
* testsuite/23_containers/span/explicit.cc: New test.
Jonathan Wakely [Tue, 18 Feb 2020 13:12:44 +0000 (13:12 +0000)]
libstdc++: Fix and simplify constraints on std::span constructors
This makes the constraints consistent with the pre-Prague working paper.
* include/std/span (span::__is_compatible_array): Simplify alias
template by using requires-clause.
(span::__is_compatible_ref): New alias template for constraining
constructors.
(span::__is_compatible_iterator, span::__is_compatible_range): Remove.
(span(It, size_type), span(It, End)): Use __is_compatible_ref.
(span(T(&)[N], span(array<T, N>&), span(const array<T, N>&)): Remove
redundant parentheses.
(span(R&&)): Add missing constraints.
Jonathan Wakely [Tue, 18 Feb 2020 12:33:07 +0000 (12:33 +0000)]
libstdc++: Reorder declarations of std::span members
I find it easier to work with this class when the declarations match the
order in the C++2a working paper.
There's no need to use long, descriptive template parameter names like
_ContiguousIterator when the parameter is already constrained by the
std::contiguous_iterator concept. This is also consistent with the
naming conventions in the working paper.
* include/std/span (span): Reorder members and rename template
parameters to match declarations in the C++2a working paper.
Jonathan Wakely [Tue, 18 Feb 2020 12:29:29 +0000 (12:29 +0000)]
libstdc++: P2116R0 Remove tuple-like protocol support from fixed-extent span
Following this change it's no longer possible to use std::span with
structured bindings or with the tuple-like API. It will probably come
back for C++23 though.
P2116R0 Remove tuple-like protocol support from fixed-extent span
* include/std/span (get, tuple_size, tuple_element): Remove.
* testsuite/23_containers/span/everything.cc: Remove checks for
tuple-like API.
* testsuite/23_containers/span/get_neg.cc: Remove.
* testsuite/23_containers/span/tuple_element_dynamic_neg.cc: Remove.
* testsuite/23_containers/span/tuple_element_oob_neg.cc: Remove.
* testsuite/23_containers/span/tuple_size_neg.cc: Remove.
Patrick Palka [Mon, 17 Feb 2020 21:13:28 +0000 (16:13 -0500)]
libstdc++: P2106R0 Alternative wording for GB315 and GB316
libstdc++-v3/ChangeLog:
P2106R0 Alternative wording for GB315 and GB316
* include/bits/ranges_algo.h (in_fun_result): New.
(for_each_result, for_each_n_result): Change into an alias of
in_fun_result.
(in_in_result): New.
(mismatch_result): Change into an alias of in_in_result.
(copy_if_result): Change into an alias of in_out_result.
(swap_ranges_result): Change into an alias of in_in_result.
(unary_transform_result): Change into an alias of in_out_result.
(in_in_out_result): New.
(binary_transform_result): Change into an alias of in_in_out_result.
(replace_copy_result, replace_copy_if_result, remove_copy_if_result,
remove_copy_result, unique_copy_result, reverse_copy_result,
rotate_copy_result, partial_sort_copy_result): Change into an alias of
in_out_result.
(in_out_out_result): New.
(partition_copy_result, merge_result): Change into an alias of
in_out_out_result.
(set_union_result, set_intersection_result): Change into an alias of
in_in_out_result.
(set_difference_result): Change into an alias of in_out_result.
(set_symmetric_difference): Change into an alias of in_in_out_result.
(min_max_result): New.
(minmax_result, minmax_element_result): Change into an alias of
min_max_result.
(in_found_result): New.
(next_permutation_result, prev_permutation_result): Change into an alias
of in_found_result.
(__next_permutation_fn::operator(), __prev_permutation_fn::operator()):
Adjust following changes to next_permutation_result and
prev_permutation_result.
* include/bits/ranges_algobase.h (in_out_result): New.
(copy_result, move_result, move_backward_result, copy_backward_result,
copy_n_result): Change into an alias of in_out_result.
* include/bits/ranges_uninitialized.h (uninitialized_copy_result,
uninitialized_copy_n_result, uninitialized_move_result,
uninitialized_move_n_result): Likewise.
* testsuite/25_algorithms/next_permutation/constrained.cc: Adjust uses of
structured bindings.
* testsuite/25_algorithms/prev_permutation/constrained.cc: Likewise.
Patrick Palka [Mon, 17 Feb 2020 16:50:29 +0000 (11:50 -0500)]
libstdc++: P1243R4 Rangify new algorithms
This adds rangified overloads for for_each_n, sample and clamp as per P1243R4.
libstdc++-v3/ChangeLog:
P1243R4 Rangify new algorithms
* include/bits/ranges_algo.h (for_each_n_result, __for_each_n_fn,
for_each_n, __sample_fn, sample, __clamp_fn, clamp): New.
* testsuite/25_algorithms/clamp/constrained.cc: New test.
* testsuite/25_algorithms/for_each/constrained.cc: Augment test.
* testsuite/25_algorithms/sample/constrained.cc: New test.
Mark Eggleston [Tue, 18 Feb 2020 15:54:13 +0000 (15:54 +0000)]
[fortran] ICE assign character pointer to non target PR93714
An ICE occurred if an attempt was made to assign a pointer to a
character variable that has an length incorrectly specified using
a real constant and does not have the target attribute.
gcc/fortran/ChangeLog
PR fortran/93714
* expr.c (gfc_check_pointer_assign): Move check for
matching character length to after checking the lvalue
attributes for target or pointer.
gcc/testsuite/ChangeLog
PR fortran/93714
* gfortran.dg/char_pointer_assign_6.f90: Look for no target
message instead of length mismatch.
* gfortran.dg/pr93714_1.f90
* gfortran.dg/pr93714_2.f90
Martin Liska [Tue, 18 Feb 2020 15:33:44 +0000 (16:33 +0100)]
Restore LTO PGO bootstrap after
ea0b12523d0d9a9059b5.
* value-prof.c (stream_out_histogram_value): Restore LTO PGO
bootstrap by missing removal of invalid sanity check.
Mark Eggleston [Tue, 18 Feb 2020 14:15:41 +0000 (14:15 +0000)]
[Fortran] ICE: Invalid expression in gfc_element_size PR93601
ICE occurs when assigning a BOZ constant to an class(*) variable
with the allocatable attribute. Use of BOZ constants outside
data statements and int/real/dble/cmplx intrinsics is not allowed.
Original patch provided by Steven G. Kargl <kargl@gcc.gnu.org>.
gcc/fortran/ChangeLog
PR fortran/93601
* match.c (gfc_match_assignment) : Reject assignment if
the lhs stype is BT_CLASS and the rhs type is BT_BOZ.
gcc/testsuite/ChangeLog
PR fortran/93601
* gfortran.dg/pr93601.f90 : New test.
Martin Liska [Tue, 18 Feb 2020 14:07:06 +0000 (15:07 +0100)]
Always compare types of LHS for gimple_assign in ICF.
PR ipa/92518
* ipa-icf-gimple.c (func_checker::compare_gimple_assign):
Always compare LHS of gimple_assign.
Martin Liska [Tue, 18 Feb 2020 13:39:41 +0000 (14:39 +0100)]
Drop MALLOC attribute for void functions.
PR ipa/93583
* cgraph.c (cgraph_node::verify_node): Verify MALLOC attribute
and return type of functions.
* ipa-param-manipulation.c (ipa_param_adjustments::adjust_decl):
Drop MALLOC attribute for void functions.
* ipa-pure-const.c (funct_state_summary_t::duplicate): Drop
malloc_state for a new VOID clone.
PR ipa/93583
* gcc.dg/ipa/pr93583.c: New test.
Martin Liska [Tue, 18 Feb 2020 13:28:22 +0000 (14:28 +0100)]
Introduce -fprofile-reproducibility and support it with TOP N.
PR ipa/92924
* common.opt: Add -fprofile-reproducibility.
* doc/invoke.texi: Document it.
* value-prof.c (dump_histogram_value):
Document and support behavior for counters[0]
being a negative value.
(get_nth_most_common_value): Handle negative
counters[0] in respect to flag_profile_reproducible.
PR ipa/92924
* libgcov-merge.c (merge_topn_values_set): Record
when a TOP N counter becomes invalid. When merging
remove a smallest value if the space is needed.
David Malcolm [Tue, 18 Feb 2020 11:06:31 +0000 (06:06 -0500)]
analyzer.opt: rewrite description of -fdump-analyzer-callgraph [PR 93692]
gcc/analyzer/ChangeLog:
PR analyzer/93692
* analyzer.opt (fdump-analyzer-callgraph): Rewrite description.
David Malcolm [Mon, 17 Feb 2020 22:37:52 +0000 (17:37 -0500)]
analyzer: fix ICE on failed casts [PR 93777]
PR analyzer/93777 reports ICEs in a Fortran and C++ case involving
a cast of a NULL pointer to a REFERENCE_TYPE.
In both cases the call to build_cast fails and returns a NULL type, but
region_model::maybe_cast_1 asserts that a non-NULL type was returned.
This patch fixes the ICEs by converting the assertion to a conditional.
gcc/analyzer/ChangeLog:
PR analyzer/93777
* region-model.cc (region_model::maybe_cast_1): Replace assertion
that build_cast returns non-NULL with a conditional, falling
through to the logic which returns a new unknown value of the
desired type if it fails.
gcc/testsuite/ChangeLog:
PR analyzer/93777
* g++.dg/analyzer/pr93777.C: New test.
* gfortran.dg/analyzer/pr93777.f90: New test.
David Malcolm [Mon, 17 Feb 2020 21:43:46 +0000 (16:43 -0500)]
analyzer: fix ICE on COMPONENT_REF of ARRAY_TYPE [PR 93778]
PR analyzer/93778 reports an ICE with -fanalyzer on a gfortran test case
at this gimple stmt:
_gfortran_st_set_nml_var (&dt_parm.0, &ro.xi.jq, &"ro%xi%jq"[1]{lb: 1 sz: 1}, 4, 0, D.3913);
where ro.xi.jq is a COMPONENT_REF, but ro.xi is of type "struct bl[3]".
The analyzer's handling of COMPONENT_REF assumes that the type of the
1st argument is a RECORD_TYPE or UNION_TYPE, whereas in this case it's
an ARRAY_TYPE, leading to a failed as_a inside
region_model::get_field_region.
This patch fixes the ICE by generalizing the "give up on this tree code"
logic from r10-6667-gf76a88ebf089871dcce215aa0cb1956ccc060895 for
PR analyzer/93388, so that the analyzer gives up when it needs to get an
lvalue for a COMPONENT_REF on something other than a RECORD_TYPE or
UNION_TYPE.
gcc/analyzer/ChangeLog:
PR analyzer/93778
* engine.cc (impl_region_model_context::on_unknown_tree_code):
Rename to...
(impl_region_model_context::on_unexpected_tree_code): ...this and
convert first argument from path_var to tree.
(exploded_node::on_stmt): Pass ctxt to purge_for_unknown_fncall.
* exploded-graph.h (region_model_context::on_unknown_tree_code):
Rename to...
(region_model_context::on_unexpected_tree_code): ...this and
convert first argument from path_var to tree.
* program-state.cc (sm_state_map::purge_for_unknown_fncall): Add
ctxt param and pass on to calls to get_rvalue.
* program-state.h (sm_state_map::purge_for_unknown_fncall): Add
ctxt param.
* region-model.cc (region_model::handle_unrecognized_call): Pass
ctxt on to call to get_rvalue.
(region_model::get_lvalue_1): Move body of default case to
region_model::make_region_for_unexpected_tree_code and call it.
Within COMPONENT_REF case, reject attempts to handle types other
than RECORD_TYPE and UNION_TYPE.
(region_model::make_region_for_unexpected_tree_code): New
function, based on default case of region_model::get_lvalue_1.
* region-model.h
(region_model::make_region_for_unexpected_tree_code): New decl.
(region_model::on_unknown_tree_code): Rename to...
(region_model::on_unexpected_tree_code): ...this and convert first
argument from path_var to tree.
(class test_region_model_context): Update vfunc implementation for
above change.
gcc/testsuite/ChangeLog:
PR analyzer/93778
* gfortran.dg/analyzer/pr93778.f90: New test.
David Malcolm [Mon, 17 Feb 2020 14:18:39 +0000 (09:18 -0500)]
analyzer: fix ICE on pointer arithmetic with incomplete types [PR 93774]
PR analyzer/93774 reports an ICE in gfortran with -fanalyzer within
region_model::convert_byte_offset_to_array_index on a pointer of
incomplete type ("character(kind=1)[0:][1:0] * restrict").
This patch bulletproofs the routine against incomplete types, fixing
the ICE.
gcc/analyzer/ChangeLog:
PR analyzer/93774
* region-model.cc
(region_model::convert_byte_offset_to_array_index): Use
int_size_in_bytes before calling size_in_bytes, to gracefully fail
on incomplete types.
gcc/testsuite/ChangeLog:
PR analyzer/93774
* gfortran.dg/analyzer/deferred_character_25.f90: New test,
based on gfortran.dg/deferred_character_25.f90.