Sandra Loosemore [Tue, 22 Jun 2021 19:42:17 +0000 (12:42 -0700)]
Fortran: fix sm computation in CFI_allocate [PR93524]
This patch fixes a bug in setting the step multiplier field in the
C descriptor for array dimensions > 2.
2021-06-21 Sandra Loosemore <sandra@codesourcery.com>
Tobias Burnus <tobias@codesourcery.com>
libgfortran/
PR fortran/93524
* runtime/ISO_Fortran_binding.c (CFI_allocate): Fix
sm computation.
gcc/testsuite/
PR fortran/93524
* gfortran.dg/pr93524.c: New.
* gfortran.dg/pr93524.f90: New.
Thomas Rodgers [Tue, 22 Jun 2021 17:59:07 +0000 (10:59 -0700)]
libstdc++: Fix for deadlock in std::counting_semaphore [PR100806]
libstdc++-v3/ChangeLog:
PR libstdc++/100806
* include/bits/semaphore_base.h (__atomic_semaphore::_M_release):
Force _M_release() to wake all waiting threads.
* testsuite/30_threads/semaphore/100806.cc: New test.
David Malcolm [Tue, 22 Jun 2021 17:44:57 +0000 (13:44 -0400)]
analyzer: fix ICE on malloc/alloca param type mismatch [PR101143]
gcc/analyzer/ChangeLog:
PR analyzer/101143
* region-model.cc (compat_types_p): New function.
(region_model::create_region_for_heap_alloc): Convert assertion to
an error check.
(region_model::create_region_for_alloca): Likewise.
gcc/testsuite/ChangeLog:
PR analyzer/101143
* gcc.dg/analyzer/pr101143.c: New test.
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
Sergei Trofimovich [Mon, 21 Jun 2021 22:39:56 +0000 (23:39 +0100)]
docs: drop unbalanced parenthesis in rtl.texi
gcc/ChangeLog:
* doc/rtl.texi: drop unbalanced parenthesis.
Richard Biener [Tue, 22 Jun 2021 10:13:44 +0000 (12:13 +0200)]
middle-end/101156 - remove not working optimization in gimplification
This removes a premature and not working optimization from the
gimplifier. When gimplification is requested not to produce a SSA
name we try to avoid generating a copy when we did so anyway but
instead replace the LHS of its definition. But that only works in
case there are no uses of the SSA name already which is something
we cannot easily check, so the following removes said optimization.
Statistics on the whole bootstrap shows we hit this optimization
only for libiberty/cp-demangle.c and overall we have
21652112
gimplifications where just 240 copies are elided. Preserving
the optimization would require scanning the original expression
and the pre and post sequences for SSA names and uses, that seems
excessive to avoid these 240 copies.
2021-06-22 Richard Biener <rguenther@suse.de>
PR middle-end/101156
* gimplify.c (gimplify_expr): Remove premature incorrect
optimization.
* gcc.dg/pr101156.c: New testcase.
Jakub Jelinek [Tue, 22 Jun 2021 13:22:51 +0000 (15:22 +0200)]
testsuite: Add testcase for recently fixed PR [PR101159]
On Tue, Jun 22, 2021 at 11:00:51AM +0200, Richard Biener wrote:
> 2021-06-22 Richard Biener <rguenther@suse.de>
>
> PR tree-optimization/101159
> * tree-vect-patterns.c (vect_recog_popcount_pattern): Add
> missing NULL vectype check.
The following patch adds the testcase for it, IMHO it can't hurt and
from my experience testcases often trigger other bugs later on (rather
than the original bugs reappearing, though even that happens),
and also fixes a couple of typos in the new function.
2021-06-22 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/101159
* tree-vect-patterns.c (vect_recog_popcount_pattern): Fix some
comment typos.
* gcc.c-torture/compile/pr101159.c: New test.
Jakub Jelinek [Tue, 22 Jun 2021 13:21:35 +0000 (15:21 +0200)]
expand: Fix up empty class return optimization [PR101160]
On Mon, Jun 14, 2021 at 11:24:22PM -0400, Jason Merrill via Gcc-patches wrote:
> The x86_64 psABI says that an empty class isn't passed or returned in memory or
> registers, so we shouldn't set %eax in this function. Is this a reasonable
> place to implement that? Another possibility would be to remove the hack to
> prevent i386.c:function_value_64 from returning NULL in this case and fix the
> callers to deal, but that seems like more work.
>
> The df-scan hunk catches the case where we look at a 0-length reg and build
> a range the length of unsigned int, which happened before I changed
> assign_parms to match expand_function_end.
The assign_params change unfortunately breaks e.g. the following testcase.
The problem is that some passes (e.g. subreg lowering but assign_parms
comments also talk about delayed slot scheduling) rely on crtl->return_rtx
not to contain pseudo registers, and the assign_parms change results
in the pseudo in there not being replaced with a hard register.
The following patch instead clears the crtl->return_rtx if a function
returns TYPE_EMPTY_P structure, that way (use (pseudo)) is not emitted
into the IL and it is treated like more like functions returning void.
I've also changed the effective target on the empty-class1.C testcase, so
that it doesn't fail on x86_64-linux with -m32 testing.
2021-06-22 Jakub Jelinek <jakub@redhat.com>
PR middle-end/101160
* function.c (assign_parms): For decl_result with TYPE_EMPTY_P type
clear crtl->return_rtx instead of keeping it referencing a pseudo.
* g++.target/i386/empty-class1.C: Require lp64 effective target
instead of x86_64-*-*.
* g++.target/i386/empty-class2.C: New test.
Jakub Jelinek [Tue, 22 Jun 2021 13:20:14 +0000 (15:20 +0200)]
fold-const: Return corresponding integral type for OFFSET_TYPE in range_check_type [PR101162]
Andrew's recent r12-1608-g2f1686ff70b25fceb04ca2ffc0a450fb682913ef change
to fail verification on various unary and binary operations with OFFSET_TYPE
revealed that e.g. switchconv happily performs multiplications and additions
in OFFSET_TYPE.
2021-06-22 Jakub Jelinek <jakub@redhat.com>
Andrew Pinski <apinski@marvell.com>
PR tree-optimization/101162
* fold-const.c (range_check_type): Handle OFFSET_TYPE like pointer
types.
* g++.dg/opt/pr101162.C: New test.
Andrew MacLeod [Thu, 17 Jun 2021 17:40:05 +0000 (13:40 -0400)]
Add relational self-tests.
* range-op.cc (range_relational_tests): New.
(range_op_tests): Call range_relational_tests.
Andrew MacLeod [Thu, 17 Jun 2021 17:39:02 +0000 (13:39 -0400)]
Add relation between LHS and op1 for casts and copies.
* range-op.cc (operator_cast::lhs_op1_relation): New.
(operator_identity::lhs_op1_relation): Mew.
Andrew MacLeod [Thu, 17 Jun 2021 17:38:03 +0000 (13:38 -0400)]
Add relation effects between operands to MINUS_EXPR.
* range-op.cc (operator_minus::op1_op2_relation_effect): New.
Andrew MacLeod [Thu, 17 Jun 2021 17:35:10 +0000 (13:35 -0400)]
Add relations between LHS and op1/op2 for PLUS_EXPR.
* range-op.cc (operator_plus::lhs_op1_relation): New.
(operator_plus::lhs_op2_relation): New.
Andrew MacLeod [Thu, 17 Jun 2021 18:09:48 +0000 (14:09 -0400)]
Add relational support to fold_using_range
Enable a relation oracle in ranger, and add full range-op relation support
to fold_using_range.
* gimple-range-cache.cc (ranger_cache::ranger_cache): Create a
relation_oracle if dominators exist.
(ranger_cache::~ranger_cache): Dispose of oracle.
(ranger_cache::dump_bb): Dump oracle.
* gimple-range.cc (fur_source::fur_source): New.
(fur_source::get_operand): Use mmeber query.
(fur_source::get_phi_operand): Use member_query.
(fur_source::query_relation): New.
(fur_source::register_dependency): Delete.
(fur_source::register_relation): New.
(fur_edge::fur_edge): Adjust.
(fur_edge::get_phi_operand): Fix comment.
(fur_edge::query): Delete.
(fur_stmt::fur_stmt): Adjust.
(fur_stmt::query): Delete.
(fur_depend::fur_depend): Adjust.
(fur_depend::register_relation): New.
(fur_depend::register_relation): New.
(fur_list::fur_list): Adjust.
(fur_list::get_operand): Use member query.
(fold_using_range::range_of_range_op): Process and query relations.
(fold_using_range::range_of_address): Adjust dependency call.
(fold_using_range::range_of_phi): Ditto.
(gimple_ranger::gimple_ranger): New. Use ranger_ache oracle.
(fold_using_range::relation_fold_and_or): New.
(fold_using_range::postfold_gcond_edges): New.
* gimple-range.h (class gimple_ranger): Adjust.
(class fur_source): Adjust members.
(class fur_stmt): Ditto.
(class fold_using_range): Ditto.
Andrew MacLeod [Thu, 17 Jun 2021 15:49:21 +0000 (11:49 -0400)]
Add relational support to range-op.
This patch integrates relations with range-op functionality so that any
known relations can be used to help reduce or resolve ranges.
Initially handle EQ_EXPR, NE_EXPR, LE_EXPR, LT_EXPR, GT_EXPR and GE_EXPR.
* range-op.cc (range_operator::wi_fold): Apply relation effect.
(range_operator::fold_range): Adjust and apply relation effect.
(*::fold_range): Add relation parameters.
(*::op1_range): Ditto.
(*::op2_range): Ditto.
(range_operator::lhs_op1_relation): New.
(range_operator::lhs_op2_relation): New.
(range_operator::op1_op2_relation): New.
(range_operator::op1_op2_relation_effect): New.
(relop_early_resolve): New.
(operator_equal::op1_op2_relation): New.
(operator_equal::fold_range): Call relop_early_resolve.
(operator_not_equal::op1_op2_relation): New.
(operator_not_equal::fold_range): Call relop_early_resolve.
(operator_lt::op1_op2_relation): New.
(operator_lt::fold_range): Call relop_early_resolve.
(operator_le::op1_op2_relation): New.
(operator_le::fold_range): Call relop_early_resolve.
(operator_gt::op1_op2_relation): New.
(operator_gt::fold_range): Call relop_early_resolve.
(operator_ge::op1_op2_relation): New.
(operator_ge::fold_range): Call relop_early_resolve.
* range-op.h (class range_operator): Adjust parameters and methods.
Andrew MacLeod [Thu, 17 Jun 2021 14:19:31 +0000 (10:19 -0400)]
Initial value-relation code.
This code provides a both an equivalence and relation oracle which can be
accessed via a range_query object. This initial code drop includes the
oracles and access them, but does not utilize them yet.
* Makefile.in (OBJS): Add value-relation.o.
* gimple-range.h: Adjust include files.
* tree-data-ref.c: Adjust include file order.
* value-query.cc (range_query::get_value_range): Default to no oracle.
(range_query::query_relation): New.
(range_query::query_relation): New.
* value-query.h (class range_query): Adjust.
* value-relation.cc: New.
* value-relation.h: New.
Richard Biener [Tue, 22 Jun 2021 08:14:02 +0000 (10:14 +0200)]
tree-optimization/101151 - fix irreducible region check for sinking
The check whether two blocks are in the same irreducible region
and thus post-dominance checks being unreliable was incomplete
since an irreducible region can contain reducible sub-regions but
if one block is in the irreducible part and one not the check
still doesn't work as expected.
2021-06-22 Richard Biener <rguenther@suse.de>
PR tree-optimization/101151
* tree-ssa-sink.c (statement_sink_location): Expand irreducible
region check.
* gcc.dg/torture/pr101151.c: New testcase.
Jojo R [Mon, 21 Jun 2021 12:42:43 +0000 (20:42 +0800)]
RISC-V: Add tune info for T-HEAD C906.
gcc/
* config/riscv/riscv.c (thead_c906_tune_info): New.
(riscv_tune_info_table): Use new tune.
Kito Cheng [Mon, 21 Jun 2021 13:19:38 +0000 (21:19 +0800)]
testuite: Add pthread check to dg-module-cmi for omp module testing
gcc/testsuite:
* g++.dg/modules/omp-1_a.C: Check pthread is available for
dg-module-cmi.
* g++.dg/modules/omp-2_a.C: Ditto.
Richard Biener [Tue, 22 Jun 2021 07:24:24 +0000 (09:24 +0200)]
tree-optimization/101158 - adjust SLP call matching sequence
This moves the check for same operands after verifying we're
facing compatible calls.
2021-06-22 Richard Biener <rguenther@suse.de>
PR tree-optimization/101158
* tree-vect-slp.c (vect_build_slp_tree_1): Move same operand
checking after checking for matching operation.
* gfortran.dg/pr101158.f90: New testcase.
Richard Biener [Tue, 22 Jun 2021 07:12:42 +0000 (09:12 +0200)]
tree-optimization/101159 - fix missing NULL check in popcount pattern
This fixes a missing check for a NULL vectype in the new popcount
pattern.
2021-06-22 Richard Biener <rguenther@suse.de>
PR tree-optimization/101159
* tree-vect-patterns.c (vect_recog_popcount_pattern): Add
missing NULL vectype check.
Richard Biener [Tue, 22 Jun 2021 07:10:56 +0000 (09:10 +0200)]
tree-optimization/101154 - fix out-of bound access in SLP
This fixes an out-of-bound access of matches.
2021-06-22 Richard Biener <rguenther@suse.de>
PR tree-optimization/101154
* tree-vect-slp.c (vect_build_slp_tree_2): Fix out-of-bound access.
Jakub Jelinek [Tue, 22 Jun 2021 08:16:18 +0000 (10:16 +0200)]
i386: Use xor to write zero to memory with -Os even for more than 4 stores [PR11877]
> > 2021-06-20 Roger Sayle <roger@nextmovesoftware.com>
> >
> > gcc/ChangeLog
> > PR target/11877
> > * config/i386/i386.md: New define_peephole2s to shrink writing
> > 1, 2 or 4 consecutive zeros to memory when optimizing for size.
It unfortunately doesn't extend well to larger memory clearing.
Consider e.g.
void
foo (int *p)
{
p[0] = 0;
p[7] = 0;
p[23] = 0;
p[41] = 0;
p[48] = 0;
p[59] = 0;
p[69] = 0;
p[78] = 0;
p[83] = 0;
p[89] = 0;
p[98] = 0;
p[121] = 0;
p[132] = 0;
p[143] = 0;
p[154] = 0;
}
where with the patch we emit:
xorl %eax, %eax
xorl %edx, %edx
xorl %ecx, %ecx
xorl %esi, %esi
xorl %r8d, %r8d
movl %eax, (%rdi)
movl %eax, 28(%rdi)
movl %eax, 92(%rdi)
movl %eax, 164(%rdi)
movl %edx, 192(%rdi)
movl %edx, 236(%rdi)
movl %edx, 276(%rdi)
movl %edx, 312(%rdi)
movl %ecx, 332(%rdi)
movl %ecx, 356(%rdi)
movl %ecx, 392(%rdi)
movl %ecx, 484(%rdi)
movl %esi, 528(%rdi)
movl %esi, 572(%rdi)
movl %r8d, 616(%rdi)
Here is an incremental patch that emits:
xorl %eax, %eax
movl %eax, (%rdi)
movl %eax, 28(%rdi)
movl %eax, 92(%rdi)
movl %eax, 164(%rdi)
movl %eax, 192(%rdi)
movl %eax, 236(%rdi)
movl %eax, 276(%rdi)
movl %eax, 312(%rdi)
movl %eax, 332(%rdi)
movl %eax, 356(%rdi)
movl %eax, 392(%rdi)
movl %eax, 484(%rdi)
movl %eax, 528(%rdi)
movl %eax, 572(%rdi)
movl %eax, 616(%rdi)
instead.
2021-06-22 Jakub Jelinek <jakub@redhat.com>
PR target/11877
* config/i386/i386-protos.h (ix86_last_zero_store_uid): Declare.
* config/i386/i386-expand.c (ix86_last_zero_store_uid): New variable.
* config/i386/i386.c (ix86_expand_prologue): Clear it.
* config/i386/i386.md (peephole2s for 1/2/4 stores of const0_rtx):
Remove "" from match_operand. Emit new insns using emit_move_insn and
set ix86_last_zero_store_uid to INSN_UID of the last store.
Add peephole2s for 1/2/4 stores of const0_rtx following previous
successful peep2s.
* gcc.target/i386/pr11877-2.c: New test.
liuhongt [Tue, 22 Jun 2021 08:09:48 +0000 (16:09 +0800)]
Remove my Write After Approval entry.
ChangeLog:
* MAINTAINERS: Remove my Write After Approval entry.
Martin Liska [Tue, 22 Jun 2021 07:50:38 +0000 (09:50 +0200)]
contrib: fix a flake8 issue
contrib/ChangeLog:
* mklog.py: Fix flake8 issue.
Martin Liska [Tue, 22 Jun 2021 06:54:34 +0000 (08:54 +0200)]
autofdo: Bump AUTO_PROFILE_VERSION.
gcc/ChangeLog:
* auto-profile.c (AUTO_PROFILE_VERSION): Bump as string format
was changed.
Martin Liska [Tue, 22 Jun 2021 06:43:41 +0000 (08:43 +0200)]
gcov: update comment about padding
gcc/ChangeLog:
* gcov-io.h: Remove padding entries.
liuhongt [Wed, 16 Jun 2021 09:34:43 +0000 (17:34 +0800)]
Add vect_recog_popcount_pattern to handle mismatch between the vectorized popcount IFN and scalar popcount builtin.
The patch remove those pro- and demotions when backend support direct
optab.
For i386: it enables vectorization for vpopcntb/vpopcntw and optimized
for vpopcntq.
gcc/ChangeLog:
PR tree-optimization/97770
* tree-vect-patterns.c (vect_recog_popcount_pattern):
New.
(vect_recog_func vect_vect_recog_func_ptrs): Add new pattern.
gcc/testsuite/ChangeLog:
PR tree-optimization/97770
* gcc.target/i386/avx512bitalg-pr97770-1.c: Remove xfail.
* gcc.target/i386/avx512vpopcntdq-pr97770-1.c: Remove xfail.
liuhongt [Thu, 29 Apr 2021 10:27:09 +0000 (18:27 +0800)]
Optimize vpexpand* to mask mov when mask have all ones in it's lower part (including 0 and -1).
gcc/ChangeLog:
PR target/100267
* config/i386/i386-builtin.def (BDESC): Adjust builtin name.
* config/i386/sse.md (<avx512>_expand<mode>_mask): Rename to ..
(expand<mode>_mask): this ..
(*expand<mode>_mask): New pre_reload splitter to transform
v{,p}expand* to vmov* when mask is zero, all ones, or has all
ones in it's lower part, otherwise still generate
v{,p}expand*.
gcc/testsuite/ChangeLog:
PR target/100267
* gcc.target/i386/avx512bw-pr100267-1.c: New test.
* gcc.target/i386/avx512bw-pr100267-b-2.c: New test.
* gcc.target/i386/avx512bw-pr100267-d-2.c: New test.
* gcc.target/i386/avx512bw-pr100267-q-2.c: New test.
* gcc.target/i386/avx512bw-pr100267-w-2.c: New test.
* gcc.target/i386/avx512f-pr100267-1.c: New test.
* gcc.target/i386/avx512f-pr100267-pd-2.c: New test.
* gcc.target/i386/avx512f-pr100267-ps-2.c: New test.
* gcc.target/i386/avx512vl-pr100267-1.c: New test.
* gcc.target/i386/avx512vl-pr100267-pd-2.c: New test.
* gcc.target/i386/avx512vl-pr100267-ps-2.c: New test.
* gcc.target/i386/avx512vlbw-pr100267-1.c: New test.
* gcc.target/i386/avx512vlbw-pr100267-b-2.c: New test.
* gcc.target/i386/avx512vlbw-pr100267-d-2.c: New test.
* gcc.target/i386/avx512vlbw-pr100267-q-2.c: New test.
* gcc.target/i386/avx512vlbw-pr100267-w-2.c: New test.
liuhongt [Wed, 28 Apr 2021 06:52:59 +0000 (14:52 +0800)]
Fix ICE for vpexpand*.
gcc/ChangeLog
PR target/100310
* config/i386/i386-expand.c
(ix86_expand_special_args_builtin): Keep constm1_operand only
if it satisfies insn's operand predicate.
gcc/testsuite/ChangeLog
PR target/100310
* gcc.target/i386/pr100310.c: New test.
GCC Administrator [Tue, 22 Jun 2021 00:16:29 +0000 (00:16 +0000)]
Daily bump.
Jonathan Wakely [Mon, 21 Jun 2021 12:35:18 +0000 (13:35 +0100)]
libstdc++: Improve std::lock algorithm
The current std::lock algorithm is the one called "persistent" in Howard
Hinnant's https://howardhinnant.github.io/dining_philosophers.html post.
While it tends to perform acceptably fast, it wastes a lot of CPU cycles
by continuously locking and unlocking the uncontended mutexes.
Effectively, it's a spin lock with no back-off.
This replaces it with the one Howard calls "smart and polite". It's
smart, because when a Mi.try_lock() call fails because mutex Mi is
contended, the algorithm reorders the mutexes until Mi is first, then
calls Mi.lock(), to block until Mi is no longer contended. It's
polite because it uses std::this_thread::yield() between the failed
Mi.try_lock() call and the Mi.lock() call. (In reality it uses
__gthread_yield() directly, because using this_thread::yield() would
require shuffling code around to avoid a circular dependency.)
This version of the algorithm is inspired by some hints from Howard, so
that it has strictly bounded stack usage. As the comment in the code
says:
// This function can recurse up to N levels deep, for N = 1+sizeof...(L1).
// On each recursion the lockables are rotated left one position,
// e.g. depth 0: l0, l1, l2; depth 1: l1, l2, l0; depth 2: l2, l0, l1.
// When a call to l_i.try_lock() fails it recurses/returns to depth=i
// so that l_i is the first argument, and then blocks until l_i is locked.
The 'i' parameter is the desired permuation of the lockables, and the
'depth' parameter is the depth in the call stack of the current
instantiation of the function template. If i == depth then the function
calls l0.lock() and then l1.try_lock()... for each lockable in the
parameter pack l1. If i > depth then the function rotates the lockables
to the left one place, and calls itself again to go one level deeper.
Finally, if i < depth then the function returns to a shallower depth,
equivalent to a right rotate of the lockables. When a call to
try_lock() fails, i is set to the index of the contended lockable, so
that the next call to l0.lock() will use the contended lockable as l0.
This commit also replaces the std::try_lock implementation details. The
new code is identical in behaviour, but uses a pair of constrained
function templates. This avoids instantiating a class template, and is a
litle simpler to call where used in std::__detail::__lock_impl and
std::try_lock.
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:
* include/std/mutex (__try_to_lock): Move to __detail namespace.
(struct __try_lock_impl): Replace with ...
(__detail::__try_lock_impl<Idx>(tuple<Lockables...>&)): New
function templates to implement std::try_lock.
(try_lock): Use new __try_lock_impl.
(__detail::__lock_impl(int, int&, L0&, L1&...)): New function
template to implement std::lock.
(lock): Use __lock_impl.
Jason Merrill [Sun, 13 Jun 2021 18:00:12 +0000 (14:00 -0400)]
expand: empty class return optimization [PR88529]
The x86_64 psABI says that an empty class isn't passed or returned in memory
or registers, so we shouldn't set %eax in this function.
The df-scan hunk catches the case where we look at a 0-length reg and build
a range the length of unsigned int, which happened before I changed
assign_parms to match expand_function_end.
PR target/88529
gcc/ChangeLog:
* df-scan.c (df_ref_record): Check that regno < endregno.
* function.c (assign_parms, expand_function_end): Do nothing with a
TYPE_EMPTY_P result.
gcc/testsuite/ChangeLog:
* g++.target/i386/empty-class1.C: New test.
Patrick Palka [Mon, 21 Jun 2021 13:45:31 +0000 (09:45 -0400)]
libstdc++: Sync __cpp_lib_ranges macro defined in ranges_cmp.h
r12-1606 bumped the value of __cpp_lib_ranges defined in <version>,
but this macro is also defined in <bits/range_cmp.h>, so it needs to
be updated there as well.
libstdc++-v3/ChangeLog:
* include/bits/ranges_cmp.h (__cpp_lib_ranges): Adjust value.
Tobias Burnus [Mon, 21 Jun 2021 13:17:22 +0000 (15:17 +0200)]
contrib/mklog.py: Improve PR handling
Co-authored-by: Martin Sebor <msebor@redhat.com>
contrib/ChangeLog:
* mklog.py (bugzilla_url): Fetch also component.
(pr_filename_regex): New.
(get_pr_titles): Update PR string with correct format and component.
(generate_changelog): Take additional PRs; extract PR from the
filename.
(__main__): Add -b/--pr-numbers argument.
* test_mklog.py (EXPECTED4): Update to expect a PR for the new file.
Richard Biener [Fri, 18 Jun 2021 12:07:00 +0000 (14:07 +0200)]
tree-optimization/101120 - fix compile-time issue with SLP groups
This places two hacks to avoid an old compile-time issue when
vectorizing large permuted SLP groups with gaps where we end up
emitting loads and IV adjustments for the gap as well and those
have quite a high cost until they are eventually cleaned up.
The first hack is to fold the auto-inc style IV updates early
in the vectorizer rather than in the next forwprop pass which
shortens the SSA use-def chains of the used IV.
The second hack is to remove the unused loads after we've picked
all that we possibly use.
2021-06-18 Richard Biener <rguenther@suse.de>
PR tree-optimization/101120
* tree-vect-data-refs.c (bump_vector_ptr): Fold the
built increment.
* tree-vect-slp.c (vect_transform_slp_perm_load): Add
DR chain DCE capability.
* tree-vectorizer.h (vect_transform_slp_perm_load): Adjust.
* tree-vect-stmts.c (vectorizable_load): Remove unused
loads in the DR chain for SLP.
Patrick Palka [Mon, 21 Jun 2021 11:54:29 +0000 (07:54 -0400)]
c++: REF_PARENTHESIZED_P wrapper inhibiting NRVO [PR67302]
Here, in C++14 or later, we remember the parentheses around 'a' in the
return statement by using a REF_PARENTHESIZED_P wrapper, which ends up
inhibiting NRVO because we don't look through this wrapper before
checking the conditions for NRVO. This patch fixes this by calling
maybe_undo_parenthesized_ref sooner in check_return_expr.
PR c++/67302
gcc/cp/ChangeLog:
* typeck.c (check_return_expr): Call maybe_undo_parenthesized_ref
sooner, before the NRVO handling.
gcc/testsuite/ChangeLog:
* g++.dg/opt/nrv21.C: New test.
Patrick Palka [Mon, 21 Jun 2021 11:54:26 +0000 (07:54 -0400)]
c++: conversion to base of vbase in NSDMI [PR80431]
The delayed processing of conversions to a virtual base in an NSDMI
assumes the target base type is a (possibly indirect) virtual base of
the current class, but the target base type could also be a base of a
virtual base, as in the testcase below. Since such a base isn't a part
of CLASSTYPE_VBASECLASSES, we end up miscompiling the testcase due to
the call to build_base_path (with binfo=NULL_TREE) silently returning
error_mark_node. Fix this by using convert_to_base to build the
conversion instead.
PR c++/80431
gcc/cp/ChangeLog:
* tree.c (bot_replace): Use convert_to_base to build the
conversion to the (morally) virtual base.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/nsdmi-virtual1a.C: New test.
Jakub Jelinek [Mon, 21 Jun 2021 11:30:42 +0000 (13:30 +0200)]
inline-asm: Fix ICE with bitfields in "m" operands [PR100785]
Bitfields, while they live in memory, aren't something inline-asm can easily
operate on.
For C and "=m" or "+m", we were diagnosing bitfields in the past in the
FE, where c_mark_addressable had:
case COMPONENT_REF:
if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
{
error
("cannot take address of bit-field %qD", TREE_OPERAND (x, 1));
return false;
}
but that check got moved in GCC 6 to build_unary_op instead and now we
emit an error during expansion and ICE afterwards (i.e. error-recovery).
For "m" it used to be diagnosed in c_mark_addressable too, but since
GCC 6 it is ice-on-invalid.
For C++, this was never diagnosed in the FE, but used to be diagnosed
in the gimplifier and/or during expansion before 4.8.
The following patch does multiple things:
1) diagnoses it in the FEs
2) stops emitting a redundant diagnostic in the gimplifier using the
usual way, if we already see error_mark_node, we assume error has
been emitted already and only diagnose if it wasn't error_mark_node;
this helps diagnosing the same bug with multiple different
errors
3) simplifies during expansion the inline asm if any errors have been
reported (similarly how e.g. vregs pass if it detects errors on
inline-asm either deletes them or simplifies to bare minimum -
just labels), so that we don't have error-recovery ICEs there
2021-06-11 Jakub Jelinek <jakub@redhat.com>
PR inline-asm/100785
gcc/
* gimplify.c (gimplify_asm_expr): Don't diagnose errors if
output or input operands were already error_mark_node.
* cfgexpand.c (expand_asm_stmt): If errors are emitted,
remove all inputs, outputs and clobbers from the asm and
set template to "".
gcc/c/
* c-typeck.c (c_mark_addressable): Diagnose trying to make
bit-fields addressable.
gcc/cp/
* typeck.c (cxx_mark_addressable): Diagnose trying to make
bit-fields addressable.
gcc/testsuite/
* c-c++-common/pr100785.c: New test.
* gcc.dg/pr48552-1.c: Don't expect invalid lvalue errors.
* gcc.dg/pr48552-2.c: Likewise.
Gary Dismukes [Tue, 6 Apr 2021 23:07:39 +0000 (19:07 -0400)]
[Ada] Implement fixed-lower-bound consistency checks for qualified_expressions
gcc/ada/
* checks.adb (Selected_Range_Checks): In the case of a
qualified_expression where the qualifying subtype is an
unconstrained array subtype with fixed lower bounds for some of
its indexes, generate tests to check that those bounds are equal
to the corresponding lower bounds of the qualified array object.
Bob Duff [Tue, 6 Apr 2021 14:27:26 +0000 (10:27 -0400)]
[Ada] Optimization of System.Value_N
gcc/ada/
* libgnat/s-valuen.ads (Value_Enumeration,
Valid_Enumeration_Value): Inline.
(Value_Enumeration_Pos): Add Pure_Function.
Justin Squirek [Mon, 29 Mar 2021 14:06:55 +0000 (10:06 -0400)]
[Ada] INOX: prototype "when" constructs
gcc/ada/
* doc/gnat_rm/implementation_defined_pragmas.rst: Document new
feature under pragma Extensions_Allowed.
* gnat_rm.texi: Regenerate.
* errout.adb, errout.ads (Error_Msg_GNAT_Extension): Created to
issue errors when parsing extension only constructs.
* exp_ch11.adb, exp_ch11.ads (Expand_N_Raise_When_Statement):
Created to expand raise ... when constucts.
* exp_ch5.adb, exp_ch5.ads (Expand_N_Goto_When_Statement):
Created to expand goto ... when constructs.
* exp_ch6.adb, exp_ch6.ads (Expand_N_Return_When_Statement):
Created to expand return ... when constructs.
* expander.adb (Expand): Add case entries for "when" constructs.
* gen_il-gen-gen_nodes.adb, gen_il-types.ads: Add entries for
"when" constructs.
* par-ch11.adb (P_Raise_Statement): Add processing for raise ...
when.
* par-ch5.adb (Missing_Semicolon_On_Exit): Renamed to
Missing_Semicolon_On_When and moved to par-util.adb.
* par-ch6.adb (Get_Return_Kind): Renamed from Is_Simple and
processing added for "return ... when" return kind.
(Is_Simple): Renamed to Get_Return_Kind.
(P_Return_Statement): Add case for return ... when variant of
return statement.
* par-util.adb, par.adb (Missing_Semicolon_On_When): Added to
centeralize parsing of "when" keywords in the context of "when"
constructs.
* sem.adb (Analyze): Add case for "when" constructs.
* sem_ch11.adb, sem_ch11.ads (Analyze_Raise_When_Statement):
Created to analyze raise ... when constructs.
* sem_ch5.adb, sem_ch5.ads (Analyzed_Goto_When_Statement):
Created to analyze goto ... when constructs.
* sem_ch6.adb, sem_ch6.ads (Analyze_Return_When_Statement):
Created to analyze return ... when constructs.
* sprint.adb (Sprint_Node_Actual): Add entries for new "when"
nodes.
Steve Baird [Tue, 30 Mar 2021 00:09:31 +0000 (17:09 -0700)]
[Ada] Add Ada.Strings.Text_Buffers and replace uses of Ada.Strings.Text_Output
gcc/ada/
* Make-generated.in (GEN_IL_FLAGS): Keep only GNAT flags.
(ada/stamp-gen_il): Remove dependencies on libgnat/ sources. Do not
copy libgnat/ sources locally and tidy up.
* Makefile.rtl: Include object files for new Text_Buffer units
in the GNATRTL_NONTASKING_OBJS list.
* exp_put_image.ads, exp_put_image.adb: Update Rtsfind calls to
match new specs. For example, calls to RE_Sink are replaced with
calls to RE_Root_Buffer_Type. Update comments and change
subprogram names accordingly (e.g., Preload_Sink is changed to
Preload_Root_Buffer_Type).
* impunit.adb: Add 6 new predefined units (Text_Buffers and 5
child units thereof).
* rtsfind.ads, rtsfind.adb: Add interfaces for accessing the
Ada.Strings.Text_Buffers package and declarations
therein (including the Unbounded child unit). Do not (yet)
delete interfaces for accessing the old Text_Output package.
* sem_attr.adb (Check_Put_Image_Attribute): Replace RE_Sink uses
with RE_Root_Buffer_Type and update comments accordingly.
* sem_ch10.adb (Analyze_Compilation_Unit): Update call to
reflect name change of callee (that is, the former Preload_Sink
is now Preload_Root_Buffer_Type).
* sem_ch13.adb (Has_Good_Profile): Replace RE_Sink use with
RE_Root_Buffer_Type.
(Build_Spec): Update comment describing a parameter type.
* gen_il.ads: Remove clauses for the old Text_Output package and
add them for Ada.Streams.Stream_IO.
(Sink): Declare.
(Create_File): Likewise.
(Increase_Indent): Likewise.
(Decrease_Indent): Likewise.
(Put): Likewise.
(LF): Likewise.
* gen_il.adb: Add clauses for Ada.Streams.Stream_IO.
(Create_File): New procedure.
(Increase_Indent): Likewise.
(Decrease_Indent): Likewise.
(Put): New procedures.
* gen_il-gen.adb: Add clauses for Ada.Text_IO. Replace
Sink'Class with Sink throughout. Use string concatenation and
LF marker instead of formatted strings and "\n" marker. Update
Indent/Outdent calls to use new Increase_Indent/Decrease_Indent
names.
(Put_Membership_Query_Decl): Remove.
* gen_il-internals.ads: Replace Sink'Class with Sink throughout.
(Ptypes): Remove.
(Pfields): Likewise.
* gen_il-internals.adb: Remove clauses for GNAT.OS_Lib and
Ada.Strings.Text_Buffers.Files. Replace Sink'Class with Sink
throughout. Use string concatenation and LF marker instead of
formatted strings and "\n" marker.
(Stdout): Remove.
(Ptypes): Likewise.
(Pfields): Likewise.
* libgnarl/s-putaim.ads: Modify context clause, update
declaration of subtype Sink to refer to
Text_Buffers.Root_Buffer_Type instead of the old
Text_Output.Sink type.
* libgnarl/s-putaim.adb: Modify context clause and add use
clause to refer to Text_Buffers package.
* libgnat/a-cbdlli.ads, libgnat/a-cbdlli.adb,
libgnat/a-cbhama.ads, libgnat/a-cbhama.adb,
libgnat/a-cbhase.ads, libgnat/a-cbhase.adb,
libgnat/a-cbmutr.ads, libgnat/a-cbmutr.adb,
libgnat/a-cborma.ads, libgnat/a-cborma.adb,
libgnat/a-cborse.ads, libgnat/a-cborse.adb,
libgnat/a-cdlili.ads, libgnat/a-cdlili.adb,
libgnat/a-cidlli.ads, libgnat/a-cidlli.adb,
libgnat/a-cihama.ads, libgnat/a-cihama.adb,
libgnat/a-cihase.ads, libgnat/a-cihase.adb,
libgnat/a-cimutr.ads, libgnat/a-cimutr.adb,
libgnat/a-ciorma.ads, libgnat/a-ciorma.adb,
libgnat/a-ciormu.ads, libgnat/a-ciormu.adb,
libgnat/a-ciorse.ads, libgnat/a-ciorse.adb,
libgnat/a-coboho.ads, libgnat/a-coboho.adb,
libgnat/a-cobove.ads, libgnat/a-cobove.adb,
libgnat/a-cohama.ads, libgnat/a-cohama.adb,
libgnat/a-cohase.ads, libgnat/a-cohase.adb,
libgnat/a-coinho.ads, libgnat/a-coinho.adb,
libgnat/a-coinho__shared.ads, libgnat/a-coinho__shared.adb,
libgnat/a-coinve.ads, libgnat/a-coinve.adb,
libgnat/a-comutr.ads, libgnat/a-comutr.adb,
libgnat/a-convec.ads, libgnat/a-convec.adb,
libgnat/a-coorma.ads, libgnat/a-coorma.adb,
libgnat/a-coormu.ads, libgnat/a-coormu.adb,
libgnat/a-coorse.ads, libgnat/a-coorse.adb,
libgnat/a-nbnbin.ads, libgnat/a-nbnbin.adb,
libgnat/a-nbnbin__gmp.adb, libgnat/a-nbnbre.ads,
libgnat/a-nbnbre.adb, libgnat/a-strunb.ads,
libgnat/a-strunb.adb, libgnat/a-strunb__shared.ads,
libgnat/a-strunb__shared.adb, libgnat/s-rannum.ads,
libgnat/s-rannum.adb: Modify Put_Image procedure used in
Put_Image aspect specification to conform to Ada profile
rules (in particular, the first parameter shall be of type
Ada.Strings.Text_Buffers.Root_Buffer_Type'Class).
* libgnat/a-sttebu.ads, libgnat/a-sttebu.adb,
libgnat/a-stbubo.ads, libgnat/a-stbubo.adb,
libgnat/a-stbufi.ads, libgnat/a-stbufi.adb,
libgnat/a-stbufo.ads, libgnat/a-stbufo.adb,
libgnat/a-stbuun.ads, libgnat/a-stbuun.adb,
libgnat/a-stbuut.ads, libgnat/a-stbuut.adb: A new predefined
unit, Ada.Strings.Text_Buffers, and five child units. Two of
the five are RM-defined: Bounded and Unbounded. The remaining
three are GNAT-defined: Files, Utils, and Formatting. The buffer
type corresponding to an output file, type Files.File_Buffer, is
simpler (and perhaps therefore slower) than its predecessor.
Caching similar to what was being done before could be added
later if that seems appropriate.
* libgnat/s-putima.ads: Modify context clause, update
declaration of subtype Sink to refer to
Text_Buffers.Root_Buffer_Type instead of the old
Text_Output.Sink type.
* libgnat/s-putima.adb: Modify context clause. Update
Indent/Outdent calls to use new Increase_Indent/Decrease_Indent
names; ditto for "Put_String => Put" name change.
* libgnat/a-stteou__bootstrap.ads: Delete.
Eric Botcazou [Sat, 3 Apr 2021 13:32:46 +0000 (15:32 +0200)]
[Ada] Adjust new fast bit-field copy path to big-endian platforms
gcc/ada/
* exp_ch5.adb (Expand_Assign_Array_Bitfield_Fast): If big-endian
ordering is in effect for the operands and they are small,
adjust the unchecked conversions done around them.
Richard Kenner [Thu, 1 Apr 2021 15:35:07 +0000 (11:35 -0400)]
[Ada] Add Return_Statement field
gcc/ada/
* einfo.ads (Return_Statement): Add documentation.
* exp_ch6.adb (Expand_N_Extended_Return_Statement): Set it.
* gen_il-fields.ads: Add it.
* gen_il-gen-gen_entities.adb: Add it.
Bob Duff [Tue, 30 Mar 2021 11:15:39 +0000 (07:15 -0400)]
[Ada] Improve efficiency of small slice assignments of packed arrays
gcc/ada/
* rtsfind.ads, libgnat/s-bitfie.ads, libgnat/s-bituti.adb,
libgnat/s-bituti.ads (Fast_Copy_Bitfield): New run-time library
function to copy bit fields faster than Copy_Bitfield. Cannot be
called with zero-size bit fields. Remove obsolete ??? comments
from s-bituti.adb; we already do "avoid calling this if
Forwards_OK is False".
* exp_ch5.adb (Expand_Assign_Array_Loop_Or_Bitfield,
Expand_Assign_Array_Bitfield_Fast): Generate calls to
Fast_Copy_Bitfield when appropriate.
* sem_util.adb, sem_util.ads (Get_Index_Bounds): Two new
functions for getting the index bounds. These are more
convenient than the procedure of the same name, because they can
be used to initialize constants.
Ed Schonberg [Sun, 28 Mar 2021 03:28:29 +0000 (23:28 -0400)]
[Ada] Implementation of AI12-205: defaults for formal types
gcc/ada/
* gen_il-fields.ads: Add Default_Subtype_Mark to enumeration
type for fields.
* gen_il-gen-gen_nodes.adb: Add call to create new field for
Formal_Type_Declaration node.
* par-ch12.adb (P_Formal_Type_Declaration): in Ada_2022 mode,
recognize new syntax for default: "or use subtype_mark".
(P_Formal_Type_Definition): Ditto for the case of a formal
incomplete type.
* sinfo.ads: Add field Default_Subtype_Mark to
N_Formal_Type_Declaration.
* sem_ch12.adb (Validate_Formal_Type_Default): New procedure, to
apply legality rules to default subtypes in formal type
declarations. Some legality rules apply to all defaults, such as
the requirement that the default for a formal type that depends
on previous formal entities must itself be a previously declared
formal of the same unit. Other checks are kind- specific.
(Analyze_Associations): Use specified default if there is no
actual provided for a formal type in an instance.
(Analyze_Formal_Type_Declaration): Call
Validate_Formal_Type_Default when default subtype is present.
Bob Duff [Wed, 31 Mar 2021 12:00:59 +0000 (08:00 -0400)]
[Ada] Implement 'Valid_Value attribute
gcc/ada/
* libgnat/s-valuen.ads, libgnat/s-valuen.adb
(Value_Enumeration_Pos): New function to compute the 'Pos of the
enumeration literal for a given String. Return a special value
instead of raising an exception on invalid input. Called by both
Valid_Enumeration_Image and Value_Enumeration.
(Valid_Enumeration_Image): Return a Boolean indicating whether
the String is a valid Image for the given enumeration type.
(Value_Enumeration): Implement in terms of
Value_Enumeration_Pos.
* libgnat/s-vaenu8.ads, libgnat/s-vaen16.ads,
libgnat/s-vaen32.ads: Rename Valid_Enumeration_Image from the
instances.
* libgnat/s-valuti.ads: Correct documentation (it was not true
for the null string).
* libgnat/s-valuti.adb (Normalize_String): Do not raise
Constraint_Error for the null string, nor strings containing
nothing but blanks, so that Valid_Enumeration_Image can return
False in these cases, rather than raising an exception.
* rtsfind.ads (RE_Value_Enumeration_8, RE_Value_Enumeration_16,
RE_Value_Enumeration_32): New functions.
(RTE_Available): Improve comment (E doesn't have to be a
subprogram, although that's the usual case).
* sem_attr.adb (nalid_Value): Semantic analysis for new
attribute.
* exp_attr.adb: Call Expand_Valid_Value_Attribute for new
attribute.
* exp_imgv.ads, exp_imgv.adb (Expand_Valid_Value_Attribute): New
procedure to expand Valid_Value into a call to
Valid_Enumeration_Image_NN.
(Expand_Value_Attribute): Misc code cleanups. Remove two ???
mark comments. RTE_Available won't work here. For one thing,
RTE_Available (X) shouldn't be called until the compiler has
decided to make use of X (see comments on RTE_Available), and in
this case we're trying to AVOID calling something.
* snames.ads-tmpl: New attribute name.
* doc/gnat_rm/implementation_defined_attributes.rst: Document
new attribute.
* gnat_rm.texi: Regenerate.
Eric Botcazou [Tue, 30 Mar 2021 08:36:55 +0000 (10:36 +0200)]
[Ada] Export Opt.Assume_No_Invalid_Values for use in back-end
gcc/ada/
* fe.h (Assume_No_Invalid_Values): Declare.
* opt.ads (Assume_No_Invalid_Values): Add warning comment.
Bob Duff [Fri, 26 Mar 2021 19:41:31 +0000 (15:41 -0400)]
[Ada] Zero-size slices
gcc/ada/
* libgnat/s-bituti.ads (Small_Size): Do not include 0 in this
type.
* libgnat/s-bituti.adb (Copy_Bitfield): Do nothing for 0-bit
bitfields.
Ghjuvan Lacambre [Sun, 28 Mar 2021 12:10:53 +0000 (14:10 +0200)]
[Ada] Address ??? comments
gcc/ada/
* exp_ch9.adb (Build_Simple_Entry_Call): Add comment.
* libgnat/s-rannum.adb (Random): Update comment.
* libgnat/s-rannum.ads (Generator): Update comment.
Piotr Trojanek [Fri, 26 Mar 2021 22:23:01 +0000 (23:23 +0100)]
[Ada] Fix unbalanced parens in documentation of Address clauses
gcc/ada/
* doc/gnat_rm/representation_clauses_and_pragmas.rst (Address
Clauses): Fix unbalanced parens.
* gnat_rm.texi: Regenerate.
Ghjuvan Lacambre [Wed, 17 Mar 2021 18:13:17 +0000 (19:13 +0100)]
[Ada] Minor reformattings
gcc/ada/
* errout.adb (Handle_Serious_Error): Capitalize comment.
* exp_dbug.adb (Set_Entity_Name): Capitalize sentence.
* exp_dist.adb (Expand_All_Calls_Remote_Subprogram_Call): Fix
typo.
* sem_ch3.adb (Modular_Type_Declaration): Add space after comma.
Ghjuvan Lacambre [Wed, 10 Feb 2021 14:52:34 +0000 (15:52 +0100)]
[Ada] Make -gnatU and -gnatw.d the default
gcc/ada/
* debug.adb: Document -gnatd_U as taken.
* err_vars.ads (Warning_Doc_Switch): Set to True.
* errout.ads (Errout): Update documentation.
* gnat1drv.adb (Adjust_Global_Switches): React to -gnatd_U.
* hostparm.ads (Tag_Errors): Set to True.
* opt.ads (Unique_Error_Tag): Document -gnatd_U.
Eric Botcazou [Fri, 26 Mar 2021 09:53:57 +0000 (10:53 +0100)]
[Ada] Fix invalid JSON real numbers generated with -gnatRj
gcc/ada/
* urealp.ads (UR_Write_To_JSON): Declare.
* urealp.adb (Decimal_Exponent_Hi): Treat numbers in base 10
specially and rewrite handling of numbers in other bases.
(Decimal_Exponent_Lo): Likewise.
(Normalize): Minor tweak.
(UR_Write_To_JSON): New wrapper procedure around UR_Write.
* repinfo.adb (List_Type_Info): When the output is to JSON, call
UR_Write_To_JSON instead of UR_Write.
Piotr Trojanek [Fri, 26 Mar 2021 08:36:49 +0000 (09:36 +0100)]
[Ada] Disable wrong computation of offsets within multidimensional arrays
gcc/ada/
* sem_util.adb (Indexed_Component_Bit_Offset): Return an unknown
offset for components within multidimensional arrays; remove
redundant parens.
Piotr Trojanek [Fri, 26 Mar 2021 08:02:33 +0000 (09:02 +0100)]
[Ada] Skip overlay checks on protected components with expansion disabled
gcc/ada/
* sem_util.adb (Find_Overlaid_Entity): Ignore references to
components and discriminants.
Doug Rupp [Thu, 25 Mar 2021 19:44:23 +0000 (12:44 -0700)]
[Ada] Compile s-mmap on aarch64-linux
gcc/ada/
* Makefile.rtl (aarch64-linux) [LIBGNAT_TARGET_PAIRS]: Add
$(TRASYM_DWARF_UNIX_PAIRS).
[EXTRA_GNAT_RTL_NONTASKING_OBJS]: Add $(TRASYM_DWARF_UNIX_OBJS)
Gary Dismukes [Thu, 25 Mar 2021 17:37:58 +0000 (13:37 -0400)]
[Ada] Compiler crash on sliding of fixed-lower-bound object in Loop_Invariant
gcc/ada/
* exp_util.adb (Expand_Sliding_Conversion): Only perform
expansion when Expander_Active is True. Add a comment about this
and refine existing comment regarding string literals.
Piotr Trojanek [Thu, 25 Mar 2021 12:17:40 +0000 (13:17 +0100)]
[Ada] Simplify detection of statically overlapping slices
gcc/ada/
* sem_util.adb (Denotes_Same_Object): Simplify handling of
slices.
Piotr Trojanek [Thu, 25 Mar 2021 12:15:30 +0000 (13:15 +0100)]
[Ada] Fix detection of overlapping actuals with renamings
gcc/ada/
* sem_util.adb (Is_Object_Renaming): Rename from Is_Renaming;
simplify; adapt callers.
Frederic Konrad [Fri, 6 Nov 2020 19:08:28 +0000 (20:08 +0100)]
[Ada] powerpc64-wrs-vxworks7r2: build shared libgnat
gcc/ada/
* Makefile.rtl: Compiles both static and dynamic libgnat for
powerpc64-wrs-vxworks7r2.
prathamesh.kulkarni [Mon, 21 Jun 2021 09:22:54 +0000 (14:52 +0530)]
arm/66791: Replace builtins in vceq_* (a, b) with a == b.
gcc/ChangeLog:
* config/arm/arm_neon.h (vceq_s8): Replace builtin with __a == __b.
(vceq_s16): Likewise.
(vceq_s32): Likewise.
(vceq_u8): Likewise.
(vceq_u16): Likewise.
(vceq_u32): Likewise.
(vceq_p8): Likewise.
(vceqq_s8): Likewise.
(vceqq_s16): Likewise.
(vceqq_s32): Likewise.
(vceqq_u8): Likewise.
(vceqq_u16): Likewise.
(vceqq_u32): Likewise.
(vceqq_p8): Likewise.
(vceq_f32): Gate __a == __b on __FAST_MATH__.
(vceqq_f32): Likewise.
(vceq_f16): Likewise.
(vceqq_f16): Likewise.
prathamesh.kulkarni [Mon, 21 Jun 2021 09:08:32 +0000 (14:38 +0530)]
arm/97906: Adjust neon_vca patterns to use GLTE instead of GTGE iterator.
gcc/ChangeLog:
PR target/97906
* config/arm/iterators.md (NEON_VACMP): Remove.
* config/arm/neon.md (neon_vca<cmp_op><mode>): Use GLTE instead of GTGE
iterator.
(neon_vca<cmp_op><mode>_insn): Likewise.
(neon_vca<cmp_op_unsp><mode>_insn_unspec): Use NEON_VAGLTE instead of
NEON_VACMP.
gcc/testsuite/ChangeLog:
PR target/97906
* gcc.target/arm/simd/pr97906.c: New test.
Richard Biener [Mon, 21 Jun 2021 07:30:41 +0000 (09:30 +0200)]
tree-optimization/101121 - avoid infinite SLP build
The following plugs another hole where we cache a failed SLP build
attempt with an all-success 'matches'. It also adds checking that
we don't do that.
2021-06-21 Richard Biener <rguenther@suse.de>
PR tree-optimization/101121
* tree-vect-slp.c (vect_build_slp_tree_2): To not fail fatally
when we just lack a stmt with the desired op when doing permutation.
(vect_build_slp_tree): When caching a failed SLP build attempt
assert that at least one lane is marked as not matching.
* gfortran.dg/pr101121.f: New testcase.
liuhongt [Tue, 15 Jun 2021 08:25:16 +0000 (16:25 +0800)]
Disparage slightly the mask register alternative for bitwise operations.
The avx512 supports bitwise operations with mask registers, but the
throughput of those instructions is much lower than that of the
corresponding gpr version, so we would additionally disparages
slightly the mask register alternative for bitwise operations in the
LRA.
Also when allocano cost of GENERAL_REGS is same as MASK_REGS, allocate
MASK_REGS first since it has already been disparaged.
gcc/ChangeLog:
PR target/101142
* config/i386/i386.md: (*anddi_1): Disparage slightly the mask
register alternative.
(*and<mode>_1): Ditto.
(*andqi_1): Ditto.
(*andn<mode>_1): Ditto.
(*<code><mode>_1): Ditto.
(*<code>qi_1): Ditto.
(*one_cmpl<mode>2_1): Ditto.
(*one_cmplsi2_1_zext): Ditto.
(*one_cmplqi2_1): Ditto.
* config/i386/i386.c (x86_order_regs_for_local_alloc): Change
the order of mask registers to be before general registers.
gcc/testsuite/ChangeLog:
PR target/101142
* gcc.target/i386/spill_to_mask-1.c: Adjust testcase.
* gcc.target/i386/spill_to_mask-2.c: Adjust testcase.
* gcc.target/i386/spill_to_mask-3.c: Adjust testcase.
* gcc.target/i386/spill_to_mask-4.c: Adjust testcase.
Roger Sayle [Mon, 21 Jun 2021 07:54:50 +0000 (08:54 +0100)]
PR target/11877: Use xor to write zero to memory with -Os
The following patch attempts to resolve PR target/11877 (without
triggering PR/23102). On x86_64, writing an SImode or DImode zero
to memory uses an instruction encoding that is larger than first
clearing a register (using xor) then writing that to memory. Hence,
after reload, the peephole2 pass can determine if there's a suitable
free register, and if so, use that to shrink the code size with -Os.
To improve code size, and avoid inserting a large number of xor
instructions (PR target/23102), this patch makes use of peephole2's
efficient pattern matching to use a single temporary for a run of
consecutive writes. In theory, one could do better still with a
new target-specific pass, gated on -Os, to shrink these instructions
(like stv), but that's probably overkill for the little remaining
space savings.
Evaluating this patch on the CSiBE benchmark (v2.1.1) results in a
0.26% code size improvement (3715273 bytes down to 3705477) on x86_64
with -Os [saving 1 byte every 400]. 549 of 894 tests improve, two
tests grow larger. Analysis of these 2 pathological cases reveals
that although peephole2's match_scratch prefers to use a call-clobbered
register (to avoid requiring a new stack frame), very rarely this
interacts with GCC's shrink wrapping optimization, which may previously
have avoided saving/restoring a call clobbered register, such as %eax,
in the calling function.
2021-06-21 Roger Sayle <roger@nextmovesoftware.com>
gcc/ChangeLog
PR target/11877
* config/i386/i386.md: New define_peephole2s to shrink writing
1, 2 or 4 consecutive zeros to memory when optimizing for size.
gcc/testsuite/ChangeLog
PR target/11877
* gcc.target/i386/pr11877.c: New test case.
liuhongt [Mon, 21 Jun 2021 02:39:38 +0000 (10:39 +0800)]
MAINTAINERS: Add myself as maintainer of the i386 vector extensions.
ChangeLog:
* MAINTAINERS: Add myself as maintainer of the i386 vector
extensions.
GCC Administrator [Mon, 21 Jun 2021 00:16:25 +0000 (00:16 +0000)]
Daily bump.
Patrick Palka [Sun, 20 Jun 2021 16:47:18 +0000 (12:47 -0400)]
libstdc++: Implement new views::split as per P2210
This implements the new views::split from P2210R2 "Superior String
Splitting".
libstdc++-v3/ChangeLog:
* include/std/ranges (__non_propagating_cache::operator bool):
Define for split_view::begin().
(split_view): Define as per P2210.
(views::__detail::__can_split_view): Define.
(views::_Split, views::split): Define.
* testsuite/std/ranges/adaptors/100577.cc (test01, test02):
Test views::split.
* testsuite/std/ranges/adaptors/split.cc: New test.
* testsuite/std/ranges/p2325.cc (test08a): New test.
* testsuite/std/ranges/p2367.cc (test01): Test views::split.
Patrick Palka [Sun, 20 Jun 2021 16:41:42 +0000 (12:41 -0400)]
libstdc++: Implement P2210 changes to rename views::split to lazy_split
This mostly mechanical patch renames split to lazy_split throughout.
libstdc++-v3/ChangeLog:
* include/std/ranges: Rename views::split to views::lazy_split,
split_view to lazy_split_view, etc. throughout.
* testsuite/std/ranges/*: Likewise.
Patrick Palka [Sun, 20 Jun 2021 16:38:43 +0000 (12:38 -0400)]
libstdc++: Implement P2210 changes to split_view resolving LWG 3478
This implements the part of P2210R2 "Superior String Splitting" that
resolves LWG 3478.
libstdc++-v3/ChangeLog:
* include/std/ranges (split_view::_OuterIter::__at_end):
Check _M_trailing_empty.
(split_view::_OuterIter::_M_trailing_empty): Define this
data member.
(split_view::_OuterIter::operator++): Set _M_trailing_empty
appropriately.
(split_view::_OuterIter::operator==): Compare
_M_trailing_empty.
* testsuite/std/ranges/adaptors/100479.cc (test03): Expect two
split parts instead of one.
* testsuite/std/ranges/adaptors/split.cc (test11): New test.
Patrick Palka [Sun, 20 Jun 2021 16:38:35 +0000 (12:38 -0400)]
libstdc++: Define split_view::_InnerIter::base as per P2210
libstdc++-v3/ChangeLog:
* include/std/ranges (split_view::_InnerIter::base): Define as
per P2210.
GCC Administrator [Sun, 20 Jun 2021 00:16:21 +0000 (00:16 +0000)]
Daily bump.
Patrick Palka [Sat, 19 Jun 2021 00:33:31 +0000 (20:33 -0400)]
libstdc++: Implement LWG 3555 changes to transform/elements_view
libstdc++-v3/ChangeLog:
* include/std/ranges (transform_view::_Iterator::_S_iter_concept):
Consider _Base instead of _Vp as per LWG 3555.
(elements_view::_Iterator::_S_iter_concept): Likewise.
Patrick Palka [Sat, 19 Jun 2021 00:50:22 +0000 (20:50 -0400)]
libstdc++: Implement LWG 3553 changes to split_view
libstdc++-v3/ChangeLog:
* include/std/ranges (split_view::_OuterIter::value_type::begin):
Remove the non-const overload, and remove the copyable constraint
on the const overload as per LWG 3553.
Patrick Palka [Sat, 19 Jun 2021 00:50:13 +0000 (20:50 -0400)]
libstdc++: Implement LWG 3546 changes to common_iterator
libstdc++-v3/ChangeLog:
* include/bits/stl_iterator.h
(__detail::__common_iter_use_postfix_proxy): Add
move_constructible constraint as per LWG 3546.
(common_iterator::__postfix_proxy): Adjust initializer of
_M_keep as per LWG 3546.
GCC Administrator [Sat, 19 Jun 2021 00:16:33 +0000 (00:16 +0000)]
Daily bump.
Patrick Palka [Fri, 18 Jun 2021 23:33:39 +0000 (19:33 -0400)]
libstdc++: Reduce ranges::minmax/minmax_element comparison complexity
This rewrites ranges::minmax and ranges::minmax_element so that it
performs at most 3*N/2 many comparisons, as required by the standard.
In passing, this also fixes PR100387 by avoiding a premature std::move
in ranges::minmax and in std::shift_right.
PR libstdc++/100387
libstdc++-v3/ChangeLog:
* include/bits/ranges_algo.h (__minmax_fn::operator()): Rewrite
to limit comparison complexity to 3*N/2.
(__minmax_element_fn::operator()): Likewise.
(shift_right): Avoid premature std::move of __result.
* testsuite/25_algorithms/minmax/constrained.cc (test04, test05):
New tests.
* testsuite/25_algorithms/minmax_element/constrained.cc (test02):
Likewise.
Aaron Sawdey [Fri, 18 Jun 2021 17:47:03 +0000 (12:47 -0500)]
Fix p10 fusion regtests
Update the count of matches for the fusion combine patterns after
the recent changes to them. At Segher's request, used \m and \M
in the match patterns. Also I have grouped together all alternatives of
each fusion insn, which should hopefully make this test a little less
fragile.
gcc/testsuite/ChangeLog
* gcc.target/powerpc/fusion-p10-2logical.c: Update pattern
match counts.
* gcc.target/powerpc/fusion-p10-addadd.c: Update pattern match
counts.
* gcc.target/powerpc/fusion-p10-ldcmpi.c: Update pattern match
counts.
* gcc.target/powerpc/fusion-p10-logadd.c: Update pattern match
counts.
Jeff Law [Fri, 18 Jun 2021 22:02:16 +0000 (18:02 -0400)]
[committed] More useless code elimination on the H8
gcc/
* config/h8300/h8300.c (h8300_select_cc_mode): Handle SYMBOL_REF.
* config/h8300/logical.md (<code><mode>3 logcial expander): Generate
more efficient code when the source can be trivially simplified.
Andrew MacLeod [Fri, 18 Jun 2021 16:52:10 +0000 (12:52 -0400)]
Calculate a global definition if one has not been registered.
With poor values gone, Pick up range restrictions from statements
by folding them with global cache values.
* gimple-range-cache.cc (ranger_cache::range_of_def): Calculate
a range if global is not available.
(ranger_cache::entry_range): Fallback to range_of_def.
* gimple-range-cache.h (range_of_def): Adjust prototype.
Andrew MacLeod [Fri, 18 Jun 2021 16:33:18 +0000 (12:33 -0400)]
Remove poor value computations.
Remove the old "poor value" approach which made callbacks into ranger
from the cache. Use only the best available value for all propagation.
PR tree-optimization/101014
* gimple-range-cache.cc (ranger_cache::ranger_cache): Remove poor
value list.
(ranger_cache::~ranger_cache): Ditto.
(ranger_cache::enable_new_values): Delete.
(ranger_cache::push_poor_value): Delete.
(ranger_cache::range_of_def): Remove poor value processing.
(ranger_cache::entry_range): Ditto.
(ranger_cache::fill_block_cache): Ditto.
* gimple-range-cache.h (class ranger_cache): Remove poor value members.
* gimple-range.cc (gimple_ranger::range_of_expr): Remove call.
* gimple-range.h (class gimple_ranger): Adjust.
Antoni Boucher [Fri, 18 Jun 2021 20:49:20 +0000 (16:49 -0400)]
MAINTAINERS: Add myself for write after approval
ChangeLog:
2021-06-18 Antoni Boucher <bouanto@zoho.com>
* MAINTAINERS (Write After Approval): Add myself.
Harald Anlauf [Fri, 18 Jun 2021 17:34:15 +0000 (19:34 +0200)]
Fortran - fix conversion to result type for the min/max intrinsic
gcc/fortran/ChangeLog:
PR fortran/100283
PR fortran/101123
* trans-intrinsic.c (gfc_conv_intrinsic_minmax): Unconditionally
convert result of min/max to result type.
gcc/testsuite/ChangeLog:
PR fortran/100283
PR fortran/101123
* gfortran.dg/min0_max0_1.f90: New test.
* gfortran.dg/min0_max0_2.f90: New test.
David Malcolm [Fri, 18 Jun 2021 17:24:19 +0000 (13:24 -0400)]
analyzer: fix issue with symbolic reads with concrete bindings
gcc/analyzer/ChangeLog:
* store.cc (binding_cluster::get_any_binding): Make symbolic reads
from a cluster with concrete bindings return unknown.
gcc/testsuite/ChangeLog:
* gcc.dg/analyzer/symbolic-7.c: New test.
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
Patrick Palka [Fri, 18 Jun 2021 15:51:33 +0000 (11:51 -0400)]
libstdc++: Implement LWG 3557 change to convertible_to
libstdc++-v3/ChangeLog:
* include/std/concepts (convertible_to): Just use declval as per
LWG 3557.
David Malcolm [Fri, 18 Jun 2021 15:19:30 +0000 (11:19 -0400)]
analyzer: add region_model_manager::get_or_create_int_cst
gcc/analyzer/ChangeLog:
* region-model-manager.cc
(region_model_manager::get_or_create_int_cst): New.
(region_model_manager::maybe_undo_optimize_bit_field_compare): Use
it to simplify away a local tree.
* region-model.cc (region_model::on_setjmp): Likewise.
(region_model::on_longjmp): Likewise.
* region-model.h (region_model_manager::get_or_create_int_cst):
New decl.
* store.cc (binding_cluster::zero_fill_region): Use it to simplify
away a local tree.
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
David Malcolm [Fri, 18 Jun 2021 15:18:10 +0000 (11:18 -0400)]
analyzer: refactor custom_event, introducing precanned_custom_event class
I have followup work where a custom event's description would be better
handled via a vfunc rather that a precanned string, hence this
refactoring to make it easy to add custom_event subclasses.
gcc/analyzer/ChangeLog:
* checker-path.cc (class custom_event): Make abstract to allow for
custom vfuncs, splitting existing implementation into...
(class precanned_custom_event): New subclass.
(custom_event::get_desc): Move to...
(precanned_custom_event::get_desc): ...subclass.
* checker-path.h (class custom_event): Make abstract to allow for
custom vfuncs, splitting existing implementation into...
(class precanned_custom_event): New subclass.
* diagnostic-manager.cc (diagnostic_manager::add_events_for_eedge):
Use precanned_custom_event.
* engine.cc
(stale_jmp_buf::maybe_add_custom_events_for_superedge): Likewise.
* sm-signal.cc (signal_delivery_edge_info_t::add_events_to_path):
Likewise.
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
Jonathan Wakely [Fri, 18 Jun 2021 13:46:58 +0000 (14:46 +0100)]
libstdc++: Replace incorrect static assertion in std::reduce [PR95833]
The standard does not require the iterator's value type to be
convertible to the result type, it only requires that the result of
dereferencing the iterator can be passed to the binary function.
libstdc++-v3/ChangeLog:
PR libstdc++/95833
* include/std/numeric (reduce(Iter, Iter, T, BinaryOp)): Replace
incorrect static_assert with ones matching the 'Mandates'
conditions in the standard.
* testsuite/26_numerics/reduce/95833.cc: New test.
Srinath Parvathaneni [Fri, 18 Jun 2021 12:21:51 +0000 (13:21 +0100)]
arm: Fix multilib mapping for CDE extensions [PR100856].
On passing +cdecp[0-7] extension to the -march string in command line options,
multilib linking is failing as mentioned in PR100856. This patch fixes this issue by
generating a separate canonical string by removing compiler options which are not
required for multilib linking from march string and assign the new string to mlibarch
option. This mlibarch string is used for multilib comparison.
gcc/ChangeLog:
2021-06-10 Srinath Parvathaneni <srinath.parvathaneni@arm.com>
PR target/100856
* common/config/arm/arm-common.c (arm_canon_arch_option_1): New function
derived from arm_canon_arch.
(arm_canon_arch_option): Call it.
(arm_canon_arch_multilib_option): New function.
* config/arm/arm-cpus.in (IGNORE_FOR_MULTILIB): New fgroup.
* config/arm/arm.h (arm_canon_arch_multilib_option): New prototype.
(CANON_ARCH_MULTILIB_SPEC_FUNCTION): New macro.
(MULTILIB_ARCH_CANONICAL_SPECS): New macro.
(DRIVER_SELF_SPECS): Add MULTILIB_ARCH_CANONICAL_SPECS.
* config/arm/arm.opt (mlibarch): New option.
* config/arm/t-rmprofile (MULTILIB_MATCHES): For armv8*-m, replace use
of march on RHS with mlibarch.
gcc/testsuite/ChangeLog:
2021-06-10 Srinath Parvathaneni <srinath.parvathaneni@arm.com>
PR target/100856
* gcc.target/arm/acle/pr100856.c: New test.
* gcc.target/arm/multilib.exp: Add tests for cde options.
Marcel Vollweiler [Fri, 18 Jun 2021 11:50:36 +0000 (04:50 -0700)]
gcc/configure.ac: fix register issue for global_load assembler functions
gcc/ChangeLog:
* config.in: Regenerate.
* config/gcn/gcn.c (print_operand_address): Fix for global_load assembler
functions.
* configure: Regenerate.
* configure.ac: Fix for global_load assembler functions.
Richard Biener [Fri, 18 Jun 2021 10:20:22 +0000 (12:20 +0200)]
tree-optimization/101112 - fix pattern stmt def lookup in SLP reassoc
This fixes the lookup of a pattern stmt def operand.
2021-06-18 Richard Biener <rguenther@suse.de>
PR tree-optimization/101112
* tree-vect-slp.c (vect_slp_linearize_chain): Fix condition
to lookup a pattern stmt def.
Jonathan Wakely [Fri, 18 Jun 2021 10:08:19 +0000 (11:08 +0100)]
libstdc++: Suppress -Wstringop-overread warning in test
When compiled with -m32 -O2 -D_GLIBCXX_USE_CXX11_ABI=0 we get a warning
for 21_strings/basic_string/cons/char/1.cc:
bits/char_traits.h:409:56: warning: ‘void* __builtin_memcpy(void*, const void*, unsigned int)’ reading
1073741821 bytes from a region of size 19 [-Wstringop-overread]
The warning is legitimate, even if that line cannot be reached because
we throw std::length_error before getting there. Since the invalid
length is deliberate (and mentioned in a comment) just suppress the
warning, so that the test can verify we get the exception.
Also remove an unused typedef that produces another warning.
libstdc++-v3/ChangeLog:
* testsuite/21_strings/basic_string/cons/char/1.cc: Use
diagnostic pragma to suppress -Wstringop-overread error.
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
Jakub Jelinek [Fri, 18 Jun 2021 09:20:40 +0000 (11:20 +0200)]
stor-layout: Don't create DECL_BIT_FIELD_REPRESENTATIVE for QUAL_UNION_TYPE [PR101062]
> The following patch does create them, but treats all such bitfields as if
> they were in a structure where the particular bitfield is the only field.
While the patch passed bootstrap/regtest on the trunk, when trying to
backport it to 11 branch the bootstrap failed with
atree.ads:3844:34: size for "Node_Record" too small
errors. Turns out the error is not about size being too small, but actually
about size being non-constant, and comes from:
/* In a FIELD_DECL of a RECORD_TYPE, this is a pointer to the storage
representative FIELD_DECL. */
#define DECL_BIT_FIELD_REPRESENTATIVE(NODE) \
(FIELD_DECL_CHECK (NODE)->field_decl.qualifier)
/* For a FIELD_DECL in a QUAL_UNION_TYPE, records the expression, which
if nonzero, indicates that the field occupies the type. */
#define DECL_QUALIFIER(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.qualifier)
so by setting up DECL_BIT_FIELD_REPRESENTATIVE in QUAL_UNION_TYPE we
actually set or modify DECL_QUALIFIER and then construct size as COND_EXPRs
with those bit field representatives (e.g. with array type) as conditions
which doesn't fold into constant.
The following patch fixes it by not creating DECL_BIT_FIELD_REPRESENTATIVEs
for QUAL_UNION_TYPE as there is nowhere to store them,
Shall we change tree.h to document that DECL_BIT_FIELD_REPRESENTATIVE
is valid also on UNION_TYPE?
I see:
tree-ssa-alias.c- if (TREE_CODE (type1) == RECORD_TYPE
tree-ssa-alias.c: && DECL_BIT_FIELD_REPRESENTATIVE (field1))
tree-ssa-alias.c: field1 = DECL_BIT_FIELD_REPRESENTATIVE (field1);
tree-ssa-alias.c- if (TREE_CODE (type2) == RECORD_TYPE
tree-ssa-alias.c: && DECL_BIT_FIELD_REPRESENTATIVE (field2))
tree-ssa-alias.c: field2 = DECL_BIT_FIELD_REPRESENTATIVE (field2);
Shall we change that to || == UNION_TYPE or do we assume all fields
are overlapping in a UNION_TYPE already?
At other spots (asan, ubsan, expr.c) it is unclear what will happen
if they see a QUAL_UNION_TYPE with a DECL_QUALIFIER (or does the Ada FE
lower that somehow)?
2021-06-18 Jakub Jelinek <jakub@redhat.com>
PR middle-end/101062
* stor-layout.c (finish_bitfield_layout): Don't add bitfield
representatives in QUAL_UNION_TYPE.
Gary Dismukes [Tue, 23 Mar 2021 23:03:23 +0000 (19:03 -0400)]
[Ada] Additional error checking on index constraints with fixed-lower-bound ranges
gcc/ada/
* sem_ch3.adb (Constrain_Array): Add error checking for
fixed-lower-bound and constrained index ranges applied
inappropriately on subtypes of unconstrained and
fixed-lower-bound array types.
(Constrain_Index): Correct and refine comment related to
fixed-lower-bound index ranges.
Bob Duff [Tue, 23 Mar 2021 20:00:03 +0000 (16:00 -0400)]
[Ada] Minor comment cleanups
gcc/ada/
* gen_il-gen.adb: Improve comments.
* snames.ads-tmpl (Convention_Id): Remove "-- Plenty of space
for expansion", because that's irrelevant now that we are no
longer laying out node fields by hand.
Piotr Trojanek [Tue, 23 Mar 2021 00:11:57 +0000 (01:11 +0100)]
[Ada] Fix detection of overlapping slices indexed by characters
gcc/ada/
* sem_util.adb (Denotes_Same_Object): Handle character literals
just like integer literals.
Piotr Trojanek [Tue, 23 Mar 2021 00:00:50 +0000 (01:00 +0100)]
[Ada] Fix detection of overlapping actuals with renamings
gcc/ada/
* sem_util.adb (Denotes_Same_Object): Explicitly test for node
kinds being the same; deal with renamings one-by-one; adjust
numbers in references to the Ada RM.
Bob Duff [Mon, 22 Mar 2021 20:22:49 +0000 (16:22 -0400)]
[Ada] Make "gcc -gnatDGL" handle unterminated last lines properly
gcc/ada/
* sprint.adb (Write_Source_Line): Check for EOF in
Line_Terminator loop. Note that when a source file is read in,
an EOF character is added to the end.
Piotr Trojanek [Mon, 22 Mar 2021 14:38:34 +0000 (15:38 +0100)]
[Ada] Reuse Package_Specification in Is_Incomplete_Or_Private_Type
gcc/ada/
* sem_aux.adb (Package_Specification): Add assertions to confirm
the kind of the of parameter and returned node.
* sem_ch12.adb (Remove_Parent): Reorder conditions; this change
appears to be semantically neutral, but is enough to avoid the
problematic call to Package_Specification.
* sem_util.adb (Is_Incomplete_Or_Private_Type): Replace loop
with a call to Package_Specification.