Patrick Palka [Thu, 30 Jul 2020 02:06:36 +0000 (22:06 -0400)]
c++: abbreviated function template friend matching [PR96106]
In the below testcase, duplicate_decls wasn't merging the tsubsted
friend declaration for 'void add(auto)' with its definition, because
reduce_template_parm_level (during tsubst_friend_function) lost the
DECL_VIRTUAL_P flag on the auto's invented template parameter, which
caused template_heads_equivalent_p to deem the two template heads as not
equivalent in C++20 mode.
This patch makes reduce_template_parm_level carry over the
DECL_VIRTUAL_P flag from the original TEMPLATE_PARM_DECL.
gcc/cp/ChangeLog:
PR c++/96106
* pt.c (reduce_template_parm_level): Propagate DECL_VIRTUAL_P
from the original TEMPLATE_PARM_DECL to the new lowered one.
gcc/testsuite/ChangeLog:
PR c++/96106
* g++.dg/concepts/abbrev7.C: New test.
Patrick Palka [Thu, 30 Jul 2020 02:06:33 +0000 (22:06 -0400)]
c++: constraints and explicit instantiation [PR96164]
When considering to instantiate a member of a class template as part of
an explicit instantiation of the class template, we need to first check
the member's constraints before proceeding with the instantiation of the
member.
gcc/cp/ChangeLog:
PR c++/96164
* constraint.cc (constraints_satisfied_p): Return true if
!flags_concepts.
* pt.c (do_type_instantiation): Update a paragraph taken from
[temp.explicit] to reflect the latest specification. Don't
instantiate a member with unsatisfied constraints.
gcc/testsuite/ChangeLog:
PR c++/96164
* g++.dg/cpp2a/concepts-explicit-inst5.C: New test.
GCC Administrator [Thu, 30 Jul 2020 00:16:24 +0000 (00:16 +0000)]
Daily bump.
Roger Sayle [Tue, 28 Jul 2020 13:55:47 +0000 (15:55 +0200)]
nvptx: Support floating point reciprocal instructions
The following patch addds support for PTX's rcp.rn.f32 and rcp.rn.f64
instructions. Note that the "rcp.rn" forms of this instruction
calculate the fully IEEE compliant result for the reciprocal, unlike
the rcp.approx variants that just provide fast approximations.
This patch has been tested on nvptx-none hosted on x86_64-pc-linux-gnu
with "make" and "make check" with no new regressions.
2020-07-12 Roger Sayle <roger@nextmovesoftware.com>
gcc/ChangeLog:
* config/nvptx/nvptx.md (recip<mode>2): New instruction.
gcc/testsuite/ChangeLog:
* gcc.target/nvptx/recip-1.c: New test.
Joseph Myers [Wed, 29 Jul 2020 19:32:40 +0000 (19:32 +0000)]
Update gcc ja.po, sv.po.
* ja.po, sv.po: Update.
François Dumont [Mon, 20 Jan 2020 18:23:09 +0000 (19:23 +0100)]
libstdc++: Review _Local_iterator/_Local_const_iterator implementations.
_Local_iterator_base inherits _Node_iterator_base and so share the same
comparison operators. It avoids to expose special method _M_curr for debug
mode to compare such iterators.
libstdc++-v3/ChangeLog:
* include/bits/hashtable_policy.h (_Node_iterator_base()): New.
(operator==(const _Node_iterator_base&, const _Node_iterator_base&)):
Make hidden friend.
(operator!=(const _Node_iterator_base&, const _Node_iterator_base&)):
Make hidden friend.
(_Local_iterator_base<>): Inherits _Node_iterator_base.
(_Local_iterator_base<>::_M_cur): Remove.
(_Local_iterator_base<>::_M_curr()): Remove.
(operator==(const _Local_iterator_base&, const _Local_iterator_base&)):
Remove.
(operator!=(const _Local_iterator_base&, const _Local_iterator_base&)):
Remove.
* include/debug/unordered_map (unordered_map<>::_M_invalidate): Adapt.
(unordered_multimap<>::_M_invalidate): Adapt.
* include/debug/unordered_set (unordered_set<>::_M_invalidate): Adapt.
(unordered_multiset<>::_M_invalidate): Adapt.
Jason Merrill [Tue, 21 Jul 2020 04:19:49 +0000 (00:19 -0400)]
c++: Implement C++20 implicit move changes. [PR91427]
P1825R0 extends the C++11 implicit move on return by removing the
constraints on the called constructor: previously, it needed to take an
rvalue reference to the type of the returned variable. The paper also
allows move on throw of parameters and implicit move of rvalue references.
Discussion on the CWG reflector about how to avoid breaking the PR91212 test
in the new model settled on the model of doing only a single overload
resolution, with the variable treated as an xvalue that can bind to
non-const lvalue references. So this patch implements that approach. The
implementation does not use the existing LOOKUP_PREFER_RVALUE flag, but
instead sets a flag on the representation of the static_cast turning the
variable into an xvalue.
For the time being I'm limiting the new semantics to C++20 mode; since it
was moved as a DR, we will probably want to apply the change to other
standard modes as well once we have a better sense of the impact on existing
code, probably in GCC 12.
gcc/cp/ChangeLog:
PR c++/91427
* cp-tree.h (IMPLICIT_RVALUE_P): New.
(enum cp_lvalue_kind_flags): Add clk_implicit_rval.
(implicit_rvalue_p, set_implicit_rvalue_p): New.
* call.c (reference_binding): Check clk_implicit_rval.
(build_over_call): Adjust C++20 implicit move.
* coroutines.cc (finish_co_return_stmt): Simplify implicit move.
* except.c (build_throw): Adjust C++20 implicit move.
* pt.c (tsubst_copy_and_build) [STATIC_CAST_EXPR]: Propagate
IMPLICIT_RVALUE_P.
* tree.c (lvalue_kind): Set clk_implicit_rval.
* typeck.c (treat_lvalue_as_rvalue_p): Overhaul.
(maybe_warn_pessimizing_move): Adjust.
(check_return_expr): Adjust C++20 implicit move.
gcc/testsuite/ChangeLog:
PR c++/91427
* g++.dg/coroutines/co-return-syntax-10-movable.C: Extend.
* g++.dg/cpp0x/Wredundant-move1.C: Adjust for C++20.
* g++.dg/cpp0x/Wredundant-move7.C: Adjust for C++20.
* g++.dg/cpp0x/Wredundant-move9.C: Adjust for C++20.
* g++.dg/cpp0x/elision_neg.C: Adjust for C++20.
* g++.dg/cpp0x/move-return2.C: Adjust for C++20.
* g++.dg/cpp0x/ref-qual20.C: Adjust for C++20.
* g++.dg/cpp2a/implicit-move1.C: New test.
* g++.dg/cpp2a/implicit-move2.C: New test.
* g++.dg/cpp2a/implicit-move3.C: New test.
Jason Merrill [Wed, 29 Jul 2020 04:57:40 +0000 (00:57 -0400)]
c++: Avoid calling const copy ctor on implicit move. [PR91212]
Our implementation of C++11 implicit move was wrong for return; we didn't
actually hit the check for the type of the first parameter of the selected
constructor, because we didn't see LOOKUP_PREFER_RVALUE set properly.
Fixing that to look at the right flags fixed the issue for this testcase,
but broke implicit move for a by-value converting constructor (PR58051). I
think this was not allowed in C++17, but it is allowed under the implicit
move changes from C++20, and those changes were voted to apply as a DR to
earlier standards as well, so I don't want to break it now.
So after fixing the flags check I changed the test to allow value
parameters.
gcc/cp/ChangeLog:
PR c++/91212
* call.c (build_over_call): Don't call a const ref
overload for implicit move.
gcc/testsuite/ChangeLog:
PR c++/91212
* g++.dg/cpp0x/move-return3.C: New test.
Tobias Burnus [Wed, 29 Jul 2020 16:37:13 +0000 (18:37 +0200)]
OpenMP: Handle order(concurrent) clause in gfortran
gcc/fortran/ChangeLog:
* dump-parse-tree.c (show_omp_clauses): Handle order(concurrent).
* gfortran.h (struct gfc_omp_clauses): Add order_concurrent.
* openmp.c (enum omp_mask1, OMP_DO_CLAUSES, OMP_SIMD_CLAUSES):
Add OMP_CLAUSE_ORDER.
* trans-openmp.c (gfc_trans_omp_clauses, gfc_split_omp_clauses):
Handle order(concurrent) clause.
gcc/testsuite/ChangeLog:
* gfortran.dg/gomp/order-3.f90: New test.
* gfortran.dg/gomp/order-4.f90: New test.
Tiziano Müller [Wed, 29 Jul 2020 14:28:23 +0000 (07:28 -0700)]
preprocessor: Teach traditional about has_include [PR95889]
Traditional cpp (used by fortran) didn;t know about the new
__has_include__ implementation. Hey, since when did traditional cpp
grow __has_include__? That wasn't in knr!
libcpp/
* init.c (builtin_array): Add xref comment.
* traditional.c (fun_like_macro): Add HAS_INCLUDE codes.
gcc/testsuite/
* c-c++-common/cpp/has-include-1-traditional.c: New.
David Edelsohn [Tue, 28 Jul 2020 20:22:04 +0000 (16:22 -0400)]
testsuite: libstdc++ atomic_float/value_init.cc requires libatomic
atomic_float/value_init.cc requires libatomic for some targets, i.e., when
it tries to perform an atomic operation with a 64 bit floating point
double type on a 32 bit target. This patch adds AIX and Darwin to the
list of targets that require the libatomic option and adds the option to
the atomic_float/value_init.cc testcase.
libstdc++-v3/ChangeLog:
2020-07-28 David Edelsohn <dje.gcc@gmail.com>
Jonathan Wakely <jwakely@redhat.com>
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* testsuite/lib/dg-options.exp (add_options_for_libatomic): Add
target powerpc-ibm-aix* and powerpc*-*-darwin*.
* testsuite/29_atomics/atomic_float/value_init.cc: Add options
for libatomic.
Fangrui Song [Wed, 13 May 2020 15:27:29 +0000 (08:27 -0700)]
Don't make -gsplit-dwarf imply -g
-gsplit-dwarf introduces order dependency: it overrides previous -g0 and -g1.
Don't imply -g so that it can be plugged into a build without worrying
that unnecessary debugging information may be generated.
2020-05-13 Fangrui Song <maskray@google.com>
PR debug/95096
* opts.c (common_handle_option): Don't make -gsplit-dwarf imply -g.
* doc/invoke.texi (-gsplit-dwarf): Update documentation.
Tobias Burnus [Wed, 29 Jul 2020 13:09:55 +0000 (15:09 +0200)]
OpenMP: Permit in Fortran omp target data without map
gcc/fortran/ChangeLog:
* openmp.c (resolve_omp_clauses): Permit 'omp target data' without
map if use_device_{addr,ptr} is present.
gcc/testsuite/ChangeLog:
* gfortran.dg/gomp/map-3.f90: New test.
* gfortran.dg/gomp/map-4.f90: New test.
Joe Ramsay [Wed, 29 Jul 2020 13:04:28 +0000 (14:04 +0100)]
arm: Enable no-writeback vldr.16/vstr.16.
There was previously no way to specify that a register operand cannot
have any writeback modifiers, and as a result the argument to vldr.16
and vstr.16 could be erroneously output with post-increment. This
change adds a constraint which forbids all writeback, and
selects it in the relevant case for vldr.16 and vstr.16
Bootstrapped on arm-linux, gcc and CMSIS-DSP testsuites are clean.
Is this patch OK for trunk? If yes, please commit on my behalf as I
don't
have commit rights.
gcc/ChangeLog:
* config/arm/arm-protos.h (arm_coproc_mem_operand_no_writeback):
Declare prototype.
(arm_mve_mode_and_operands_type_check): Declare prototype.
* config/arm/arm.c (arm_coproc_mem_operand): Refactor to use
_arm_coproc_mem_operand.
(arm_coproc_mem_operand_wb): New function to cover full, limited
and no writeback.
(arm_coproc_mem_operand_no_writeback): New constraint for memory
operand with no writeback.
(arm_print_operand): Extend 'E' specifier for memory operand
that does not support writeback.
(arm_mve_mode_and_operands_type_check): New constraint check for
MVE memory operands.
* config/arm/constraints.md: Add Uj constraint for VFP vldr.16
and vstr.16.
* config/arm/vfp.md (*mov_load_vfp_hf16): New pattern for
vldr.16.
(*mov_store_vfp_hf16): New pattern for vstr.16.
(*mov<mode>_vfp_<mode>16): Remove MVE moves.
Martin Liska [Wed, 29 Jul 2020 12:13:42 +0000 (14:13 +0200)]
gcc-changelog: fix combining of arguments.
contrib/ChangeLog:
2020-07-29 Martin Liska <mliska@suse.cz>
* git-backport.py: fix how are ChangeLog paths combined.
Mark Eggleston [Mon, 27 Jul 2020 14:28:50 +0000 (15:28 +0100)]
Fortran : Don't warn for LOGICAL kind conversion PR96319
LOGICAL values will always fit regardless of kind so there
is no need for warnings.
2020-07-29 Mark Eggleston <markeggleston@gcc.gnu.org>
gcc/fortran/
PR fortran/96319
* intrinsic.c (gfc_convert_type_warn): Add check for
LOGICAL type so that warnings are not output.
2020-07-29 Mark Eggleston <markeggleston@gcc.gnu.org>
gcc/testsuite/
PR fortran/96319
* gfortran.dg/pr96319.f90: New test.
Richard Biener [Tue, 28 Jul 2020 07:45:52 +0000 (09:45 +0200)]
tree-optimization/96349 - avoid abnormal coalescing issues in loop split
This avoids splitting a loop when the entry value of a loop PHI is
involved with abnormal coalescing.
2020-07-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/96349
* tree-ssa-loop-split.c (stmt_semi_invariant_p_1): When the
condition runs into a loop PHI with an abnormal entry value give up.
* gcc.dg/torture/pr96349.c: New testcase.
Richard Biener [Wed, 29 Jul 2020 10:30:59 +0000 (12:30 +0200)]
more SCEV cache clearing
This fixes two more places, in loop interchange and in the
vectorizer where the SCEV verifier sees stale entries.
2020-07-29 Richard Biener <rguenther@suse.de>
* tree-vectorizer.c (vectorize_loops): Reset the SCEV
cache if we removed any SIMD UID SSA defs.
* gimple-loop-interchange.cc (pass_linterchange::execute):
Reset the scev cache if we interchanged a loop.
Richard Biener [Wed, 29 Jul 2020 07:59:01 +0000 (09:59 +0200)]
tree-optimization/95679 - properly signal changes from propagate_into_phi_args
This restores a lost setting of something_changed with the
recent refactoring of the substitute and fold engine. The
reported ICE in the PR was meanwhile mitigated in other ways
but the issue can still result in missed optimizations via
failed runs of CFG cleanup.
2020-07-29 Richard Biener <rguenther@suse.de>
PR tree-optimization/95679
* tree-ssa-propagate.h
(substitute_and_fold_engine::propagate_into_phi_args): Return
whether anything changed.
* tree-ssa-propagate.c
(substitute_and_fold_engine::propagate_into_phi_args): Likewise.
(substitute_and_fold_dom_walker::before_dom_children): Update
something_changed.
Tobias Burnus [Wed, 29 Jul 2020 10:26:12 +0000 (12:26 +0200)]
gcc/fortran/module.c: Fix indentation
gcc/fortran/ChangeLog:
* module.c (mio_symbol_attribute): Fix indent of previous
commit.
Mark Eggleston [Fri, 17 Jul 2020 13:22:48 +0000 (14:22 +0100)]
Fortran : ICE in gfc_conv_scalarized_array_ref PR53298
When an array of characters is an argument to a subroutine and
is accessed using (:)(1:) an ICE occurs. The upper bound of the
substring does not have an expression and such should not have
a Scalarization State structure added to the Scalarization State
chain.
2020-07-29 Mark Eggleston <markeggleston@gcc.gnu.org>
gcc/fortran/
PR fortran/53298
* trans-array.c (gfc_walk_array_ref): If ref->ss.end is set
call gfc_get_scalar_ss.
2020-07-29 Mark Eggleston <markeggleston@gcc.gnu.org>
gcc/testsuite/
PR fortran/53298
* gfortran.dg/pr53298.f90: New test.
François Dumont [Mon, 20 Jan 2020 18:15:43 +0000 (19:15 +0100)]
libstdc++: Fix unordered containers move constructors noexcept qualification
_Hashtable move constructor is wrongly qualified as noexcept(true) regardless of
_Equal and _H1 copy constructor qualifications.
_Hashtable allocator-aware move constructor is missing its noexcept
qualification like the depending unordered containers ones.
libstdc++-v3/ChangeLog:
* include/bits/hashtable.h
(_Hashtable(_Hashtable&& __ht, __node_alloc_type&& __a, true_type)):
Add noexcept qualification.
(_Hashtable(_Hashtable&&)): Fix noexcept qualification.
(_Hashtable(_Hashtable&&, const allocator_type&)): Add noexcept
qualification.
* include/bits/unordered_map.h
(unordered_map(unordered_map&&, const allocator_type&)): Add noexcept
qualification.
(unordered_multimap(unordered_multimap&&, const allocator_type&)):
Likewise.
* include/bits/unordered_set.h
(unordered_set(unordered_set&&, const allocator_type&)): Likewise.
(unordered_multiset(unordered_multiset&&, const allocator_type&)):
Likewise.
* include/debug/unordered_map
(unordered_map(unordered_map&&, const allocator_type&)): Likewise.
(unordered_multimap(unordered_multimap&&, const allocator_type&)):
Likewise.
* include/debug/unordered_set
(unordered_set(unordered_set&&, const allocator_type&)): Likewise.
(unordered_multiset(unordered_multiset&&, const allocator_type&)):
Likewise.
* testsuite/23_containers/unordered_map/allocator/default_init.cc:
New test.
* testsuite/23_containers/unordered_map/cons/noexcept_default_construct.cc:
New test.
* testsuite/23_containers/unordered_map/cons/noexcept_move_construct.cc:
New test.
* testsuite/23_containers/unordered_map/modifiers/move_assign.cc:
New test.
* testsuite/23_containers/unordered_multimap/cons/noexcept_default_construct.cc:
New test.
* testsuite/23_containers/unordered_multimap/cons/noexcept_move_construct.cc:
New test.
* testsuite/23_containers/unordered_multiset/cons/noexcept_default_construct.cc:
New test.
* testsuite/23_containers/unordered_multiset/cons/noexcept_move_construct.cc:
New test.
* testsuite/23_containers/unordered_set/allocator/default_init.cc:
New test.
* testsuite/23_containers/unordered_set/cons/noexcept_default_construct.cc:
New test.
* testsuite/23_containers/unordered_set/cons/noexcept_move_construct.cc:
New test.
Stefan Schulze Frielinghaus [Wed, 22 Jul 2020 07:27:49 +0000 (09:27 +0200)]
vect: Fix infinite loop while determining peeling amount
This is a follow up to commit
5c9669a0e6c respectively discussion
https://gcc.gnu.org/pipermail/gcc-patches/2020-June/549132.html
In case a type has a lower alignment than its size, ensure that we
advance. For example, on s390x we have for a long double an alignment
constraint of 8 bytes whereas the size is 16 bytes. Increasing the loop
variable only by TARGET_ALIGN / DR_SIZE which equals zero in case of a
long double results in an infinite loop. This is fixed by ensuring that
we advance at least by one.
gcc/ChangeLog:
* tree-vect-data-refs.c (vect_enhance_data_refs_alignment):
Ensure that loop variable npeel_tmp advances in each iteration.
Tobias Burnus [Wed, 29 Jul 2020 08:37:44 +0000 (10:37 +0200)]
OpenMP: Add 'omp requires' to Fortran (mostly parsing)
gcc/fortran/ChangeLog:
* gfortran.h (enum gfc_statement): Add ST_OMP_REQUIRES.
(enum gfc_omp_requires_kind): New.
(enum gfc_omp_atomic_op): Add GFC_OMP_ATOMIC_ACQ_REL.
(struct gfc_namespace): Add omp_requires and omp_target_seen.
(gfc_omp_requires_add_clause,
(gfc_check_omp_requires): New.
* match.h (gfc_match_omp_requires): New.
* module.c (enum ab_attribute, attr_bits): Add omp requires clauses.
(mio_symbol_attribute): Read/write them.
* openmp.c (gfc_check_omp_requires, (gfc_omp_requires_add_clause,
gfc_match_omp_requires): New.
(gfc_match_omp_oacc_atomic): Use requires's default mem-order.
* parse.c (decode_omp_directive): Match requires, set omp_target_seen.
(gfc_ascii_statement): Handle ST_OMP_REQUIRES.
* trans-openmp.c (gfc_trans_omp_atomic): Handle GFC_OMP_ATOMIC_ACQ_REL.
gcc/testsuite/ChangeLog:
* gfortran.dg/gomp/requires-1.f90: New test.
* gfortran.dg/gomp/requires-2.f90: New test.
* gfortran.dg/gomp/requires-3.f90: New test.
* gfortran.dg/gomp/requires-4.f90: New test.
* gfortran.dg/gomp/requires-5.f90: New test.
* gfortran.dg/gomp/requires-6.f90: New test.
* gfortran.dg/gomp/requires-7.f90: New test.
* gfortran.dg/gomp/requires-8.f90: New test.
* gfortran.dg/gomp/requires-9.f90: New test.
Hans-Peter Nilsson [Wed, 29 Jul 2020 00:46:09 +0000 (02:46 +0200)]
config/mmix/mmix.h (NO_FUNCTION_CSE): Define to 1.
The tests gcc.dg/tree-ssa/loop-1.c and gcc.dg/weak/typeof-2.c
assume this setting and are as a consequence riddled with
exceptions for targets that actually do yield better code when
calling through a register rather than repeatedly the same
symbol. Nonetheless, defining it makes sense for MMIX.
(Even better IMHO, this macro shouldn't exist and instead rtx
costs be used or perhaps just a target-specific default of
flag_no_function_cse.)
gcc:
* config/mmix/mmix.h (NO_FUNCTION_CSE): Define to 1.
Hans-Peter Nilsson [Wed, 29 Jul 2020 00:29:54 +0000 (02:29 +0200)]
mmix.h (ASM_OUTPUT_EXTERNAL): Define to default_elf_asm_output_external.
Whoops. When un-disabling visibility support for mmix, I missed that
some of the newly enabled tests were FAILs, for not emitting .hidden
for references to external declarations. This takes care of
gcc.dg/visibility-14.c .. -19.c, and gcc.dg/visibility-23.c.
gcc:
* config/mmix/mmix.h (ASM_OUTPUT_EXTERNAL): Define to
default_elf_asm_output_external.
GCC Administrator [Wed, 29 Jul 2020 00:16:24 +0000 (00:16 +0000)]
Daily bump.
Sergei Trofimovich [Sat, 25 Jul 2020 18:26:50 +0000 (19:26 +0100)]
ipa/96291: don't crash on unoptimized lto functions
In PR ipa/96291 the test contained an SCC with one
unoptimized function. This tricked ipa-cp into NULL dereference.
has_undead_caller_from_outside_scc_p() did not take into account
that unoptimized funtions don't have IPA summary analysis. And
dereferenced NULL pointer causing an ICE.
gcc/
PR ipa/96291
* ipa-cp.c (has_undead_caller_from_outside_scc_p): Consider
unoptimized callers as undead.
gcc/testsuite/
PR ipa/96291
* gcc.dg/lto/pr96291_0.c: New testcase.
* gcc.dg/lto/pr96291_1.c: Support file.
* gcc.dg/lto/pr96291_2.c: Likewise.
* gcc.dg/lto/pr96291.h: Likewise.
Roger Sayle [Tue, 28 Jul 2020 21:55:12 +0000 (22:55 +0100)]
middle-end: Parity and popcount folding optimizations.
This patch implements several constant folding optimizations
for __builtin_parity and friends. We canonicalize popcount(x)&1
as parity(x) in gimple, and potentially convert back again when
we expand to RTL. parity(~x) is simplified to parity(x), which
is true for all integer modes with an even number of bits.
But probably most usefully, parity(x)^parity(y) can be simplified
to a parity(x^y), requiring only a single libcall or popcount.
This patch optimizes popcount and parity of an argument known to have
at most a single bit set, to be that single bit. Hence, popcount(x&8)
is simplified to (x>>3)&1. This generalizes the existing optimization
of popcount(x&1) being simplified to x&1, which is cleaned up with
this patch.
2020-07-28 Roger Sayle <roger@nextmovesoftware.com>
Richard Biener <rguenther@suse.de>
gcc/ChangeLog
* match.pd (popcount(x)&1 -> parity(x)): New simplification.
(parity(~x) -> parity(x)): New simplification.
(parity(x)^parity(y) -> parity(x^y)): New simplification.
(parity(x&1) -> x&1): New simplification.
(popcount(x) -> x>>C): New simplification.
gcc/testsuite/ChangeLog
* gcc.dg/fold-popcount-5.c: New test.
* gcc.dg/fold-parity-1.c: Likewise.
* gcc.dg/fold-parity-2.c: Likewise.
* gcc.dg/fold-parity-3.c: Likewise.
* gcc.dg/fold-parity-4.c: Likewise.
* gcc.dg/fold-parity-5.c: Likewise.
Nathan Sidwell [Tue, 28 Jul 2020 15:57:36 +0000 (08:57 -0700)]
c++: Set more DECL_CONTEXTs
I discovered we were not setting DECL_CONTEXT in a few cases, and
grokfndecl's control flow wasn't making it clear that we were doing it
in all cases.
gcc/cp/
* cp-gimplify.c (cp_genericize_r): Set IMPORTED_DECL's context.
* cp-objcp-common.c (cp_pushdecl): Set decl's context.
* decl.c (grokfndecl): Make DECL_CONTEXT setting clearer.
Nathan Sidwell [Tue, 28 Jul 2020 15:49:13 +0000 (08:49 -0700)]
c++: better fixup_type_variants
fixup_type_variants was almost doing all that finish_struct needs.
May as well make it do it all.
gcc/cp/
* class.c (fixup_type_variants): Copy TYPE_SIZE and
TYPE_SIZE_UINIT.
(finish_struct): Call it.
Nathan Sidwell [Tue, 28 Jul 2020 15:33:48 +0000 (08:33 -0700)]
c++: tree dump indentation
We were always forcing an indent, even if there was nothing to indent.
Fixed thusly.
gcc/cp/
* ptree.c (cxx_print_decl): Better indentation.
Nathan Sidwell [Tue, 28 Jul 2020 15:31:19 +0000 (08:31 -0700)]
testsuite: Fix spello
'Patterns' has one 'r'.
gcc/testsuite/
* lib/options.exp: Fix spello
Jakub Jelinek [Tue, 28 Jul 2020 13:41:30 +0000 (15:41 +0200)]
c++: Fix up cp_lexer_safe_previous_token [PR96328]
The following testcase ICEs, because cp_lexer_safe_previous_token calls
cp_lexer_previous_token and that ICEs, because all tokens in the lexer
buffer before the current one (CPP_EOF) have been purged.
cp_lexer_safe_previous_token is used in the context where it is ok if it
punts, so the patch changes the function so that it doesn't assert there is
some previous token, but instead returns NULL like in other cases where it
punts.
In addition to this, in the last hunk it does a micro-optimization, don't
call the potentially expensive function if it will not need the result,
instead check the least expensive condition first.
And the middle hunk is a similar change from Mark's version of the patch,
to use the safe variant in there because it is again just about a hint
and it is better not to provide the hint than to ICE, though we don't have a
testcase that would ICE.
2020-07-28 Jakub Jelinek <jakub@redhat.com>
Mark Wielaard <mark@klomp.org>
PR c++/96328
* parser.c (cp_lexer_safe_previous_token): Don't call
cp_lexer_previous_token, instead inline it by hand and return NULL
instead of failing assertion if all previous tokens until the first
one are purged.
(cp_parser_error_1): Optimize - only call cp_lexer_safe_previous_token
if token->type is CPP_NAME. Use cp_lexer_safe_previous_token instead
of cp_lexer_previous_token for the missing_token_desc != RT_NONE
case too.
* g++.dg/diagnostic/pr96328.C: New test.
Co-Authored-By: Mark Wielaard <mark@klomp.org>
Jakub Jelinek [Tue, 28 Jul 2020 13:40:15 +0000 (15:40 +0200)]
libcpp: Fix up raw string literal parsing error-recovery [PR96323]
For (invalid) newline inside of the raw string literal delimiter, doing
continue means we skip the needed processing of newlines. Instead of
duplicating that, this patch just doesn't continue for those.
2020-07-28 Jakub Jelinek <jakub@redhat.com>
PR preprocessor/96323
* lex.c (lex_raw_string): For c == '\n' don't continue after reporting
an prefix delimiter error.
* c-c++-common/cpp/pr96323.c: New test.
Tom de Vries [Tue, 28 Jul 2020 13:13:54 +0000 (15:13 +0200)]
nvptx: Support 16-bit shifts and extendqihi2
Add support for 16-bits shifts and for sign extension from 8 bits to
16 bits.
This patch has been tested on nvptx-none with no new regressions.
2020-07-28 Roger Sayle <roger@nextmovesoftware.com>
Tom de Vries <tdevries@suse.de>
gcc/ChangeLog:
* config/nvptx/nvptx.md (extendqihi2): New instruction.
(ashl<mode>3, ashr<mode>3, lshr<mode>3): Support HImode.
gcc/testsuite/ChangeLog:
* gcc.target/nvptx/cvt.c: New test.
* gcc.target/nvptx/shift16.c: New test.
Nathan Sidwell [Tue, 28 Jul 2020 12:49:35 +0000 (05:49 -0700)]
preprocessor: Simplify read_main
We can always use the final map to get the return value, rather than
conditionally only when there was an immediate line directive.
libcpp/
* init.c (cpp_read_main_file): Always use the last map for
the return value.
François Dumont [Mon, 20 Jan 2020 18:01:18 +0000 (19:01 +0100)]
libstdc++: Do not over-size hashtable buckets on range insertion
We used to consider range size on insertion but on unique keys container
not all range values might be inserted resulting in over-sizing. In this
case we just consider user reservation and if none then the container will
adapt to actually inserted elements.
libstdc++-v3/ChangeLog:
* include/bits/hashtable.h
(_Hashtable<>(_InputIterator, _InputIterator, size_t, const _H1&,
const _H2&, const _Hash&, const _Equal&, const _ExtractKey&,
const allocator_type&, true_type)): New.
(_Hashtable<>(_InputIterator, _InputIterator, size_t, const _H1&,
const _H2&, const _Hash&, const _Equal&, const _ExtractKey&,
const allocator_type&, false_type)): New.
(_Hashtable<>(_InputIterator, _InputIterator, size_t, const _H1&,
const _H2&, const _Hash&, const _Equal&, const _ExtractKey&,
const allocator_type&)): Delegate to latters.
(operator=(initializer_list<value_type>)): Rehash if too small.
(_M_insert(_Arg&&, const _NodeGenerator&, true_type)): Remove
size_t len parameter.
* include/bits/hashtable_policy.h (_Insert_base<>::_M_insert_range):
Do not try to get input range distance.
* testsuite/23_containers/unordered_set/cons/bucket_hint.cc: New test.
* testsuite/23_containers/unordered_set/modifiers/insert.cc: New test.
Jakub Jelinek [Tue, 28 Jul 2020 09:32:36 +0000 (11:32 +0200)]
testsuite: Fix up nontype-subob1.C for targets with short int, int or long long ssize_t
2020-07-28 Jakub Jelinek <jakub@redhat.com>
* g++.dg/cpp2a/nontype-subob1.C: Allow s1, i1 or x1 instead of l1 for
targets with short, int or long long ssize_t.
Jakub Jelinek [Tue, 28 Jul 2020 09:08:29 +0000 (11:08 +0200)]
expander: Fix ICE in maybe_warn_rdwr_sizes [PR96335]
The following testcase ICEs in maybe_warn_rdwr_sizes. The problem is that
the caller uses its fndecl and fntype variables to fill up rdwr_map, and
the fntype in that case is a prototype with the access attribute and all
the checks needed for that performed. But the maybe_warn_rdwr_sizes
function tries to rediscover fndecl/fntype itself and does it differently
from how the caller did (for fndecl get_callee_fndecl and fntype from that
FUNCTION_DECL, otherwise sets fntype to CALL_EXPR_FN's type).
On the testcase, get_callee_fndecl does find a FUNCTION_DECL because
it does STRIP_NOPS in between.
Instead of trying to rediscover those, this patch just passes them down,
like is done in several other functions.
2020-07-28 Jakub Jelinek <jakub@redhat.com>
PR middle-end/96335
* calls.c (maybe_warn_rdwr_sizes): Add FNDECL and FNTYPE arguments,
instead of trying to rediscover them in the body.
(initialize_argument_information): Adjust caller.
* gcc.dg/pr96335.c: New test.
Kewen Lin [Tue, 28 Jul 2020 02:30:26 +0000 (21:30 -0500)]
vect: Refactor peel_iters_{pro,epi}logue cost modeling
This patch is to refactor the existing peel_iters_prologue and
peel_iters_epilogue cost model handlings, by following the structure
below suggested by Richard Sandiford:
- calculate peel_iters_prologue
- calculate peel_iters_epilogue
- add costs associated with peel_iters_prologue
- add costs associated with peel_iters_epilogue
- add costs related to branch taken/not_taken.
Bootstrapped/regtested on aarch64-linux-gnu.
gcc/ChangeLog:
* tree-vect-loop.c (vect_get_known_peeling_cost): Factor out some code
to determine peel_iters_epilogue to...
(vect_get_peel_iters_epilogue): ...this new function.
(vect_estimate_min_profitable_iters): Refactor cost calculation on
peel_iters_prologue and peel_iters_epilogue.
GCC Administrator [Tue, 28 Jul 2020 00:16:25 +0000 (00:16 +0000)]
Daily bump.
Ian Lance Taylor [Mon, 27 Jul 2020 22:19:54 +0000 (15:19 -0700)]
compiler,runtime: pass only ptr and len to some runtime calls
This ports https://golang.org/cl/227163 to the Go frontend.
This is a step toward moving up to the go1.15rc1 release.
Original CL description:
cmd/compile,runtime: pass only ptr and len to some runtime calls
Some runtime calls accept a slice, but only use ptr and len.
This change modifies most such routines to accept only ptr and len.
After this change, the only runtime calls that accept an unnecessary
cap arg are concatstrings and slicerunetostring.
Neither is particularly common, and both are complicated to modify.
Negligible compiler performance impact. Shrinks binaries a little.
There are only a few regressions; the one I investigated was
due to register allocation fluctuation.
Passes 'go test -race std cmd', modulo golang/go#38265 and golang/go#38266.
Wow, does that take a long time to run.
file before after Δ %
compile
19655024 19655152 +128 +0.001%
cover
5244840 5236648 -8192 -0.156%
dist
3662376 3658280 -4096 -0.112%
link
6680056 6675960 -4096 -0.061%
pprof
14789844 14777556 -12288 -0.083%
test2json
2824744 2820648 -4096 -0.145%
trace
11647876 11639684 -8192 -0.070%
vet
8260472 8256376 -4096 -0.050%
total
115163736 115118808 -44928 -0.039%
For golang/go#36890
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/245099
Ian Lance Taylor [Mon, 27 Jul 2020 21:22:55 +0000 (14:22 -0700)]
compiler: for package-scope "a = b; b = x" just set "a = x"
This avoids requiring an init function to initialize the variable.
This can only be done if x is a static initializer.
The go1.15rc1 runtime package relies on this optimization.
The package has a variable "var maxSearchAddr = maxOffAddr".
The maxSearchAddr variable is used by code that runs before package
initialization is complete.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/245098
Hans-Peter Nilsson [Mon, 27 Jul 2020 23:41:47 +0000 (01:41 +0200)]
gcc.dg/torture/pr39074-2.c, pr39074.c, pta-callused-1.c: Adjust for mmix.
These FAILs for mmix showed up as regressions for me due to a
flaw in the btest-gcc.sh test-results-accounting: a bug was
recently fixed regarding the naming of dump-files so the names
are again correct. To wit, parts of the tests that were
UNRESOLVED, due to missing dump-files, and ignored in the
presence of other parts (execution, excess errors) PASSing,
became FAIL, trumping the PASSing parts of the tests.
As in a recent patch, the variables are "privatized" using
ASM_PN_FORMAT for MMIX and the lines to match look like:
y::0_1 = { i }
y::0_1, points-to NULL, points-to vars: { D.1465 } (nonlocal, escaped)
instead of e.g. for cris-elf:
y.0_1 = { i }
y.0_1, points-to NULL, points-to vars: { D.1433 } (nonlocal, escaped)
Also checked that the general pattern still matches for cris-elf.
gcc/testsuite:
* gcc.dg/torture/pr39074-2.c: Adjust for mmix.
* gcc.dg/torture/pr39074.c, gcc.dg/torture/pta-callused-1.c: Ditto.
Joseph Myers [Mon, 27 Jul 2020 22:51:58 +0000 (22:51 +0000)]
Update gcc .po files.
* be.po, da.po, de.po, el.po, es.po, fi.po, fr.po, hr.po, id.po,
ja.po, nl.po, ru.po, sr.po, sv.po, tr.po, uk.po, vi.po, zh_CN.po,
zh_TW.po: Update.
Nathan Sidwell [Mon, 27 Jul 2020 20:05:28 +0000 (13:05 -0700)]
common: Use strcmp to compare location file names
The logic to figure out where a missing #include should be inserted
uses pointer equality to check filenames -- the routine even says so.
But cpplib makes no such guarantee. It happens to be true for input
that it preprocesses[* see line zero below], but is not true for
source that has already been preprocessed -- all those '# ...' line
directives produce disctinct filename strings. That renders using
-fdirectives-only as a prescanning stage (as I understand some people
do), broken.
This patch changes to string comparisons, and explicitly rejects any
line-zero location map that occurs at the beginning of a file. The
very first map of a file has a different string to the remaining maps,
and we never tripped on that because of the pointer comparison. The
second testcase deploys -save-temps to cause an intermediate
preprocessed output that is read back.
gcc/c-family/
* c-common.c (try_to_locate_new_include_insertion_point): Use
strcmp, not pointer equality.
gcc/testsuite/
* g++.dg/lookup/missing-std-include-10.h: New.
* g++.dg/lookup/missing-std-include-10.C: New.
* g++.dg/lookup/missing-std-include-11.C: New.
Nathan Sidwell [Wed, 22 Jul 2020 19:00:02 +0000 (12:00 -0700)]
c++: Name as_base type
The as-base type never got a name. For modules I needed to give it a
name to serialize properly, and it's useful when debugging the
compiler, so we may as well have it on trunk. There's also a bug
where its fields can have NSDMIs from the main class. This happens to
be silent on trunk, but can be a GC leak where we retain a deferred
parse node there. (On modules it blows up, because we're not prepared
to serialize deferred parse nodes, as they should never survive
parsing.
gcc/cp/
* cp-tree.h (enum cp_tree_index): Add CPTI_AS_BASE_IDENTIFIER.
(as_base_identifier): Define.
* decl.c (initialize_predifined_identifiers): Initialize as_base
identifier.
* class.c (layout_class_type): Name the as-base type. Zap
NSDMI its fields may have.
Martin Sebor [Mon, 27 Jul 2020 19:54:50 +0000 (13:54 -0600)]
Diagnose just-past-the-end references for minor array bounds.
Resolves:
PR tree-optimization/84079 - missing -Warray-bounds taking the address of past-the-end element of a multidimensional array
gcc/ChangeLog:
PR tree-optimization/84079
* gimple-array-bounds.cc (array_bounds_checker::check_addr_expr):
Only allow just-past-the-end references for the most significant
array bound.
gcc/testsuite/ChangeLog:
PR tree-optimization/84079
* gcc.dg/Warray-bounds-62.c: New test.
François Dumont [Mon, 20 Jan 2020 07:24:47 +0000 (08:24 +0100)]
libstdc++: Review _Hashtable count, equal_range _M_erase(false_type,) code
Simplify operator[] implementation using find method. Review several
_Hashtable method implementations to limit the computation of bucket index.
Introduce _M_update_bbegin to simplify code.
libstdc++-v3/ChangeLog:
* include/bits/hashtable_policy.h (_Map_base<>::at): Use
_Hashtable<>::find.
(_Hashtable_base<>::_Equal_hash_code<>::_S_node_equals):New.
(_Hashtable_base<>::_M_node_equals): New, use latter.
(_Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash,
_RehashPolicy, false>::_M_equal): Adapt to use latter.
* include/bits/hashtable.h (_Hashtable<>::_M_update_bbegin): New.
(_Hashtable<>::_M_assign): Use latter.
(_Hashtable<>::_M_move_assign): Likewise.
(_Hashtable<>(_Hashtable<>&&)): Likewise.
(_Hashtable<>(_Hashtable<>&&, const allocator_type&)): Likewise.
(_Hashtable<>::swap): Likewise.
(_Hashtable<>::find): Build iterator directly from _M_find_node result.
(_Hashtable<>::count): Use _Hashtable<>::find.
(_Hashtable<>::equal_range): Likewise.
(_Hashtable<>::_M_erase(false_type, const key_type&)): Use
_M_node_equals.
Hu Jiangping [Mon, 27 Jul 2020 17:22:23 +0000 (18:22 +0100)]
driver: fix a problem with implementation of -falign-foo=0 [PR96247]
This patch makes the -falign-foo=0 work as described in the
documentation. Thanks for all the suggestions.
Changelog:
2020-07-27 Hu Jiangping <hujiangping@cn.fujitsu.com>
PR driver/96247
* opts.c (check_alignment_argument): Set the -falign-Name
on/off flag on and set the -falign-Name string value null,
when the command-line specified argument is zero.
Ian Lance Taylor [Sun, 26 Jul 2020 18:08:13 +0000 (11:08 -0700)]
compiler: scan all function literals for escape analysis
We were scanning only function literals with closures, but not all
function literals have closures.
Discovered because compiler failed building 1.15rc1, as there is a
function literal in the runtime package (p1 in hexdumpWords) that has
no closure and, without escape analysis, was forcing a variable to the
heap which is not permitted in the runtime.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/244802
Julian Brown [Thu, 18 Jun 2020 12:11:08 +0000 (05:11 -0700)]
openacc: Deep copy attach/detach should not affect reference counts
Attach and detach operations are not supposed to affect structural or
dynamic reference counts for OpenACC. Previously they did so, which led to
subtle problems in some circumstances. We can avoid reference-counting
attach/detach operations by extending and slightly repurposing the
do_detach field in target_var_desc. It is now called is_attach to better
reflect its new role.
2020-07-27 Julian Brown <julian@codesourcery.com>
Thomas Schwinge <thomas@codesourcery.com>
libgomp/
* libgomp.h (struct target_var_desc): Rename do_detach field to
is_attach.
* oacc-mem.c (goacc_exit_datum_1): Add assert. Don't set finalize for
GOMP_MAP_FORCE_DETACH. Update checking to use is_attach field.
(goacc_enter_data_internal): Don't affect reference counts
for attach mappings.
(goacc_exit_data_internal): Don't affect reference counts for detach
mappings.
* target.c (gomp_map_vars_existing): Don't affect reference counts for
attach mappings.
(gomp_map_vars_internal): Set renamed is_attach flag unconditionally to
mark attach mappings.
(gomp_unmap_vars_internal): Use is_attach flag to prevent affecting
reference count for attach mappings.
* testsuite/libgomp.oacc-c-c++-common/mdc-refcount-1.c: New test.
* testsuite/libgomp.oacc-c-c++-common/mdc-refcount-2.c: New test.
* testsuite/libgomp.oacc-c-c++-common/mdc-refcount-2.c: New test.
* testsuite/libgomp.oacc-fortran/deep-copy-6-no_finalize.F90: Mark
test as shouldfail.
* testsuite/libgomp.oacc-fortran/deep-copy-6.f90: Adjust to fail
gracefully in no-finalize mode.
Co-Authored-By: Thomas Schwinge <thomas@codesourcery.com>
Jonathan Wakely [Mon, 27 Jul 2020 14:51:16 +0000 (15:51 +0100)]
libstdc++: Make std::from_chars always round to nearest
Also fix the tests that fail on targets without uselocale.
libstdc++-v3/ChangeLog:
* src/c++17/floating_from_chars.cc (from_chars_impl): Ensure
that FE_NEAREST is used.
* testsuite/20_util/from_chars/4.cc: Do not use if constexpr in
a { target c++14 } test.
[!_GLIBCXX_HAVE_USELOCALE]: Disable all tests.
* testsuite/20_util/from_chars/5.cc [!_GLIBCXX_HAVE_USELOCALE]:
Likewise.
* testsuite/20_util/from_chars/6.cc: New test.
Martin Liska [Mon, 27 Jul 2020 10:30:24 +0000 (12:30 +0200)]
expr: build string_constant only for a char type
gcc/ChangeLog:
PR tree-optimization/96058
* expr.c (string_constant): Build string_constant only
for a type that has same precision as char_type_node
and is an integral type.
Richard Biener [Fri, 24 Jul 2020 14:50:59 +0000 (16:50 +0200)]
Remove useless backedge marking
I didn't find anything using EDGE_DFS_BACK in RTL infrastructure
used by var-tracking or var-tracking itself, the following removes
this computation.
2020-07-24 Richard Biener <rguenther@suse.de>
* var-tracking.c (variable_tracking_main_1): Remove call
to mark_dfs_back_edges.
Martin Liska [Mon, 27 Jul 2020 11:55:38 +0000 (13:55 +0200)]
Do not expand vector comparison with VEC_COND_EXPR.
gcc/ChangeLog:
PR tree-optimization/96128
* tree-vect-generic.c (expand_vector_comparison): Do not expand
vector comparison with VEC_COND_EXPR.
gcc/testsuite/ChangeLog:
PR tree-optimization/96128
* gcc.target/s390/vector/pr96128.c: New test.
H.J. Lu [Thu, 16 Jul 2020 14:03:27 +0000 (07:03 -0700)]
LTO: Add -fcf-protection=check
Mixing -fcf-protection and -fcf-protection=none objects are allowed.
Linker just merges -fcf-protection values from all input objects.
Add -fcf-protection=check for the final link with LTO. An error is
issued if LTO object files are compiled with different -fcf-protection
values. Otherwise, -fcf-protection=check is ignored at the compile
time. Without explicit -fcf-protection at link time, -fcf-protection
values from LTO object files are merged at the final link.
gcc/
PR bootstrap/96203
* common.opt: Add -fcf-protection=check.
* flag-types.h (cf_protection_level): Add CF_CHECK.
* lto-wrapper.c (merge_and_complain): Issue an error for
mismatching -fcf-protection values with -fcf-protection=check.
Otherwise, merge -fcf-protection values.
* doc/invoke.texi: Document -fcf-protection=check.
gcc/testsuite/
PR bootstrap/96203
* gcc.target/i386/pr96203-1.c: New test.
* gcc.target/i386/pr96203-2.c: Likewise.
Alexandre Oliva [Thu, 2 Jul 2020 07:25:26 +0000 (03:25 -0400)]
[Ada] Revert "Revamp dump and aux output names"
gcc/ada/
* switch.adb (Is_Internal_GCC_Switch): Revert accidental
reintroduction of auxbase and auxbase-strip.
Javier Miranda [Thu, 18 Jun 2020 20:07:52 +0000 (16:07 -0400)]
[Ada]
Ada2020: AI12-0027 Access values and unaliased component
gcc/ada/
* sem_res.adb (Resolve_Actuals): Restrict the check on matching
aliased components to view conversions of array types that are
not placed in an instance. In such case at runtime an object is
created.
* sem_util.ads (Is_Actual_In_Out_Parameter, Is_View_Conversion):
New subprograms.
* sem_util.adb (Is_Actual_In_Out_Parameter, Is_View_Conversion):
New subprograms.
Arnaud Charlet [Fri, 19 Jun 2020 13:50:34 +0000 (09:50 -0400)]
[Ada] Assert failure on incorrect code
gcc/ada/
* lib-xref.adb (Generate_Reference): Protect against malformed
tree in case of severe errors.
* sem_ch8.adb (Add_Implicit_Operator): Ditto.
Arnaud Charlet [Thu, 18 Jun 2020 09:34:17 +0000 (05:34 -0400)]
[Ada] Switch Ada_Version_Runtime to Ada 2020
gcc/ada/
* opt.ads (Ada_Version_Runtime): Set to Ada_2020.
* sem_ch3.adb (Analyze_Subtype_Declaration): Propagate
Is_Independent flag to subtypes.
* libgnarl/s-taprop__linux.adb: Adapt to Ada 2020 warning.
* libgnat/a-nbnbin.adb, libgnat/a-nbnbin.ads,
libgnat/a-nbnbin__gmp.adb, libgnat/a-nbnbre.adb,
libgnat/a-nbnbre.ads, libgnat/a-stobbu.adb,
libgnat/a-stobbu.ads, libgnat/a-stobfi.adb,
libgnat/a-stobfi.ads, libgnat/a-stoubu.adb,
libgnat/a-stoubu.ads, libgnat/a-stoufi.adb,
libgnat/a-stoufi.ads, libgnat/a-stoufo.adb,
libgnat/a-stoufo.ads, libgnat/a-stouut.adb,
libgnat/a-stouut.ads, libgnat/a-strsto.ads,
libgnat/a-ststbo.adb, libgnat/a-ststbo.ads,
libgnat/a-ststun.adb, libgnat/a-ststun.ads,
libgnat/a-stteou.ads, libgnat/s-aoinar.ads,
libgnat/s-aomoar.ads, libgnat/s-atopex.ads,
libgnat/s-putaim.adb, libgnat/s-putaim.ads,
libgnat/s-putima.adb, libgnat/s-putima.ads: Remove pragma
Ada_2020, now redundant.
Justin Squirek [Thu, 18 Jun 2020 18:15:47 +0000 (14:15 -0400)]
[Ada] Wrong accessibility on 'Access of formal in call
gcc/ada/
* exp_ch6.adb (Expand_Call_Helper): Modify addition of the extra
accessibility parameter to take into account the extra
accessibility of formals within the calling subprogram.
Bob Duff [Thu, 18 Jun 2020 13:10:33 +0000 (09:10 -0400)]
[Ada] Bug in Enum_Subtype'Image in Ada 2020 mode
gcc/ada/
* exp_imgv.adb (Expand_Image_Attribute): Add Root_Type, so
constrained subtypes work.
Ghjuvan Lacambre [Thu, 18 Jun 2020 08:29:35 +0000 (10:29 +0200)]
[Ada] Refactor pragma argument getters
gcc/ada/
* exp_prag.adb (Arg1, Arg2, Arg3): Removed.
(Arg_N): New function.
Arnaud Charlet [Mon, 15 Jun 2020 07:51:52 +0000 (03:51 -0400)]
[Ada] AI12-0383 Renaming values
gcc/ada/
* sem_ch8.adb (Analyze_Object_Renaming): Allow values in Ada
2020 mode.
Arnaud Charlet [Wed, 17 Jun 2020 08:00:47 +0000 (04:00 -0400)]
[Ada] AI12-0377 View conversions and out parameters revisited
gcc/ada/
* sem_res.adb (Resolve_Actuals): Refine 6.4.1 rules as per
AI12-0377.
Bob Duff [Sat, 13 Jun 2020 16:38:00 +0000 (12:38 -0400)]
[Ada]
Ada2020: wording of 'Image messages
gcc/ada/
* errout.ads, errout.adb (Error_Msg_Ada_2020_Feature): New
procedure analogous to Error_Msg_Ada_2012_Feature.
* sem_attr.adb (Analyze_Image_Attribute): Use
Error_Msg_Ada_2012_Feature and Error_Msg_Ada_2020_Feature to
indicate that Object'Image is allowed in Ada 2012, and that
'Image is allowed for any type in Ada 2020.
Dmitriy Anisimkov [Thu, 21 May 2020 12:15:40 +0000 (18:15 +0600)]
[Ada] Unbounded string overriding control
gcc/ada/
* libgnat/a-strunb.adb (Sum, Mul, Saturated_Sum, Saturated_Mul):
New routines. Use them when resulting string size more that
length of the strings in parameters.
(Unbounded_Slice): Use "- 1" instead of "+ 1" in opposite side
of condition to avoid overflow.
* libgnat/a-strunb__shared.adb (Sum, Mul): New routines.
(Allocate): New routine with 2 parameters. Use routine above
when resulting string size more that length of the strings in
parameters.
(Aligned_Max_Length): Do not try to align to more than Natural'Last.
(Unbounded_Slice): Use "- 1" instead of "+ 1" in opposite side
of condition to avoid overflow.
Arnaud Charlet [Wed, 17 Jun 2020 08:41:44 +0000 (10:41 +0200)]
[Ada] Remove disabled code
gcc/ada/
* sem_attr.adb (Resolve_Attribute): Remove dead code.
Arnaud Charlet [Sat, 13 Jun 2020 15:33:04 +0000 (11:33 -0400)]
[Ada] Use membership tests in front-end
gcc/ada/
* aspects.adb, atree.adb, atree.ads, checks.adb, contracts.adb,
einfo.adb, errout.adb, exp_aggr.adb, exp_attr.adb, exp_cg.adb,
exp_ch11.adb, exp_ch2.adb, exp_ch3.adb, exp_ch4.adb,
exp_ch5.adb, exp_ch6.adb, exp_ch7.adb, exp_ch8.adb, exp_ch9.adb,
exp_dbug.adb, exp_disp.adb, exp_intr.adb, exp_pakd.adb,
exp_prag.adb, exp_put_image.adb, exp_smem.adb, exp_tss.adb,
exp_unst.adb, exp_util.adb, freeze.adb, ghost.adb, gnat1drv.adb,
inline.adb, lib-writ.adb, lib-xref-spark_specific.adb,
lib-xref.adb, namet.adb, namet.ads, nlists.adb, par-ch10.adb,
par-ch2.adb, par-ch3.adb, par-ch4.adb, par-ch5.adb, par-ch6.adb,
par-prag.adb, par-util.adb, par_sco.adb, pprint.adb,
repinfo.adb, restrict.adb, rtsfind.adb, scil_ll.adb, sem.adb,
sem_aggr.adb, sem_attr.adb, sem_aux.adb, sem_cat.adb,
sem_ch10.adb, sem_ch11.adb, sem_ch12.adb, sem_ch13.adb,
sem_ch3.adb, sem_ch4.adb, sem_ch5.adb, sem_ch6.adb, sem_ch7.adb,
sem_ch8.adb, sem_ch9.adb, sem_dim.adb, sem_disp.adb,
sem_dist.adb, sem_elab.adb, sem_elim.adb, sem_eval.adb,
sem_intr.adb, sem_mech.adb, sem_prag.adb, sem_res.adb,
sem_scil.adb, sem_type.adb, sem_util.adb, sem_warn.adb,
sinfo.adb, sinfo.ads, sprint.adb, styleg.adb, tbuild.adb,
treepr.adb (Nkind_In, Nam_In, Ekind_In): Removed, replaced by
membership tests.
Gary Dismukes [Tue, 16 Jun 2020 20:08:34 +0000 (16:08 -0400)]
[Ada] AI12-0194: Language-defined aspects and entry bodies
gcc/ada/
* sem_prag.adb (Analyze_Pragma, Pragma_Max_Entry_Queue_Length):
Refine error message to indicate that the pragma must apply to
an entry declaration, not just an entry.
Javier Miranda [Tue, 16 Jun 2020 17:49:04 +0000 (13:49 -0400)]
[Ada] Spurious error in generic dispatching constructor
gcc/ada/
* exp_ch6.adb (Make_Build_In_Place_Iface_Call_In_Allocator):
Revert previous patch, and add a missing type conversion to
displace the pointer to the allocated object to reference the
target dispatch table.
Javier Miranda [Tue, 16 Jun 2020 09:28:54 +0000 (05:28 -0400)]
[Ada]
Ada2020: AI12-0027 Access values and unaliased component
gcc/ada/
* sem_res.adb (Resolve_Actuals): Restore restrictive check on
view conversions which required matching value of
Has_Aliased_Components of formals and actuals. Required to avoid
the regression of ACATS
b460005.
Eric Botcazou [Tue, 16 Jun 2020 07:58:09 +0000 (09:58 +0200)]
[Ada] Remove obsolete special case in Switch_View
gcc/ada/
* sem_ch12.adb (Instantiate_Package_Body): Add commentary for a
nesting issue with parent handling and private view switching.
(Switch_View): Do not skip specific private-dependent subtypes.
Patrick Bernardi [Tue, 16 Jun 2020 00:42:31 +0000 (20:42 -0400)]
[Ada] x86-lynx178elf: use a-numaux.ads instead of a-numaux__libc-x86.ads
gcc/ada/
* Makefile.rtl: Remove X86_TARGET_PAIRS for x86-lynx178elf.
Ed Schonberg [Mon, 15 Jun 2020 21:40:26 +0000 (17:40 -0400)]
[Ada] Warnings on overloays involving generic In_Parameters
gcc/ada/
* sem_ch13.adb (Analyze_Address_Specification_Clause): Do not
emit a warning when a constant declaration in a generic unit
overlays a generic In_Parameter.
Gary Dismukes [Mon, 15 Jun 2020 21:14:14 +0000 (17:14 -0400)]
[Ada] AI12-0382: Loosen type-invariant overriding requirement of AI12-0042
gcc/ada/
* sem_ch3.adb (Check_Abstract_Overriding): Remove Scope
comparison test from test related to initial implementation of
AI12-0042, plus remove the related ??? comment.
(Derive_Subprogram): Add test requiring that the type extension
appear in the visible part of its enclosing package when
checking the overriding requirement of 7.3.2(6.1/4), as
clarified by AI12-0382.
Piotr Trojanek [Fri, 12 Jun 2020 17:06:51 +0000 (19:06 +0200)]
[Ada] Add range check for GNATprove on 'Pos to Long_Integer conversion
gcc/ada/
* exp_spark.adb (Expand_SPARK_N_Attribute_Reference) Extend
existing workaround to 'Pos.
Bob Duff [Fri, 12 Jun 2020 22:24:52 +0000 (18:24 -0400)]
[Ada]
Ada2020: AI12-0304 Put_Image attrs of lang-def types
gcc/ada/
* libgnat/s-rannum.ads, libgnat/s-rannum.adb: Add Put_Image.
This will be inherited by the language-defined packages
Ada.Numerics.Discrete_Random and Ada.Numerics.Float_Random.
* libgnat/a-convec.ads, libgnat/a-convec.adb: Add Put_Image.
* libgnat/s-putima.ads: Add pragma Preelaborate, so this can be
imported into containers packages.
* libgnat/s-putima.adb: Move Digit to private part; otherwise
reference to Base is illegal in Preelaborate generic.
* exp_put_image.adb (Build_Record_Put_Image_Procedure): Use the
base type.
Martin Liska [Fri, 24 Jul 2020 12:33:27 +0000 (14:33 +0200)]
Use vec::reserve before vec_safe_grow_cleared is called
gcc/ChangeLog:
PR lto/45375
* symbol-summary.h: Call vec_safe_reserve before grow is called
in order to grow to a reasonable size.
* vec.h (vec_safe_reserve): Add missing function for vl_ptr
type.
Tobias Burnus [Mon, 27 Jul 2020 07:12:15 +0000 (09:12 +0200)]
fortran/openmp.c - silence static analyzer warning
gcc/fortran/ChangeLog:
* openmp.c (gfc_resolve_omp_directive): Remove NULL check
for clauses in EXEC_OMP_CRITICAL as it no longer can be NULL.
Hans-Peter Nilsson [Mon, 27 Jul 2020 01:39:16 +0000 (03:39 +0200)]
gcc.dg/tree-ssa/vector-4.c: Adjust for mmix.
Again, the variables are "privatized" using ASM_PN_FORMAT for MMIX (but
apparently not for other targets) and the line to match looks like:
D.1427 = VEC_PERM_EXPR <a::0, b::1, { 0, 4, 1, 5 }>;
gcc/testsuite:
* gcc.dg/tree-ssa/vector-4.c: Adjust for mmix.
Hans-Peter Nilsson [Mon, 27 Jul 2020 01:11:46 +0000 (03:11 +0200)]
gcc.dg/tree-ssa/ssa-dse-26.c: Adjust for mmix.
The variables are "localized" using ASM_PN_FORMAT for MMIX and the
lines to match look like:
Deleted dead store: y::4 = y;
Deleted dead store: x::3 = x;
gcc/testsuite:
* gcc.dg/tree-ssa/ssa-dse-26.c: Adjust for mmix.
Hans-Peter Nilsson [Mon, 27 Jul 2020 00:39:34 +0000 (02:39 +0200)]
gcc.dg/tree-ssa/ssa-dom-cse-2.c: xfail scan for mmix.
Looking at the dump and the test, I guess all "64-bit targets" fail
the test for the reasons seen in the comment just above the dg-final,
whose last two lines make it to the patch context. Maybe the xfail
target list can be shortened by removing most targets and use just
"lp64". That doesn't cover it passing on x86_64 and s390x-zarch
though.
gcc/testsuite:
* gcc.dg/tree-ssa/ssa-dom-cse-2.c: xfail scan for mmix.
GCC Administrator [Mon, 27 Jul 2020 00:16:20 +0000 (00:16 +0000)]
Daily bump.
Hans-Peter Nilsson [Mon, 27 Jul 2020 00:07:20 +0000 (02:07 +0200)]
gcc.dg/tree-ssa/reassoc-20.c: Adjust for mmix.
The expression of interest looks like "e_5 = a::0_1 + b::1_2;" for
mmix-knuth-mmixware, while other targets have a "." instead of the
"::". ISTM the most useful change here is not to disable the test,
but to add an optional character in the matched expression to match
the "extra" ":". Also checked cris-elf to assert that the expression
still passes for an "ordinary" ELF target.
gcc/testsuite:
* gcc.dg/tree-ssa/reassoc-20.c: Adjust for mmix.
Hans-Peter Nilsson [Sun, 26 Jul 2020 22:08:54 +0000 (00:08 +0200)]
mmix: Don't turn off .hidden support.
In 2012
e2769e908a915ebbc/r192344, I added the following lines, that I
now delete. I've changed my mind: ELF-related targets based on gas,
that support only static linking, have .hidden "for free", regardless
of the visibility of the hidden object in the linked executable. No
regressions for mmix-knuth-mmixware and "fixes":
FAIL: gcc.dg/torture/pr94947-1.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors)
Excess errors:
lto1: warning: visibility attribute not supported in this configuration; ignored [-Wattributes]
...a warning which is emitted for "all" LTO tests (of which most have
warnings filtered out); LTO "thinks" all supported targets have
.hidden support.
gcc:
* configure.ac (out-of-tree linker .hidden support): Don't turn off
for mmix-knuth-mmixware.
* configure: Regenerate.
Patrick Palka [Sun, 26 Jul 2020 17:37:26 +0000 (13:37 -0400)]
c++: Add testcase for [PR79504]
We successfully compile this testcase ever since r8-5270.
gcc/testsuite/ChangeLog:
PR c++/79504
* g++.dg/cpp0x/decltype79.C: New test.
Aaron Sawdey [Fri, 24 Jul 2020 19:13:48 +0000 (14:13 -0500)]
rs6000: add option -mblock-ops-unaligned-vsx
This option is mostly being added to provide -mno-block-ops-unaligned-vsx.
The default is set the same as -mefficient-unaligned-vsx. This option will
control the use of unaligned VSX loads/stores in the inline expansion
of memcpy() and memmove(). The use case for this would be if you're
compiling code that is doing a memcpy to memory mapped device memory
that is cache-inhibited. On some powerpc processors this requires the
unaligned vsx ops to be emulated by the kernel which is very slow.
gcc/ChangeLog:
* config/rs6000/rs6000.c (rs6000_option_override_internal):
Set the default value for -mblock-ops-unaligned-vsx.
* config/rs6000/rs6000.opt: Add -mblock-ops-unaligned-vsx.
* doc/invoke.texi: Document -mblock-ops-unaligned-vsx.
Tobias Burnus [Sun, 26 Jul 2020 05:20:24 +0000 (07:20 +0200)]
libgfortran: Skip integer-kind=16 check for amdgcn
libgfortran/ChangeLog:
PR target/96306
* configure.ac: Add LIBGOMP_CHECKED_INT_KINDS and
LIBGOMP_CHECKED_REAL_KINDS and use it for to skip
integer kind=16 checks for amdgcn.
* Makefile.am (kinds.h, selected_int_kind.inc,
selected_real_kind.inc): Pass them on.
* mk-kinds-h.sh: Takes to-be-check kinds as argument.
* mk-sik-inc.sh: Likewise.
* mk-srk-inc.sh: Likewise.
* Makefile.in: Regenerate.
* configure: Regenerate.
Hans-Peter Nilsson [Sun, 26 Jul 2020 01:33:15 +0000 (03:33 +0200)]
gcc.dg/tree-ssa/forwprop-36.c: Adjust for mmix
The label of interest here is "b.0_2" for
e.g. x86_64-pc-linux-gnu but "b::1_2" for mmix-knuth-mmixware.
The test seems to be of some interest for mmix (hey, gcc
open-coded 128-bit integer support behind my back!) so I didn't
want to just disable it. I also didn't want to obscure the
matching pattern by generalizing it, so instead I added a
separate matching pattern.
gcc/testsuite:
* gcc.dg/tree-ssa/forwprop-36.c: Adjust for mmix.
Hans-Peter Nilsson [Sun, 26 Jul 2020 00:44:02 +0000 (02:44 +0200)]
gcc.dg/torture/pr59330.c: Disable for mmix
With the dejagnu status-wrapper, there's a reference to write in
each executable, which for mmix in newlib has a reference to a
variable defined in open, which for mmix in newlib has a
reference to sprintf (oops!) and the dependency-chain goes on;
ad finitum there's a reference to malloc, which in default
newlib is colocated with free; the same file
newlib/libc/stdlib/malloc.c.
Not being compiled with -ffunction-sections, they're emitted in
the same section (.text) and thus inseparable: you can't
override just one of them as in this test, or else you'll get:
<X>/pre/mmix/bin/ld: <X>/gccobj/mmix/./newlib/libc.a(lib_a-malloc.o): in function `free':
<X>/gcc/newlib/libc/stdlib/malloc.c:169: multiple definition of `free'; /tmp/ccvRA0zb.o:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
compiler exited with status 1
FAIL: gcc.dg/torture/pr59330.c -O0 (test for excess errors)
I'm using a dg-skip-if here instead of starting a hardly
scalable dg-do target selector. I'm not keying on
effective-target unwrapped because the dependency-chain is
target-specific rather than dejagnu status-wrapper-specific.
gcc/testsuite:
* gcc.dg/torture/pr59330.c: Disable for mmix.
GCC Administrator [Sun, 26 Jul 2020 00:16:21 +0000 (00:16 +0000)]
Daily bump.
Hans-Peter Nilsson [Sat, 25 Jul 2020 21:25:09 +0000 (23:25 +0200)]
config/mmix/mmix.c (TARGET_ASM_OUTPUT_IDENT): Override.
Funny that default_asm_output_ident_directive isn't the default...
Anyway, since dot-pseudos like .ident are treated as comments by
mmixal, there's nothing lost compatibilitywise by supporting it.
If mmix-knuth-mmixware had included elfos.h this'd have been the
default. There might be enough reason to do that; relocatable objects
are ELF but (by default) links to produce mmo. Fixes
c-c++-common/ident-1b.c and 2b in C and C++ testing. Committed.
gcc:
* config/mmix/mmix.c (TARGET_ASM_OUTPUT_IDENT): Override the default
with default_asm_output_ident_directive.
Iain Sandoe [Sat, 25 Jul 2020 20:42:55 +0000 (21:42 +0100)]
C++, testsuite: Adjust pure-virtual1.C options for Darwin.
Darwin's static linker expects, by default, that all linkage will
be satisfied (even for weak items). This allows the two-level
namespace to work even for weak cases.
However, there's an option to make it behave in a similar manner
to ELF. This is needed for the pure-virtual1.C testcase to pass
on Darwin.
gcc/testsuite/ChangeLog:
* g++.dg/abi/pure-virtual1.C: Add dynamic_lookup option
for Darwin.
Martin Sebor [Sat, 25 Jul 2020 20:21:47 +0000 (14:21 -0600)]
Fix PR c++/96310 - Ignoring -Wnonnull via pragma gcc diagnostics still produces an unwanted note.
gcc/c-family/ChangeLog:
PR c++/96310
* c-common.c (check_nonnull_arg): Print note only when warning was
issued.
Andrew Stubbs [Sat, 25 Jul 2020 14:02:52 +0000 (15:02 +0100)]
amdgcn: Enable TImode
This enables types __int128 et al for move, add, subtract, and logical
operations. At least shift, rotate, multiple, divide, and modulus are broken
so we can expect some test failures.
This is required now because libgomp no longer builds without __int128.
An additional patch will be required to unbreak the libgfortran build.
gcc/ChangeLog:
* config/gcn/gcn.c (gcn_scalar_mode_supported_p): New function.
(TARGET_SCALAR_MODE_SUPPORTED_P): New define.
GCC Administrator [Sat, 25 Jul 2020 00:16:22 +0000 (00:16 +0000)]
Daily bump.
David Edelsohn [Fri, 24 Jul 2020 19:05:42 +0000 (15:05 -0400)]
aix: Support GCC64 for AIX 7.1.
gcc/ChangeLog:
2020-07-24 David Edelsohn <dje.gcc@gmail.com>
Clement Chigot <clement.chigot@atos.net>
* config.gcc (powerpc-ibm-aix7.1): Use t-aix64 and biarch64 for
cpu_is_64bit.
* config/rs6000/aix71.h (ASM_SPEC): Remove aix64 option.
(ASM_SPEC32): New.
(ASM_SPEC64): New.
(ASM_CPU_SPEC): Remove vsx and altivec options.
(CPP_SPEC_COMMON): Rename from CPP_SPEC.
(CPP_SPEC32): New.
(CPP_SPEC64): New.
(CPLUSPLUS_CPP_SPEC): Rename to CPLUSPLUS_CPP_SPEC_COMMON..
(TARGET_DEFAULT): Use 64 bit mask if BIARCH.
(LIB_SPEC_COMMON): Rename from LIB_SPEC.
(LIB_SPEC32): New.
(LIB_SPEC64): New.
(LINK_SPEC_COMMON): Rename from LINK_SPEC.
(LINK_SPEC32): New.
(LINK_SPEC64): New.
(STARTFILE_SPEC): Add 64 bit version of crtcxa and crtdbase.
(ASM_SPEC): Define 32 and 64 bit alternatives using DEFAULT_ARCH64_P.
(CPP_SPEC): Same.
(CPLUSPLUS_CPP_SPEC): Same.
(LIB_SPEC): Same.
(LINK_SPEC): Same.
(SUBTARGET_EXTRA_SPECS): Add new 32/64 specs.
* config/rs6000/aix72.h (TARGET_DEFAULT): Use 64 bit mask if BIARCH.
* config/rs6000/defaultaix64.h: Delete.