Ed Schonberg [Mon, 8 Jul 2019 08:12:46 +0000 (08:12 +0000)]
[Ada] Spurious visibility error on dynamic_predicate aspect in generic
This patch fixes a spurious error when verifying that the visibility of
the expression of an aspect has not changed between the freeze point of
the entity to which it applies, and the end of the enclosing declarative
part. If the entity is a composite type its components must be made
directly visible for the analysis of the expression. In a generic
context this must be done explicitly at the end of the declarative part.
2019-07-08 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch13.adb (Check_Aspect_At_End_Of_Declarations): For an
unanalized aspect in a generic context that has not been
analyzed yet, if the aspect applies to a type, place the type on
the scope stack to make its components visible, before checking
conformance with the version of the expression analyzed at the
freeze point.
gcc/testsuite/
* gnat.dg/predicate8.adb, gnat.dg/predicate8_pkg.adb,
gnat.dg/predicate8_pkg.ads: New testcase.
From-SVN: r273197
Kito Cheng [Mon, 8 Jul 2019 07:31:21 +0000 (07:31 +0000)]
Add myself to MAINTAINERS (Write After Approval)
From-SVN: r273195
Richard Biener [Mon, 8 Jul 2019 07:09:24 +0000 (07:09 +0000)]
re PR tree-optimization/83518 (Missing optimization: useless instructions should be dropped)
2019-07-08 Richard Biener <rguenther@suse.de>
PR tree-optimization/83518
* tree-ssa-sccvn.c: Include splay-tree.h.
(struct pd_range, struct pd_data): New.
(struct vn_walk_cb_data): Add data to track partial definitions.
(vn_walk_cb_data::~vn_walk_cb_data): New.
(vn_walk_cb_data::push_partial_def): New.
(pd_tree_alloc, pd_tree_dealloc, pd_range_compare): New.
(vn_reference_lookup_2): When partial defs are registered give up.
(vn_reference_lookup_3): Track partial defs for memset and
constructor zeroing and for defs from constants.
* gcc.dg/tree-ssa/ssa-fre-73.c: New testcase.
* gcc.dg/tree-ssa/ssa-fre-74.c: Likewise.
* gcc.dg/tree-ssa/ssa-fre-75.c: Likewise.
* gcc.dg/tree-ssa/ssa-fre-76.c: Likewise.
* g++.dg/tree-ssa/pr83518.C: Likewise.
From-SVN: r273194
Richard Sandiford [Mon, 8 Jul 2019 06:21:11 +0000 (06:21 +0000)]
Add a build config for bootstrapping at -Og
Although BOOT_CFLAGS can be used to bootstrap with -Og, having a
dedicated build config is sometimes more convenient.
2019-07-08 Richard Sandiford <richard.sandiford@arm.com>
config/
* bootstrap-Og.mk: New file.
gcc/
* doc/install.texi (bootstrap-Og): Document.
From-SVN: r273193
Richard Sandiford [Mon, 8 Jul 2019 06:21:05 +0000 (06:21 +0000)]
Make guality.h handle Yama restricted ptrace mode
guality.exp is silently skipped on Linux systems with
kernel.yama.ptrace_scope=1 because gdb fails to attach to the
sanity check test. This patch uses PR_SET_PTRACER (where available)
to avoid this.
prctl was apparently added in Linux 2.1.57, so I don't think we
need any tests other than __linux for the #include.
2019-07-08 Richard Sandiford <richard.sandiford@arm.com>
gcc/testsuite/
* gcc.dg/guality/guality.h: Include <sys/prctl.h> on Linux targets.
(main): Use PR_SET_PTRACER where available.
From-SVN: r273192
Richard Sandiford [Mon, 8 Jul 2019 06:20:55 +0000 (06:20 +0000)]
[riscv] Fix ambiguous .md attribute uses
This patch is part of a series that fixes ambiguous attribute
uses in .md files, i.e. cases in which attributes didn't use
<ITER:ATTR> to specify an iterator, and in which <ATTR> could
have different values depending on the iterator chosen.
No behavioural change -- produces the same code as before.
2019-07-08 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/riscv/pic.md (*local_pic_load_s<mode>)
(*local_pic_load_u<mode>): Explicitly specify the mode iterator
referenced by <mode>, giving...
(*local_pic_load_s<SUBX:mode>, *local_pic_load_u<SUBX:mode>): ...these.
* config/riscv/riscv.md (*sge<u>_<X:mode><GPR:mode>)
(*slt<u>_<X:mode><GPR:mode>, *sle<u>_<X:mode><GPR:mode>): Explicitly
use <X:MODE> for the mode attribute.
From-SVN: r273191
GCC Administrator [Mon, 8 Jul 2019 00:16:22 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r273190
Jeff Law [Sun, 7 Jul 2019 18:42:45 +0000 (12:42 -0600)]
re PR tree-optimization/91090 (A suspicious code in tree-ssa-dom.c)
PR tree-optimization/91090
* tree-ssa-dom.c (simplify_stmt_for_jump_threading): Fix logic error
in handling of ranges to simplify switch statements.
From-SVN: r273184
Segher Boessenkool [Sun, 7 Jul 2019 16:37:36 +0000 (18:37 +0200)]
rs6000: Delete Ffre
It is unused.
* config/rs6000/rs6000.md (Ffre): Delete.
From-SVN: r273182
Iain Sandoe [Sun, 7 Jul 2019 16:34:15 +0000 (16:34 +0000)]
[Darwin] Make a final check on PIC options.
Final check on PCI options; for Darwin these are not dependent on the PIE
ones, although PIE does require PIC to support it. Specifically, for Darwin,
"fPIC fno-PIE" should result in the same as "-fno-PIE -fPIC".
2019-07-07 Iain Sandoe <iain@sandoe.co.uk>
* config/darwin.c (darwin_override_options): Make a final check on PIC
options.
From-SVN: r273181
Iain Sandoe [Sun, 7 Jul 2019 16:29:32 +0000 (16:29 +0000)]
[Darwin] Don't jam symbol stubs on for kernel code.
For PPC Darwin, we need the JBSR long jump code to be enabled when generating
kernel code. Now we have that handled in rs6000.c, we can drop the conflated
setting in the common code. Symbol stubs are not generated for any X86 case.
2019-07-07 Iain Sandoe <iain@sandoe.co.uk>
* config/darwin.c (darwin_override_options): Don't jam symbol stubs
on for kernel code.
From-SVN: r273180
Paul Thomas [Sun, 7 Jul 2019 10:53:37 +0000 (10:53 +0000)]
re PR fortran/91077 (Wrong indexing when using a pointer)
2019-07-07 Paul Thomas <pault@gcc.gnu.org>
PR fortran/91077
* trans-array.c (gfc_conv_scalarized_array_ref) Delete code
that gave symbol backend decl for subref arrays and deferred
length variables.
2019-07-07 Paul Thomas <pault@gcc.gnu.org>
PR fortran/91077
* gfortran.dg/pointer_array_11.f90 : New test.
From-SVN: r273176
Richard Sandiford [Sun, 7 Jul 2019 09:49:24 +0000 (09:49 +0000)]
PR91068: Fix MIPS fallout from IRA matched operand changes
PR91068 is a case in which we have (ignoring non-LRA alternatives):
[(set (match_operand:SI 0 "register_operand" "=l,d?")
(plus:SI (mult:SI (match_operand:SI 1 "register_operand" "d,d")
(match_operand:SI 2 "register_operand" "d,d"))
(match_operand:SI 3 "register_operand" "0,d")))
(clobber (match_scratch:SI 4 "=X,l"))
(clobber (match_scratch:SI 5 "=X,&d"))]
where the first alternative is one instruction but the second is two.
This is very similar to the case that my recent IRA patches were
supposed to help. The crucial difference is that the cheap
alternative requires a single-register class while the expensive
alternative uses general registers.
This makes a difference when one of operand 0 or 3 can naturally be
allocated to LO but the other can't. If IRA makes that allocation,
both alternatives require one reload of equal cost and so the first
alternative clearly wins.
However, if we say that tying operands 0 and 3 saves the cost of a full
move, then all other things being equal, IRA will prefer to allocate
both registers to the same GPR. The registers will then naturally
fit the second alternative.
This has a more drastic effect in the MIPS case than it should because
using the GPR alternative is much more expensive there than it appears
to the RA. But that's really a separate problem and something we were
able to live with before my IRA patch.
What makes tying less useful here is the fact that the tied register is
a single-register class. I think in those circumstances it's better not
to use tied operands at all and instead use "l" for the inputs.
Allocating the input to LO, and allocating the output to LO, then depend
naturally on class costs. If we decide to allocate at least one of them
to LO, we'll use the cheap alternative, otherwise we'll (correctly) use
the expensive alternative. This effectively restores the situation
before my IRA patch, but this time making the preference on the input
register more explicit.
I originally wrote the patterns in the early days of IRA, and certainly
well before LRA. I think they were largely influened by reload rather
than RA proper (see the comment above *mul_acc_si, which is all about
the reload behaviour). LRA copes with the two-"l" case just fine.
The patch may well cause problems for -mno-lra, but I think we should
cull that option anyway.
2019-07-07 Richard Sandiford <richard.sandiford@arm.com>
gcc/
PR target/91068
* config/mips/mips.md (*mul_acc_si, *mul_acc_si_r3900, *macc)
(*msac, *msac_using_macc, *mul_sub_si): Use "l" for input operands
instead of matching them to "l" output operands.
From-SVN: r273175
Richard Sandiford [Sun, 7 Jul 2019 09:49:14 +0000 (09:49 +0000)]
Fix uninitialised use in mips_split_move
While testing the fix for PR91068, I hit an rtl checking failure
while building newlib. mips_split_move was decomposing an address that
happened to be symbolic and then tried to access the REGNO of the base
register field, which wasn't initialised but which by chance pointed to
valid memory.
2019-07-07 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/mips/mips.c (mips_split_move): Zero-initialize addr
and check whether addr.reg is nonnull before using it.
From-SVN: r273174
GCC Administrator [Sun, 7 Jul 2019 00:16:21 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r273173
Jakub Jelinek [Sat, 6 Jul 2019 21:58:01 +0000 (23:58 +0200)]
omp-low.c (lower_rec_input_clauses): For lastprivate clauses in ctx->for_simd_scan_phase simd copy the outer var to...
* omp-low.c (lower_rec_input_clauses): For lastprivate clauses in
ctx->for_simd_scan_phase simd copy the outer var to the privatized
variable(s). For conditional lastprivate look through outer
GIMPLE_OMP_SCAN context.
(lower_omp_1): For conditional lastprivate look through outer
GIMPLE_OMP_SCAN context.
* testsuite/libgomp.c/scan-19.c: New test.
* testsuite/libgomp.c/scan-20.c: New test.
From-SVN: r273169
Jakub Jelinek [Sat, 6 Jul 2019 21:56:46 +0000 (23:56 +0200)]
omp-low.c (struct omp_context): Rename combined_into_simd_safelen0 member to combined_into_simd_safelen1.
* omp-low.c (struct omp_context): Rename combined_into_simd_safelen0
member to combined_into_simd_safelen1.
(lower_rec_input_clauses, lower_omp_1): Adjust uses.
(lower_lastprivate_clauses): Likewise. For conditional lastprivate
clauses if ctx->combined_into_simd_safelen1 put statements after the
predicate conditionalized block rather than into it.
From-SVN: r273168
Jonathan Wakely [Sat, 6 Jul 2019 21:16:38 +0000 (22:16 +0100)]
Fix recent regression in __atomic_add_dispatch
* include/ext/atomicity.h (__exchange_and_add, __atomic_add): Replace
throw() with _GLIBCXX_NOTHROW.
(__atomic_add_dispatch): Return after performing atomic increment.
From-SVN: r273167
Richard Sandiford [Sat, 6 Jul 2019 08:26:44 +0000 (08:26 +0000)]
[s390] Fix ambiguous .md attribute uses
This patch is part of a series that fixes ambiguous attribute
uses in .md files, i.e. cases in which attributes didn't use
<ITER:ATTR> to specify an iterator, and in which <ATTR> could
have different values depending on the iterator chosen.
The vx-builtins.md part changes the choice of <mode> from the
implicit <VFCMP:mode> to an explicit <VF_HW:mode> (i.e. from the
mode of the comparison result to the mode of the operands being
compared). That seemed like the intended behaviour given later
patterns like vec_cmpeq<mode>_cc.
The use of BFP in the s390.md LNDFR pattern looks like a typo,
since the operand to (abs ...) has to have the same mode as the result.
The only effect before this series was to create some extra variants
that would never match, making it harmless apart from very minor code
bloat.
2019-07-06 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/s390/s390.md (*negabs<FP:mode>2_nocc): Use FP for
operand 1.
* config/s390/vx-builtins.md (*vec_cmp<insn_cmp><mode>_cconly):
Make the choice of <mode> explicit, giving...
(*vec_cmp<insn_cmp><VF_HW:mode>_cconly): ...this.
From-SVN: r273162
Richard Sandiford [Sat, 6 Jul 2019 08:26:33 +0000 (08:26 +0000)]
[i386] Fix ambiguous .md attribute uses
This patch is part of a series that fixes ambiguous attribute
uses in .md files, i.e. cases in which attributes didn't use
<ITER:ATTR> to specify an iterator, and in which <ATTR> could
have different values depending on the iterator chosen.
No behavioural change except for dropping the unused *andnot<mode>3_bcst
permutations.
2019-07-06 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/i386/i386.md (*fop_<X87MODEF:mode>_3_i387)
(l<rounding_insn><MODEF:mode><SWI48:mode>2): Fix ambiguous uses
of .md attributes.
* config/i386/sse.md (*avx512pf_gatherpf<mode>sf_mask)
(*avx512pf_gatherpf<mode>df_mask, *avx512pf_scatterpf<mode>sf_mask)
(*avx512pf_scatterpf<mode>df_mask, *avx2_gathersi<mode>)
(*avx2_gathersi<mode>_2, *avx2_gatherdi<mode>)
(*avx2_gatherdi<mode>_2, *avx2_gatherdi<mode>_3): Likewise.
(*avx2_gatherdi<mode>_4, *avx512f_gathersi<mode>): Likewise.
(*avx512f_gathersi<mode>_2, *avx512f_gatherdi<mode>): Likewise.
(*avx512f_gatherdi<mode>_2, *avx512f_scattersi<mode>): Likewise.
(*avx512f_scatterdi<mode>): Likewise.
(*andnot<mode>3_bcst): Fix VI/VI48_AVX512VL typo.
From-SVN: r273161
Richard Sandiford [Sat, 6 Jul 2019 08:26:11 +0000 (08:26 +0000)]
[h8300] Fix ambiguous .md attribute uses
This patch is part of a series that fixes ambiguous attribute
uses in .md files, i.e. cases in which attributes didn't use
<ITER:ATTR> to specify an iterator, and in which <ATTR> could
have different values depending on the iterator chosen.
No behavioural change -- produces the same code as before.
2019-07-06 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/h8300/h8300.md (*push1_h8300hs_<mode>): Explicitly
specify the mode iterator referenced by <mode>, giving...
(*push1_h8300hs_<QHI:mode>): ...this.
From-SVN: r273160
Richard Sandiford [Sat, 6 Jul 2019 08:26:02 +0000 (08:26 +0000)]
[amdgcn] Fix ambiguous .md attribute uses
This patch is part of a series that fixes ambiguous attribute
uses in .md files, i.e. cases in which attributes didn't use
<ITER:ATTR> to specify an iterator, and in which <ATTR> could
have different values depending on the iterator chosen.
I think this is a genuine bugfix for the case in which the 1REG_MODE
and 1REG_ALT are different, since previously we would use the 1REG_MODE
for both the comparison and the select, even though the operands being
compared are 1REG_ALT rather than 1REG_MODE.
2019-07-06 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/gcn/gcn-valu.md
(vcond<VEC_1REG_MODE:mode><VEC_1REG_ALT:mode>): Use
gen_vec_cmp<VEC_1REG_ALT:mode>di rather than (implicitly)
gen_vec_cmp<VEC_1REG_MODE:mode>di. Explicitly use
gen_vcond_mask_<VEC_1REG_MODE:mode>di.
(vcond<VEC_1REG_MODE:mode><VEC_1REG_ALT:mode>_exec): Likewise,
but using the _exec comparison patterns.
(vcondu<VEC_1REG_INT_MODE:mode><VEC_1REG_INT_ALT:mode>): Use
gen_vec_cmp<VEC_1REG_INT_ALT:mode>di rather than (implicitly)
gen_vec_cmp<VEC_1REG_INT_MODE:mode>di. Explicitly use
gen_vcond_mask_<VEC_1REG_INT_MODE:mode>di.
(vcondu<VEC_1REG_INT_MODE:mode><VEC_1REG_INT_ALT:mode>_exec): Likewise,
but using the _exec comparison patterns.
From-SVN: r273159
Richard Sandiford [Sat, 6 Jul 2019 08:25:26 +0000 (08:25 +0000)]
[arm] Fix ambiguous .md attribute uses
This patch is part of a series that fixes ambiguous attribute
uses in .md files, i.e. cases in which attributes didn't use
<ITER:ATTR> to specify an iterator, and in which <ATTR> could
have different values depending on the iterator chosen.
I think this is a genuine bugfix for Thumb-1, since previously the
LDREX width was taken from the SImode success result rather than the
memory mode:
-#define HAVE_atomic_compare_and_swapt1qi_1 ((TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER) && (TARGET_THUMB1))
-#define HAVE_atomic_compare_and_swapt1hi_1 ((TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER) && (TARGET_THUMB1))
-#define HAVE_atomic_compare_and_swapt1di_1 ((TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER) && (TARGET_THUMB1))
+#define HAVE_atomic_compare_and_swapt1qi_1 ((TARGET_HAVE_LDREXBH && TARGET_HAVE_MEMORY_BARRIER) && (TARGET_THUMB1))
+#define HAVE_atomic_compare_and_swapt1hi_1 ((TARGET_HAVE_LDREXBH && TARGET_HAVE_MEMORY_BARRIER) && (TARGET_THUMB1))
+#define HAVE_atomic_compare_and_swapt1di_1 ((TARGET_HAVE_LDREXD && ARM_DOUBLEWORD_ALIGN \
+ && TARGET_HAVE_MEMORY_BARRIER) && (TARGET_THUMB1))
The same goes for the predicate and constraints in
@atomic_compare_and_swapt1di_1, which previously used the
SI values from the success result.
2019-07-06 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/arm/sync.md
(@atomic_compare_and_swap<CCSI:arch><NARROW:mode>_1): Use
<NARROW:sync_predtab> instead of (implicitly) <CCSI:sync_predtab>.
(@atomic_compare_and_swap<CCSI:arch><SIDI:mode>_1): Likewise
<SIDI:sync_predtab>. Use <SIDI:cas_cmp_operand> and
<SIDI:cas_cmp_str>.
From-SVN: r273158
Jakub Jelinek [Sat, 6 Jul 2019 07:53:48 +0000 (09:53 +0200)]
omp-low.c (struct omp_context): Add for_simd_scan_phase member.
* omp-low.c (struct omp_context): Add for_simd_scan_phase member.
(maybe_lookup_ctx): Add forward declaration.
(omp_find_scan): Likewise. Walk into body of simd if composited
with worksharing loop.
(scan_omp_simd_scan): New function.
(scan_omp_1_stmt): Call it.
(lower_rec_simd_input_clauses): Don't create rvar nor rvar2 if
ctx->for_simd_scan_phase.
(lower_rec_input_clauses): Do much less work for inscan reductions
in ctx->for_simd_scan_phase is_simd regions.
(lower_omp_scan): Set is_simd also on simd constructs composited
with worksharing loop, unless ctx->for_simd_scan_phase. Never emit
a sorry message. Don't change GIMPLE_OMP_SCAN stmts into nops and
emit their body after in simd constructs composited with worksharing
loop.
(lower_omp_for_scan): Handle worksharing loop composited with simd.
* c-c++-common/gomp/scan-4.c: Don't expect sorry message.
* testsuite/libgomp.c/scan-11.c: New test.
* testsuite/libgomp.c/scan-12.c: New test.
* testsuite/libgomp.c/scan-13.c: New test.
* testsuite/libgomp.c/scan-14.c: New test.
* testsuite/libgomp.c/scan-15.c: New test.
* testsuite/libgomp.c/scan-16.c: New test.
* testsuite/libgomp.c/scan-17.c: New test.
* testsuite/libgomp.c/scan-18.c: New test.
* testsuite/libgomp.c++/scan-9.C: New test.
* testsuite/libgomp.c++/scan-10.C: New test.
* testsuite/libgomp.c++/scan-11.C: New test.
* testsuite/libgomp.c++/scan-12.C: New test.
* testsuite/libgomp.c++/scan-13.C: New test.
* testsuite/libgomp.c++/scan-14.C: New test.
* testsuite/libgomp.c++/scan-15.C: New test.
* testsuite/libgomp.c++/scan-16.C: New test.
From-SVN: r273157
Jakub Jelinek [Sat, 6 Jul 2019 07:50:44 +0000 (09:50 +0200)]
re PR tree-optimization/91096 (Openmp vector max reduction incorrect)
PR tree-optimization/91096
* gcc.dg/vect/vect-simd-10.c (FLT_MIN_VALUE): Define.
(bar, main): Use it instead of -__builtin_inff ().
* gcc.dg/vect/vect-simd-14.c (FLT_MIN_VALUE): Define.
(bar, main): Use it instead of -__builtin_inff ().
From-SVN: r273156
Jakub Jelinek [Sat, 6 Jul 2019 07:49:59 +0000 (09:49 +0200)]
omp-low.c (omp_find_scan): Make static.
* omp-low.c (omp_find_scan): Make static.
(lower_omp_for_scan): Fix order of merge arguments in input phase of
the second loop, var2 represents the first partial sum and so needs
to go before rprivb[ivar].
From-SVN: r273155
GCC Administrator [Sat, 6 Jul 2019 00:16:36 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r273154
Jakub Jelinek [Fri, 5 Jul 2019 20:51:44 +0000 (22:51 +0200)]
re PR c++/67184 (Missed optimization with C++11 final specifier)
PR c++/67184
PR c++/69445
* call.c (build_new_method_call_1): Remove set but not used variable
binfo.
From-SVN: r273149
Iain Sandoe [Fri, 5 Jul 2019 18:26:26 +0000 (18:26 +0000)]
[Darwin.PPC] Remove dead code.
TARGET_LINK_STACK is unused on Darwin, and only relevant to a processor on
which the port was never released.
2019-07-05 Iain Sandoe <iain@sandoe.co.uk>
* config/rs6000/rs6000-logue.c: Remove unused code.
From-SVN: r273148
Paolo Carlini [Fri, 5 Jul 2019 18:03:05 +0000 (18:03 +0000)]
PR c++/67184 (again)
/cp
2019-07-05 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/67184 (again)
PR c++/69445
* call.c (build_over_call): Devirtualize user-defined operators
coming from a base too.
(build_new_method_call_1): Do not devirtualize here.
/testsuite
2019-07-05 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/67184 (again)
PR c++/69445
* g++.dg/other/final4.C: New.
From-SVN: r273147
Eric Botcazou [Fri, 5 Jul 2019 17:38:28 +0000 (17:38 +0000)]
* tree-ssa-loop-manip.c (create_iv): Add missing guard for gsi_end_p.
From-SVN: r273145
Jonathan Wakely [Fri, 5 Jul 2019 16:10:47 +0000 (17:10 +0100)]
Fix ODR violations in code using <ext/atomicity.h>
Because the inline versions of __exchange_and_add and __atomic_add are
also marked static, they cannot be used from templates or other inline
functions without ODR violations. This change gives them external
linkage, but adds the always_inline attribute.
* include/ext/atomicity.h [_GLIBCXX_ATOMIC_BUILTINS] (__atomic_add)
(__exchange_and_add): Replace static specifier with always_inline
attribute.
(__exchange_and_add_single, __atomic_add_single): Likewise.
(__exchange_and_add_dispatch, __atomic_add_dispatch): Likewise. Also
combine !__gthread_active_p() and !__GTHREADS branches.
From-SVN: r273144
Andrew Stubbs [Fri, 5 Jul 2019 16:00:46 +0000 (16:00 +0000)]
Tweak error message for mapped parameters.
2019-07-05 Andrew Stubbs <ams@codesourcery.com>
gcc/fortran/
* openmp.c (resolve_omp_clauses): Add custom error messages for
parameters in map clauses.
From-SVN: r273143
Marek Polacek [Fri, 5 Jul 2019 14:45:30 +0000 (14:45 +0000)]
DR 1813 PR c++/83374 - __is_standard_layout wrong for a class with repeated bases.
DR 1813
PR c++/83374 - __is_standard_layout wrong for a class with repeated bases.
* class.c (check_bases): Set CLASSTYPE_NON_STD_LAYOUT for a class if
CLASSTYPE_REPEATED_BASE_P is true.
* g++.dg/ext/is_std_layout3.C: New test.
* g++.dg/ext/is_std_layout4.C: New test.
From-SVN: r273139
Sam Tebbs [Fri, 5 Jul 2019 13:16:55 +0000 (13:16 +0000)]
[PATCH][GCC][AARCH64] PR target/90712 Fix gcc.dg/rtl/aarch64/subs_adds_sp.c regression
gcc/
2019-07-05 Sam Tebbs <sam.tebbs@arm.com>
PR target/90712
* aarch64/aarch64.c (aarch64_post_cfi_startproc): Replace thunk check
with a frame laid out check.
From-SVN: r273138
Richard Biener [Fri, 5 Jul 2019 12:53:19 +0000 (12:53 +0000)]
tree-ssa-sccvn.c (vn_reference_lookup_3): Valueize RHS when comparing against a store with possibly the same value.
2019-07-05 Richard Biener <rguenther@suse.de>
* tree-ssa-sccvn.c (vn_reference_lookup_3): Valueize RHS
when comparing against a store with possibly the same value.
* gcc.dg/tree-ssa/ssa-fre-77.c: New testcase.
From-SVN: r273136
Richard Biener [Fri, 5 Jul 2019 12:50:45 +0000 (12:50 +0000)]
re PR tree-optimization/91091 ([missed optimization] Missing optimization in unaliased pointers)
2019-07-05 Richard Biener <rguenther@suse.de>
PR tree-optimization/91091
* tree-ssa-alias.h (get_continuation_for_phi): Add tbaa_p parameter.
(walk_non_aliased_vuses): Likewise.
* tree-ssa-alias.c (maybe_skip_until): Pass down tbaa_p.
(get_continuation_for_phi): New tbaa_p parameter and pass
it down.
(walk_non_aliased_vuses): Likewise.
* ipa-prop.c (determine_known_aggregate_parts): Adjust.
* tree-ssa-pre.c (translate_vuse_through_block): Likewise.
* tree-ssa-scopedtables.c (avail_exprs_stack::lookup_avail_expr):
Likewise.
* tree-ssa-sccvn.c (struct vn_walk_cb_data): Add tbaa_p flag.
(adjust_offsets_for_equal_base_address): New function.
(vn_reference_lookup_3): Use it to catch more base equivalences.
Handle and pass down tbaa_p flag.
(vn_reference_lookup_pieces): Adjust.
(vn_reference_lookup): Remove alias-set altering, instead pass
down false as tbaa_p.
* gcc.dg/tree-ssa/pr91091-2.c: New testcase.
* gcc.dg/tree-ssa/ssa-fre-70.c: Likewise.
* gcc.dg/tree-ssa/ssa-fre-71.c: Likewise.
* gcc.dg/tree-ssa/ssa-fre-72.c: Likewise.
From-SVN: r273135
Richard Biener [Fri, 5 Jul 2019 12:48:42 +0000 (12:48 +0000)]
re PR tree-optimization/91091 ([missed optimization] Missing optimization in unaliased pointers)
2019-07-05 Richard Biener <rguenther@suse.de>
PR tree-optimization/91091
* tree-ssa-sccvn.c (vn_reference_lookup_3): Overlap of
accesses can happen with -fno-strict-aliasing.
* gcc.dg/tree-ssa/pr91091-1.c: New testcase.
* gcc.dg/tree-ssa/ssa-fre-61.c: Adjust.
From-SVN: r273134
Jan Hubicka [Fri, 5 Jul 2019 09:25:45 +0000 (11:25 +0200)]
tree-ssa-alias.c (alias_stats): Add nonoverlapping_component_refs_since_match_p_must_overlap.
* tree-ssa-alias.c (alias_stats): Add
nonoverlapping_component_refs_since_match_p_must_overlap.
(dump_alias_stats): Print it.
(nonoverlapping_component_refs_since_match_p): Add early exit.
(nonoverlapping_component_refs_p): Do not account early exit.
From-SVN: r273133
Eric Botcazou [Fri, 5 Jul 2019 08:39:13 +0000 (08:39 +0000)]
except.c (emit_to_new_bb_before): Make sure to put a location on SEQ.
* except.c (emit_to_new_bb_before): Make sure to put a location on SEQ.
* tree-eh.c (replace_goto_queue_1) <GIMPLE_GOTO>: Propagate location.
(emit_eh_dispatch): Delete.
(lower_catch): Emit the eh_dispatch manually and set the location of
the first catch statement onto it.
(lower_eh_filter): Emit the eh_dispatch manually and set location.
(lower_eh_dispatch): Propagate location.
* tree-outof-ssa.c (set_location_for_edge): Handle EH edges specially.
(eliminate_build): Likewise.
From-SVN: r273132
Eric Botcazou [Fri, 5 Jul 2019 08:28:36 +0000 (08:28 +0000)]
tree-cfg.c (gimple_make_forwarder_block): Propagate location info on phi nodes if possible.
* tree-cfg.c (gimple_make_forwarder_block): Propagate location info on
phi nodes if possible.
* tree-scalar-evolution.c (final_value_replacement_loop): Propagate
location info on the newly created statement.
* tree-ssa-loop-manip.c (create_iv): Propagate location info on the
newly created increment if needed.
From-SVN: r273131
Justin Squirek [Fri, 5 Jul 2019 07:03:58 +0000 (07:03 +0000)]
[Ada] Incorrect accessibility check
This patch fixes an issue whereby anonymous access result types were
treated as having the same accessibility level as typed results instead
of having the level determined by the "master of the call" as per RM
3.10.2 (10).
------------
-- Source --
------------
-- main.adb
with Pack_12; use Pack_12;
with Pack_05; use Pack_05;
procedure Main is
Obj : aliased Integer;
begin
Test_Alloc
(new Rec_T'(Disc => Id_A (Obj'Access))); -- OK
Id_A (Obj'Access).all := 0; -- OK
Id_B (Obj'Access).all := 0; -- OK
Id_C (Obj'Access).all := 0; -- ERROR
end Main;
-- pack_12.ads
pragma Ada_2012;
with Ada.Unchecked_Conversion;
package Pack_12 is
function Id_A (I : access Integer)
return access Integer
is (I);
type Obj_Ptr is access all Integer;
function Id_C (I : access Integer)
return Obj_Ptr
is (I.all'Access);
type Rec_T (Disc : access Integer) is null record;
procedure Test_Alloc (Access_Param : access Rec_T);
end Pack_12;
-- pack_12.adb
package body Pack_12 is
Dummy : Integer;
procedure Test_Alloc (Access_Param : access Rec_T) is
begin
Dummy := Access_Param.Disc.all;
end Test_Alloc;
end Pack_12;
-- pack_05.ads
pragma Ada_2005;
with Pack_12; use Pack_12;
package Pack_05 is
function Id_B (I : access Integer)
return access Integer
renames Id_A;
end Pack_05;
-----------------
-- Compilation --
-----------------
$ gnatmake -q main.adb
$ main
raised PROGRAM_ERROR : pack_12.ads:14 accessibility check failed
2019-07-05 Justin Squirek <squirek@adacore.com>
gcc/ada/
* checks.adb (Apply_Accessibility_Check): Add logic to fetch the
function result accessibility level if one is required within
the generated check.
* exp_ch6.adb (Needs_Result_Accessibility_Level): Modify
controlling elsif block to handle more cases such as anonymous
access results and disable checking for coextensions.
From-SVN: r273130
Ed Schonberg [Fri, 5 Jul 2019 07:03:54 +0000 (07:03 +0000)]
[Ada] Compiler loop on illegal nested accept statement
This patch fixes a "Compilation abandoned" message in a compiler built
with assertions, or a compiler loop otherwise, when an accept statement
contains an illegal accept statement for the same entry.
Compiling accept_in_accept.adb must yield:
accept_in_accept.adb:12:13:
duplicate accept statement for same entry (RM 9.5.2 (15))
----
procedure accept_in_accept is
task a_in_a is
entry a (i : Integer);
end a_in_a;
task body a_in_a is
begin
select
accept a (i : Integer) do
null;
accept a (i : integer) do
null;
end a;
end a;
or
terminate;
end select;
end a_in_a;
begin
a_in_a.a (1);
end accept_in_accept;
2019-07-05 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch9.adb (Analyze_Accept_Statement): If this is an illegal
accept statement for an enclosing entry abandon analysis to
prevent scope mismatches and potential infinite loops in
compiler.
From-SVN: r273129
Hristian Kirtchev [Fri, 5 Jul 2019 07:03:49 +0000 (07:03 +0000)]
[Ada] Stabilization of Elaboration order v4.0
This patch introduces several changes to the new elaboration order
mechanism:
* Instantiations processed in the context of invocation graph
encoding now yield a relation which is later transformed into an
invocation edge. This ensures that the unit where the instantiation
resides properly depends on the unit where the body of the generic
is.
* The diagnostics of cycles that involve invocation edges now use a
set to avoid infinite recursion when visiting paths that represent
recursive code.
* Various diagnostics that suggest the use of switches have been
updated to indicate which tool the switches apply to.
* Bindo can now output the dependencies of various units that specify
why a predecessor unit must be elaborated prior to a successor
unit. This functionality implements binder switch -e (output
complete list of elaboration order dependencies).
* The output of the elaboration order is now identical to that
emitted by Binde.
* The nature of the invocation graph encoding is now recorded in the
ALI record rather than the Unit record of a unit. This ensures that
both the spec and body share the same encoding kind.
* A section on debugging elaboration order issues is now available in
Bindo.
2019-07-05 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* ali.adb (For_Each_Invocation_Construct,
For_Each_Invocation_Relation): New version.
(Scan_ALI): Initialize field Invocation_Graph_Encoding.
(Set_Invocation_Graph_Encoding): Update the setting of the
invocation graph encoding.
* ali.ads: Move field Invocation_Graph_Encoding from Unit_Record
to ALI_Record because the encoding applies to the whole ALI,
rather than one of the units (spec or body) for which the ALI
file was created.
(For_Each_Invocation_Construct, For_Each_Invocation_Relation):
New version.
* bindo.adb: Update the section on switches. Complete the
section of debugging elaboration order issues.
(Find_Elaboration_Order): Prepare the routine for the switch
from the old to the new elaboration order mechanism.
* bindo-diagnostics.adb (Find_And_Output_Invocation_Paths):
Manage a visited set used by Visit_Vertex.
(Output_All_Cycles_Suggestions,
Output_Dynamic_Model_Suggestions): Clarify the nature of the
suggested switch.
(Output_Elaborate_Body_Transition): Update the diagnostic to
emit a better message.
(Output_Forced_Suggestions, Output_Full_Encoding_Suggestions):
Clarify the nature of the suggested switch.
(Visit_Vertex): Update the parameter profile to add a set of
invokers visited during the transition. This set prevents
infinite exploration of the graph in case the invocations are
recursive.
* bindo-elaborators.adb: Add a use clause for
Bindo.Writers.Dependency_Writers.
(Elaborate_Units_Common): Output the library graph after it has
been augmented with invocation edges. Output just the components
instead of outputting the whole library graph again.
(Elaborate_Units_Dynamic, Elaborate_Units_Static): Output the
dependencies as expressed in the library graph.
* bindo-units.adb (Invocation_Graph_Encoding): Update the
extraction of the invocation graph encoding.
* bindo-writers.adb: Add with and use clauses for Binderr and
Butil.
(palgc, plgc): New debug routine.
(Write_Components): Moved to the spec. Add a header for the
output.
(Write_Dependencies, Write_Dependencies_Of_Vertex,
Write_Dependency_Edge): New routine.
(Write_Elaboration_Order): Update the logic to follow the format
of Binde's order output.
(Write_Library_Graph): Do not output the components every time
the graph is written.
(Write_Unit): Output the invocation graph encoding of the unit.
Output the invocation constructs and relations for the unit
only.
* bindo-writers.ads (Write_Components): Moved from the body.
(Write_Dependencies): New routine.
* bindusg.adb: Prepare the routine for the switch from the old
to the new elaboration order mechanism.
* debug.adb: Binder switch -d_O is now not associated with any
functionality.
* einfo.adb (Is_Elaboration_Target): The attribute applies to
packages, as specified by the comment on the attribute usage.
* opt.ads: Add a global flag which controls the choice between
the new and the legacy elaboration order mechanism.
* sem_elab.adb: Add Package_Target to type Target_Kind.
(Build_Elaborate_Body_Procedure, Build_Elaborate_Procedure,
Build_Elaborate_Spec_Procedure, Check_Elaboration_Scenarios,
Check_SPARK_Model_In_Effect): Use Main_Unit_Entity to obtain the
entity of the main unit.
(Create_Package_Rep): New routine.
(Create_Target_Rep): Add processing for packages.
(Declaration_Placement_Of_Node, Has_Prior_Elaboration): Use
Main_Unit_Entity to obtain the entity of the main
unit.
(Invocation_Graph_Recording_OK): Prepare the routine for the
switch from the old to the new elaboration order mechanism.
(Main_Unit_Entity): New routine.
(Meet_Elaboration_Requirement,
Process_Conditional_ABE_Variable_Reference): Use
Main_Unit_Entity to obtain the entity of the main unit.
(Process_Invocation_Instantiation): New routine.
(Process_Invocation_Scenario): Add processing for
instantiations.
* switch-b.adb (Scan_Binder_Switches): Prepare the routine for
the switch from the old to the new elaboration order mechanism.
From-SVN: r273128
Joffrey Huguet [Fri, 5 Jul 2019 07:03:44 +0000 (07:03 +0000)]
[Ada] Add contracts to Ada.Text_IO for SPARK
This change removes the warnings returned when using Ada.Text_IO library
in SPARK. An abstract state and global contracts were added to modelize
the action of Text_IO procedures and function on the memory and the
files.
2019-07-05 Joffrey Huguet <huguet@adacore.com>
gcc/ada/
* libgnat/a-textio.adb: Add abstract state refinment.
* libgnat/a-textio.ads: Add File_System abstract state. Add
global contracts, contract cases, preconditions and
postconditions to procedures and functions.
(Set_Input, Set_Output, Set_Error, Standard_Input,
Standard_Output, Standard_Error, Current_Input, Current_Output,
Current_Error): Turn SPARK_Mode off.
(Get_Line): Turn SPARK_Mode off on Get_Line functions.
* libgnat/a-tideio.ads, libgnat/a-tienio.ads,
libgnat/a-tifiio.ads, libgnat/a-tiflio.ads,
libgnat/a-tiinio.ads, libgnat/a-timoio.ads: Add global
contracts, contract cases, preconditions and postconditions to
procedures and functions.
From-SVN: r273127
Arnaud Charlet [Fri, 5 Jul 2019 07:03:39 +0000 (07:03 +0000)]
[Ada] GNAT UGN: refresh doc on installing from the cmd line on Windows
2019-07-05 Arnaud Charlet <charlet@adacore.com>
gcc/ada/
* doc/gnat_ugn/platform_specific_information.rst: Refresh doc on
installing from the command line on Windows. Remove obsolete
part.
* gnat_ugn.texi: Regenerate.
From-SVN: r273126
Vasiliy Fofanov [Fri, 5 Jul 2019 07:03:35 +0000 (07:03 +0000)]
[Ada] Ada.Wide_Wide_Characters.Handling: fix comments
2019-07-05 Vasiliy Fofanov <fofanov@adacore.com>
gcc/ada/
* libgnat/a-wichha.ads (Is_Alphanumeric): Replace comment with
the correct one. Also capitalize references to False
throughout.
From-SVN: r273125
Eric Botcazou [Fri, 5 Jul 2019 07:03:30 +0000 (07:03 +0000)]
[Ada] Fix internal error on packed array In/Out actual parameter
This fixes an issue introduced in Ada 2012 for calls to functions taking
an In/Out parameter and for which the actual is the component of a
packed array. In this case, the front-end needs to create a temporary
for the actual, initialize it before the call and assign it back after
it, because operations on bit-packed arrays are converted into
mask-and-shift sequences.
2019-07-05 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* exp_ch4.adb (Expand_N_Indexed_Component): Do not expand actual
parameters of function calls here either.
gcc/testsuite/
* gnat.dg/pack23.adb, gnat.dg/pack23_pkg.ads: New testcase.
From-SVN: r273124
Hristian Kirtchev [Fri, 5 Jul 2019 07:03:25 +0000 (07:03 +0000)]
[Ada] Minor reformatting
2019-07-05 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* bindo-units.adb, checks.adb, exp_attr.adb, exp_ch3.adb,
exp_ch4.adb, exp_pakd.adb, lib-writ.adb, libgnat/g-traceb.adb,
libgnat/g-traceb.ads, libgnat/s-stratt.ads, sem_aux.ads,
sem_util.adb: Minor reformatting.
From-SVN: r273123
Ed Schonberg [Fri, 5 Jul 2019 07:03:20 +0000 (07:03 +0000)]
[Ada] Fix position of subprogram body generated for static predicate
2019-07-05 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch13.adb (Build_Predicate_Functions): If a subtype that
carries a static predicate aspect is frozen immediately after
its declaration, ensure that the generated function body created
for predicate checking is inserted after the corresponding
subprogram declaration, which is created at the point the
declaration is elaborated.
From-SVN: r273122
Hristian Kirtchev [Fri, 5 Jul 2019 07:03:15 +0000 (07:03 +0000)]
[Ada] Crash on deallocating component with discriminated task
This patch modifies the generation of task deallocation code to examine
the underlying type for task components.
2019-07-05 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* exp_ch7.adb (Cleanup_Record): Use the underlying type when
checking for components with tasks.
gcc/testsuite/
* gnat.dg/task3.adb, gnat.dg/task3.ads, gnat.dg/task3_pkg1.ads,
gnat.dg/task3_pkg2.ads: New testcase.
From-SVN: r273121
Arnaud Charlet [Fri, 5 Jul 2019 07:03:10 +0000 (07:03 +0000)]
[Ada] System.OS_Interface: fix link order on Linux
2019-07-05 Arnaud Charlet <charlet@adacore.com>
gcc/ada/
* libgnarl/s-osinte__linux.ads: Link with -lrt before -lpthread.
From-SVN: r273120
Ed Schonberg [Fri, 5 Jul 2019 07:03:05 +0000 (07:03 +0000)]
[Ada] Missing range check on assignment to bit-packed array
This patch adds an explicit range check on an assignment to a component
of a bit-packed array, when the index type of the array is an
enumeration type with a non-standard representation,
Executing the following:
gnatmake -f -gnata -q main
./main
must yield:
1 is invalid
4097 is invalid
4116 is invalid
4117 is invalid
4118 is invalid
4119 is invalid
4120 is invalid
4121 is invalid
----
with Example; use Example;
with My_Types; use My_Types;
with Text_IO; use Text_IO;
procedure main is
begin
--We try to access an invalid array location.
begin
dummy(idx => 1, action => DISABLE);
exception
when others => Text_IO.Put_Line ("1 is invalid");
end;
for I in typ_uint32'(16#1000#) .. 16#101E# loop
declare
begin
-- Text_IO.Put_Line (typ_uint32'image(I) & " OK");
Dummy (Idx => I, action => Enable);
exception
when others => put_line (typ_uint32'Image (I) & " is invalid");
end;
end loop;
end;
----
with Interfaces; use Interfaces;
package My_Types is
subtype typ_bool is boolean;
type typ_uint32 is new Interfaces.Unsigned_32;
subtype typ_uint16 is typ_uint32 range 0..2**16 - 1;
type typ_dis_en is ( DISABLE, ENABLE );
for typ_dis_en'size use 32;
for typ_dis_en use ( DISABLE => 0, ENABLE => 1 );
type typ_rid is
(
RID_0,
RID_2,
RID_3,
RID_4,
RID_5,
RID_6,
RID_7,
RID_8,
RID_9,
RID_10,
RID_11,
RID_12,
RID_13,
RID_14,
RID_15,
RID_16,
RID_17,
RID_18,
RID_19,
RID_26,
RID_27,
RID_28,
RID_29,
RID_30
);
for typ_rid use
(
RID_0 => 16#1000#,
RID_2 => 16#1002#,
RID_3 => 16#1003#,
RID_4 => 16#1004#,
RID_5 => 16#1005#,
RID_6 => 16#1006#,
RID_7 => 16#1007#,
RID_8 => 16#1008#,
RID_9 => 16#1009#,
RID_10 => 16#100A#,
RID_11 => 16#100B#,
RID_12 => 16#100C#,
RID_13 => 16#100D#,
RID_14 => 16#100E#,
RID_15 => 16#100F#,
RID_16 => 16#1010#,
RID_17 => 16#1011#,
RID_18 => 16#1012#,
RID_19 => 16#1013#,
RID_26 => 16#101A#,
RID_27 => 16#101B#,
RID_28 => 16#101C#,
RID_29 => 16#101D#,
RID_30 => 16#101E#
);
for typ_rid'size use 16;
end My_Types;
----
with My_Types;
package Example is
procedure Check;
procedure dummy
(
idx : in My_Types.typ_uint32;
action : in My_Types.typ_dis_en
);
end Example;
----
with Text_IO; use Text_IO;
with Unchecked_Conversion;
with my_types; use my_types;
package body Example is
type typ_rid_sts is array (My_Types.typ_rid)
of My_Types.typ_bool;
for typ_rid_sts'component_size use 1;
is_rid_en : typ_rid_sts :=
(TRUE, false, True, False, true, False, True, false, True, False,
TRUE, false, True, False, true, False, True, false, True, False,
TRUE, false, True, False);
procedure Check is
begin
pragma Assert (for all I in is_rid_en'range => is_rid_en (I));
end Check;
function toRidEvt is new Unchecked_Conversion
(
-- Defining source and target types
source => My_Types.typ_uint16,
target => My_Types.typ_rid
);
procedure dummy (
idx : in My_Types.typ_uint32;
action : in My_Types.typ_dis_en)
is
rid_evt : My_Types.typ_rid;
begin
rid_evt := toRidEvt(idx);
if action = My_Types.ENABLE
then
is_rid_en(rid_evt) := TRUE;
else
is_rid_en(rid_evt) := FALSE;
end if;
end dummy;
end Example;
2019-07-05 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* exp_pakd.adb (Expand_Bit_Packed_Element_Set): Add explicit
range checks when the index type of the bit-packed array is an
enumeration type with a non-standard representation,
From-SVN: r273119
Hristian Kirtchev [Fri, 5 Jul 2019 07:03:00 +0000 (07:03 +0000)]
[Ada] Failure to detect trivial infinite recursion
This patch includes delay statements in the set of control flow
statements since their expressions may have side effects, which in turn
may affect an infinite recursion.
2019-07-05 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* sem_res.adb (Is_Control_Flow_Statement): Delay statements
contain an expression, which in turn may have side effects and
affect the infinite recursion. As a result, delay statements
should not be treated specially.
From-SVN: r273118
Arnaud Charlet [Fri, 5 Jul 2019 07:02:56 +0000 (07:02 +0000)]
[Ada] System.Linux: fix typos in comments
2019-07-05 Arnaud Charlet <charlet@adacore.com>
gcc/ada/
* libgnarl/s-linux.ads, libgnarl/s-linux__alpha.ads,
libgnarl/s-linux__android.ads, libgnarl/s-linux__hppa.ads,
libgnarl/s-linux__mips.ads, libgnarl/s-linux__riscv.ads,
libgnarl/s-linux__sparc.ads: Fix typos in comments.
From-SVN: r273117
Hristian Kirtchev [Fri, 5 Jul 2019 07:02:51 +0000 (07:02 +0000)]
[Ada] Failure to detect trivial infinite recursion
This patch reimplements the detection of trivial infinite recursion to
remove the implicit assumptions concenring the structure and contents of
the enclosing subprogram statements.
------------
-- Source --
------------
-- infinite.adb
procedure Infinite with SPARK_Mode is
function Func_1 (Val : Integer) return Integer;
function Func_2 (Val : Integer) return Integer;
function Func_3 (Val : Integer) return Integer;
function Func_4 (Val : Integer) return Integer;
function Func_5 (Val : Integer) return Integer;
function Func_6 (Val : Integer) return Integer;
function Func_7 (Val : Integer) return Integer;
function Func_8 (Val_1 : Integer; Val_2 : Integer) return Integer;
procedure Proc_1 (Val : Integer);
function Func_1 (Val : Integer) return Integer is
begin
return Func_1 (Val); -- WARN
end Func_1;
function Func_2 (Val : Integer) return Integer is
begin
return Func_2 (123); -- none
end Func_2;
function Func_3 (Val : Integer) return Integer is
Temp : Integer;
begin
Temp := Func_3 (Val); -- WARN
return Temp;
end Func_3;
function Func_4 (Val : Integer) return Integer is
Temp : Integer;
begin
Temp := Func_4 (123); -- none
return Temp;
end Func_4;
function Func_5 (Val : Integer) return Integer is
begin
Proc_1 (Val);
return Func_5 (Val); -- none
end Func_5;
function Func_6 (Val : Integer) return Integer is
begin
Proc_1 (Val);
return Func_6 (123); -- none
end Func_6;
function Func_7 (Val : Integer) return Integer is
begin
raise Program_Error;
return Func_7 (Val); -- none
end Func_7;
function Func_8 (Val_1 : Integer; Val_2 : Integer) return Integer is
begin
return Func_8 (Val_1, 123); -- none
end Func_8;
procedure Proc_1 (Val : Integer) is
begin
Proc_1 (Val); -- WARN
end Proc_1;
begin null; end Infinite;
----------------------------
-- Compilation and output --
----------------------------
$ gcc -c infinite.adb
infinite.adb:14:14: infinite recursion
infinite.adb:14:14: Storage_Error would have been raised at run time
infinite.adb:25:15: infinite recursion
infinite.adb:25:15: Storage_Error would have been raised at run time
infinite.adb:61:07: infinite recursion
infinite.adb:61:07: Storage_Error would have been raised at run time
2019-07-05 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* sem_res.adb (Check_Infinite_Recursion): Reimplemented.
(Enclosing_Declaration_Or_Statement,
Invoked_With_Different_Arguments, Is_Conditional_Statement,
Is_Control_Flow_Statement, Is_Immediately_Within_Body,
Is_Raise_Idiom, Is_Raise_Statement, Is_Sole_Statement,
Preceded_By_Control_Flow_Statement,
Within_Conditional_Statement): New routines.
From-SVN: r273116
Javier Miranda [Fri, 5 Jul 2019 07:02:46 +0000 (07:02 +0000)]
[Ada] Wrong accessibility level under -gnat12
For an anonymous allocator whose type is that of a stand-alone object of
an anonymous access-to-object type, the accessibility level is that of
the declaration of the stand-alone object; however it was incorrectly
computed as being library level compiling under -gnat12 mode.
2019-07-05 Javier Miranda <miranda@adacore.com>
gcc/ada/
* exp_ch4.adb (Expand_N_Type_Conversion): Do not apply an
accessibility check when the conversion is an access to
class-wide interface type and it is an actual parameter.
* exp_ch6.adb (Expand_Call_Helper): Add documentation on the
accessibility level of an anonymous allocator defining the value
of an access parameter.
* sem_util.ads, sem_util.adb (Dynamic_Accessibility_Level): Add
support for an anonymous allocator whose type is that of a
stand-alone object of an anonymous access to object type.
gcc/testsuite/
* gnat.dg/access6.adb: New testcase.
From-SVN: r273115
Piotr Trojanek [Fri, 5 Jul 2019 07:02:41 +0000 (07:02 +0000)]
[Ada] Typo fixes
2019-07-05 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* einfo.ads, sem_res.adb: Typo fixes in comments.
From-SVN: r273114
Bob Duff [Fri, 5 Jul 2019 07:02:37 +0000 (07:02 +0000)]
[Ada] Crash on exported build-in-place function
This patch fixes a bug where if a function is build-in-place, and is
exported, and contains an extended_return_statement whose object is
initialized with another build-in-place function call, then the compiler
will crash.
2019-07-05 Bob Duff <duff@adacore.com>
gcc/ada/
* exp_ch6.adb (Is_Build_In_Place_Function): Narrow the check for
Has_Foreign_Convention to the imported case only. If a
build-in-place function is exported, and called from Ada code,
build-in-place protocols should be used.
gcc/testsuite/
* gnat.dg/bip_export.adb, gnat.dg/bip_export.ads: New testcase.
From-SVN: r273113
Ed Schonberg [Fri, 5 Jul 2019 07:02:32 +0000 (07:02 +0000)]
[Ada] Spurious error on aggregate with choice that is predicted subtype
This patch fixes a spurious error on a record aggregate for a variant
record when a choice in the aggregate is given by a subtype with a
static predicate. The same expansion mechanism for such a variant, used
in case statements, must be used here as well.
2019-07-05 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_util.adb (Encloing_Subprogram): If Enclosing_Dynamic_Scope
is a loop, continue climbing the scope stack to find the
enclosing subprogram.
(Gather_Components): Handle properly a choice in a record
aggregate that is given by a subtype with a static predicate.
gcc/testsuite/
* gnat.dg/aggr25.adb, gnat.dg/aggr25.ads: New testcase.
From-SVN: r273112
Javier Miranda [Fri, 5 Jul 2019 07:02:28 +0000 (07:02 +0000)]
[Ada] Removing support for SCIL "contract-only" subprogram bodies
Remove support added for CodePeer (which was never enabled by default;
it was controlled by the -gnatd.K option) for generation of SCIL
"contract-only" subprogram bodies. These were intended for use when a
subprogram's "real" body is unavailable but the subprogram spec has
pre/post-conditions specified.
2019-07-05 Javier Miranda <miranda@adacore.com>
gcc/ada/
* debug.adb (-gnatd.K): Leave available this switch.
* contracts.adb (Build_And_Analyze_Contract_Only_Subprograms):
Remove.
* scil_ll.ads, scil_ll.adb (Contract_Only_Body_Flag,
Contract_Only_Body_Nodes, Get_Contract_Only_Body,
Is_Contract_Only_Body, Set_Contract_Only_Body): Remove.
From-SVN: r273111
Pierre-Marie de Rodat [Fri, 5 Jul 2019 07:02:23 +0000 (07:02 +0000)]
[Ada] Import documentation from the RM for Ada.Strings.Unbounded
2019-07-05 Pierre-Marie de Rodat <derodat@adacore.com>
gcc/ada/
* libgnat/a-strunb.ads: Import documentation from the RM
From-SVN: r273110
Pierre-Marie de Rodat [Fri, 5 Jul 2019 07:02:17 +0000 (07:02 +0000)]
[Ada] Import documentation from the RM for Ada.Strings.Fixed
2019-07-05 Pierre-Marie de Rodat <derodat@adacore.com>
gcc/ada/
* libgnat/a-strfix.ads: Import documentation from the RM
From-SVN: r273109
Yannick Moy [Fri, 5 Jul 2019 07:02:13 +0000 (07:02 +0000)]
[Ada] Accept compilation switches -Og/-Ofast in non-GCC backends
Tools like GNATprove built as GNAT backends rely on adabkend.adb to
handle generic switches like the optimisation switches -Oxxx.
This patch adds support for -Og and -Ofast that was missing.
There is no impact on compilation.
2019-07-05 Yannick Moy <moy@adacore.com>
gcc/ada/
* adabkend.adb (Scan_Back_End_Switches): Accept -Og and -Ofast
switches.
From-SVN: r273108
Hristian Kirtchev [Fri, 5 Jul 2019 07:02:08 +0000 (07:02 +0000)]
[Ada] Diagnostics in Elaboration order v4.0
This patch introduces several changes to the new elaboration order
mechanism:
* The library graph can now discover, store, and organize the various
cycles it contains.
* The elaboration order mechanism can now diagnose one or all cycles
within the library graph. Diagnostics consist of describing the
reason for the cycle, listing all units comprising the circuit, and
offering suggestions on how to break the cycle.
The patch also modifies unit ALI to hide all invocation-related data
structures and several implementation-specific types by relocating them
in the body of the unit.
The patch cleans up most children of Bindo by using better names of
routines and formal parameters.
------------
-- Source --
------------
-- a.ads
with B; pragma Elaborate_All (B);
with C; pragma Elaborate_All (C);
package A is
end A;
-- b.ads
package B is
procedure Force_Body;
end B;
-- b.adb
with D;
package body B is
procedure Force_Body is null;
Elab : constant Integer := D.Func;
end B;
-- c.ads
package C is
procedure Force_Body;
end C;
-- c.adb
with E;
package body C is
procedure Force_Body is null;
end C;
-- d.ads
package D is
function Func return Integer;
end D;
-- d.adb
with A;
package body D is
Local : Integer := 123;
function Func return Integer is
begin
return Local;
end Func;
end D;
-- e.ads
with A;
package E is
end E;
-- main.adb
with B;
-- Elaborate_All Elaborate_All with
-- C spec <--------------- A spec ---------------------> B spec <------ Main
-- ^ ^ ^ ^
-- | | | |
-- sbb | | | | sbb
-- | | | |
-- C body -----------> E spec | D spec <--------- B body
-- with | ^ with |
-- | | |
-- | sbb | |
-- | | |
-- +------ D body <------------+
-- with Invocation
--
-- The cycles are
--
-- A spec --> C spec --> E spec --> A spec
-- C body
--
-- A spec --> B spec --> D body --> A spec
-- B body
procedure Main is begin null; end Main;
----------------------------
-- Compilation and output --
----------------------------
$ gnatmake -q main.adb -bargs -d_C -d_N
error: Elaboration circularity detected
info:
info: Reason:
info:
info: unit "a (spec)" depends on its own elaboration
info:
info: Circularity:
info:
info: unit "a (spec)" has with clause and pragma Elaborate_All for unit
"b (spec)"
info: unit "b (body)" is in the closure of pragma Elaborate_All
info: unit "b (body)" has with clause for unit "d (spec)"
info: unit "d (body)" is in the closure of pragma Elaborate_All
info: unit "d (body)" has with clause for unit "a (spec)"
info:
info: Suggestions:
info:
info: change pragma Elaborate_All for unit "b (spec)" to Elaborate in unit
"a (spec)"
info: remove pragma Elaborate_All for unit "b (spec)" in unit "a (spec)"
info:
error: Elaboration circularity detected
info:
info: Reason:
info:
info: unit "a (spec)" depends on its own elaboration
info:
info: Circularity:
info:
info: unit "a (spec)" has with clause and pragma Elaborate_All for unit
"c (spec)"
info: unit "c (body)" is in the closure of pragma Elaborate_All
info: unit "c (body)" has with clause for unit "e (spec)"
info: unit "e (spec)" has with clause for unit "a (spec)"
info:
info: Suggestions:
info:
info: change pragma Elaborate_All for unit "c (spec)" to Elaborate in unit
"a (spec)"
info: remove pragma Elaborate_All for unit "c (spec)" in unit "a (spec)"
info:
gnatmake: *** bind failed.
2019-07-05 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* ali.adb: Relocate types Invocation_Construct_Record,
Invocation_Relation_Record, and Invocation_Signature_Record to
the body of ALI. Relocate tables Invocation_Constructs,
Invocation_Relations, and Invocation_Signatures to the body of
ALI. Remove type Body_Placement_Codes. Add new types
Declaration_Placement_Codes, and
Invocation_Graph_Encoding_Codes. Update the literals of type
Invocation_Graph_Line_Codes.
(Add_Invocation_Construct): Update the parameter profile. Add an
invocation construct built from all attributes provided.
(Add_Invocation_Relation): Update the parameter profile. Add an
invocation relation built from all attributes provided.
(Body_Placement): New routine.
(Body_Placement_Kind_To_Code, Code_To_Body_Placement_Kind):
Removed.
(Code_To_Declaration_Placement_Kind,
Code_To_Invocation_Graph_Encoding_Kind, Column,
Declaration_Placement_Kind_To_Code, Extra,
For_Each_Invocation_Construct, For_Each_Invocation_Relation,
Invocation_Graph_Encoding,
Invocation_Graph_Encoding_Kind_To_Code, Invoker, Kind, Line,
Locations, Name): New routine.
(Scan_Invocation_Construct_Line): Reimplement the scanning
mechanism.
(Scan_Invocation_Graph_Attributes_Line): New routine.
(Scan_Invocation_Graph_Line): Use a case statement to dispatch.
(Scan_Invocation_Relation_Line): Reimplement the scanning
mechanism.
(Scope): New routine.
(Set_Invocation_Graph_Encoding, Signature, Spec_Placement,
Target): New routine.
* ali.ads: Add new type Invocation_Graph_Encoding_Kind. Add
component Invocation_Graph_Encoding to type Unit_Record.
Relocate various types and data structures to the body of ALI.
(Add_Invocation_Construct, Add_Invocation_Relation): Update the
parameter profile.
(Body_Placement): New routine.
(Body_Placement_Kind_To_Code, Code_To_Body_Placement_Kind):
Removed.
(Code_To_Declaration_Placement_Kind,
Code_To_Invocation_Graph_Encoding_Kind, Column,
Declaration_Placement_Kind_To_Code, Extra,
For_Each_Invocation_Construct, For_Each_Invocation_Relation,
Invocation_Graph_Encoding,
Invocation_Graph_Encoding_Kind_To_Code, Invoker, Kind, Line,
Locations, Name, Scope, Set_Invocation_Graph_Encoding,
Signature, Spec_Placement, Target): New routine.
* bindo.adb: Add with clause for Binde. Add with and use
clauses for Debug. Update the documentation. Add new switches.
(Find_Elaboration_Order): Dispatch to the proper elaboration
mechanism.
* bindo-augmentors.adb:
Remove with and use clauses for GNAT and GNAT.Sets. Remove
membership set VS. Update the parameter profiles of most
routines to use better parameter names. Update the
implementation of most routine to use the new parameter names.
Remove various redundant assertions.
* bindo-builders.adb: Use better names for instantiated data
structures. Update all references to these names. Update the
parameter profiles of most routines to use better parameter
names. Update the implementation of most routine to use the new
parameter names.
(Build_Library_Graph): Update the parameter profile. Update the
call to Create.
(Create_Vertex): Reimplemented.
(Declaration_Placement_Vertex): New routine.
* bindo-builders.ads (Build_Library_Graph): Update the parameter
profile and comment on usage.
* bindo-diagnostics.adb: Almost a new unit.
* bindo-diagnostics.ads: Add a use clause for
Bindo.Graphs.Invocation_Graphs. Remove package
Cycle_Diagnostics.
(Diagnose_Circularities): New routine.
* bindo-elaborators.adb: Remove the with and use clauses for
Binderr and GNAT.Sets. Remove the use clause for
Bindo.Diagnostics.Cycle_Diagnostics. Remove membership set VS.
Update the parameter profiles of most routines to use better
parameter names. Update the implementation of most routine to
use the new parameter names. (Elaborate_Units_Common): Update
the parameter profile. Pass an infication to the library graph
builder whether the dynamic model is in effect.
(Elaborate_Units_Dynamic, Elaborate_Units_Static): Use
Diagnose_Circularities to provide diagnostics.
(Update_Successor): Use routine In_Same_Component to determine
whether the predecessor and successor reside in different
components.
* bindo-graphs.adb: Add with and use clauses for Butil, Debug,
Output, and Bindo.Writers. Remove with and use clauses for
GNAT.Lists. Update the parameter profiles of most routines to
use better parameter names. Update the implementation of most
routine to use the new parameter names. Remove various
redundant assertions. Remove doubly linked list EL. Add new
type Precedence_Kind.
(Add_Cycle): New routine.
(Add_Vertex): Update the parameter profile. Update the creation
of vertex attributes.
(Add_Vertex_And_Complement, Body_Vertex, Column,
Complementary_Vertex, Copy_Cycle_Path, Cycle_Kind_Of): New
routines.
(Destroy_Invocation_Graph_Edge, Destroy_Library_Graph_Cycle,
Destroy_Library_Graph_Edge, Extra, File_Name,
Find_All_Cycles_Through_Vertex, Find_All_Cycles_With_Edge,
Find_Cycles, Find_First_Lower_Precedence_Cycle,
Get_LGC_Attributes, Has_Next, Hash_Library_Graph_Cycle,
Hash_Library_Graph_Cycle_Attributes, Highest_Precedence_Cycle,
Highest_Precedence_Edge, In_Same_Component, Insert_And_Sort,
Invocation_Edge_Count, Invocation_Graph_Encoding,
Is_Cycle_Initiating_Edge, Is_Cyclic_Edge,
Is_Cyclic_Elaborate_All_Edge, Is_Cyclic_Elaborate_Body_Edge,
Is_Cyclic_Elaborate_Edge, Is_Cyclic_Forced_Edge,
Is_Cyclic_Invocation_Edge, Is_Cyclic_With_Edge,
Is_Dynamically_Elaborated, Is_Elaborate_All_Edge,
Is_Elaborate_Body_Edge, Is_Elaborate_Edge: New routines.
(Is_Existing_Predecessor_Successor_Relation): Removed.
(Is_Forced_Edge, Is_Invocation_Edge, Is_Recorded_Cycle,
Is_Recorded_Edge, Is_With_Edge, Iterate_Edges_Of_Cycle, Kind,
Length): New routine.
(Lib_Vertex): Removed.
(Line, Links_Vertices_In_Same_Component,
Maximum_Invocation_Edge_Count, Next, Normalize_And_Add_Cycle,
Normalize_Cycle_Path, Number_Of_Cycles, Path, Precedence,
Remove_Vertex_And_Complement, Sequence_Next_Cycle): New routines.
(Sequence_Next_IGE_Id): Renamed to Sequence_Next_Edge.
(Sequence_Next_IGV_Id): Renamed to Sequence_Next_Vertex.
(Sequence_Next_LGE_Id): Renamed to Sequence_Next_Edge.
(Sequence_Next_LGV_Id): Renamed to Sequence_Next_Vertex.
(Set_Is_Existing_Predecessor_Successor_Relation): Removed.
(Set_Is_Recorded_Cycle, Set_Is_Recorded_Edge,
Set_LGC_Attributes, Spec_Vertex, Trace_Cycle, Trace_Edge,
Trace_Eol, Trace_Vertex): New routines.
* bindo-graphs.ads: Add with and use clauses for Types and
GNAT.Lists. Update the parameter profiles of most routines to
use better parameter names. Update the implementation of most
routine to use the new parameter names. Add the new
instantiated data structures IGE_Lists, IGV_Sets, LGC_Lists,
LGE_Lists, LGE_Sets, LGV_Sets, and RC_Sets. Add new type
Library_Graph_Cycle_Id along with an empty and initial value.
Remove component Lib_Vertex and add new components Body_Vertex
and Spec_Vertex to type Invocation_Graph_Vertex_Attributes. Add
new type Library_Graph_Cycle_Kind. Add new iterators
All_Cycle_Iterator and Edges_Of_Cycle_Iterator. Add new type
Library_Graph_Cycle_Attributes. Add new components
Cycle_Attributes, Cycles, and Dynamically_Elaborated to type
Library_Graph_Attributes.
(Body_Vertex, Column, Destroy_Invocation_Graph_Edge,
Destroy_Library_Graph_Cycle_Attributes,
Destroy_Library_Graph_Edge, Extra, File_Name, Find_Cycles,
Has_Elaborate_All_Cycle, Has_Next, Hash_Library_Graph_Cycle,
Hash_Library_Graph_Cycle_Attributes, Highest_Precedence_Cycle,
In_Same_Component, Invocation_Edge_Count,
Invocation_Graph_Encoding, Is_Dynamically_Elaborated,
Is_Elaborate_All_Edge, Is_Elaborate_Body_Edge,
Is_Elaborate_Edge, Is_Forced_Edge, Is_Invocation_Edge,
Is_With_Edge, Iterate_All_Cycles, Iterate_Edges_Of_Cycle, Kind):
New routines.
(Length, Lib_Vertex, (Line, Next, Number_Of_Cycles, Present,
Same_Library_Graph_Cycle_Attributes, Spec_Vertex): New routines.
* bindo-units.adb (File_Name, Invocation_Graph_Encoding): New
routines.
* bindo-units.ads: Add new instantiated data structure
Unit_Sets.
(File_Name, Invocation_Graph_Encoding): New routine.
* bindo-validators.adb: Remove with and use clauses for GNAT and
GNAT.Sets. Remove membership set US. Update the parameter
profiles of most routines to use better parameter names. Update
the implementation of most routine to use the new parameter
names.
(Validate_Cycle, Validate_Cycle_Path, Validate_Cycles,
Validate_Invocation_Graph_Vertex): Remove the validation of
component Lib_Vertex. Add the validation of components
Body_Vertex and Spec_Vertex.
(Write_Error): New routine.
* bindo-validators.ads (Validate_Cycles): New routine.
* bindo-writers.adb: Update the parameter profiles of most
routines to use better parameter names. Update the
implementation of most routine to use the new parameter names.
(Write_Cycle, Write_Cyclic_Edge, Write_Cycles): New routines.
(Write_Invocation_Graph_Vertex): Remove the output of component
Lib_Vertex. Add the output of components Body_Vertex and
Spec_Vertex.
* bindo-writers.ads (Write_Cycles): New routine.
* debug.adb: Use binder switches -d_C and -d_P, add
documentation on their usage.
* gnatbind.adb: Remove with and use clauses for Binde. Delegate
the choice of elaboration mechanism to Bindo.
* lib-writ.adb (Column, Extra, Invoker, Kind, Line, Locations,
Name, Placement, Scope, Signature, Target): Removed.
(Write_Invocation_Graph): Moved at the top level.
(Write_Invocation_Graph_Attributes): New routine.
(Write_Invocation_Relation, Write_Invocation_Signature): Moved
at the top level.
* lib-writ.ads: Add a documentation section on invocation graph
attributes.
* sem_elab.adb (Body_Placement_Of): New routine.
(Declare_Invocation_Construct): Update the call to
Add_Invocation_Construct.
(Declaration_Placement_Of_Node): New routine.
(Get_Invocation_Attributes): Correct the retrieval of the
enclosing subprogram where the postcondition procedure lives.
(Placement_Of, Placement_Of_Node): Removed.
(Record_Invocation_Graph): Record the encoding format used.
(Record_Invocation_Graph_Encoding): New routine.
(Record_Invocation_Relation): Update the call to
Add_Invocation_Relation.
(Spec_Placement_Of): Removed.
* libgnat/g-lists.ads, libgnat/g-lists.adb (Equal): New routine.
From-SVN: r273107
Ed Schonberg [Fri, 5 Jul 2019 07:02:03 +0000 (07:02 +0000)]
[Ada] Compiler abort on a dynamic predicate used in a precondition
This patch suppresses the generation of a predicate check when the
expression is a formal IN parameter of a subprogram S. If the check is
being applied to the actual in a call, the call is either in the body of
S, or in an aspect specfication for S, e.g. a precondition, In both
cases the check is redundant bevause it will be applied on any call to
S. In the second case the expansion of the predicate check may lead to
out-of-scope references the the formal.
2019-07-05 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* checks.adb (Apply_Predicate_Check): Except within the
subprogram body that defines the formal, do not apply predicate
check on a formal IN parameter: such a check is redundant and
its expansion can lead to out-of-scope references when it is
originates in a function call in a precondition,
gcc/testsuite/
* gnat.dg/predicate7.adb, gnat.dg/predicate7.ads,
gnat.dg/predicate7_pkg.ads: New testcase.
From-SVN: r273106
Yannick Moy [Fri, 5 Jul 2019 07:01:58 +0000 (07:01 +0000)]
[Ada] Fix inlining in GNATprove inside quantified expressions
Calls to local subprograms in GNATprove may be inlined in some case, but
it should not be the case inside quantified expressions which are
handled as expressions inside GNATprove. Because quantified expressions
are only preanalayzed, the detection of the impossible inlining was not
performed. Now fixed.
There is no impact on compilation.
2019-07-05 Yannick Moy <moy@adacore.com>
gcc/ada/
* sem_res.adb (Resolve_Call): Cannot inline in quantified
expressions.
* sem_util.adb, sem_util.ads (In_Quantified_Expression): New
function.
From-SVN: r273105
Bob Duff [Fri, 5 Jul 2019 07:01:54 +0000 (07:01 +0000)]
[Ada] Fix typo in GNAT RM
2019-07-05 Bob Duff <duff@adacore.com>
gcc/ada/
* doc/gnat_rm/standard_and_implementation_defined_restrictions.rst:
Fix typo.
* gnat_rm.texi: Regenerate.
From-SVN: r273104
Bob Duff [Fri, 5 Jul 2019 07:01:49 +0000 (07:01 +0000)]
[Ada] No_Stream_Optimizations ignored for 'Class'Input
This patch fixes a bug in which if pragma Restrictions
(No_Stream_Optimizations) is in effect, it is ignored for T'Class'Input.
Revision 251886 was causing the compiler to bypass
No_Stream_Optimizations.
2019-07-05 Bob Duff <duff@adacore.com>
gcc/ada/
* exp_attr.adb (Input): Take the No_Stream_Optimizations
restriction into account.
From-SVN: r273103
Claire Dross [Fri, 5 Jul 2019 07:01:45 +0000 (07:01 +0000)]
[Ada] Ada.Containers.Formal_Vectors: make vectors always bounded
2019-07-05 Claire Dross <dross@adacore.com>
gcc/ada/
* libgnat/a-cofove.ads, libgnat/a-cofove.adb: Definite formal
vectors are now always bounded so that they do not need to be
limited anymore.
From-SVN: r273102
Dmitriy Anisimkov [Fri, 5 Jul 2019 07:01:40 +0000 (07:01 +0000)]
[Ada] GNAT.Traceback: add a Call_Chain function
2019-07-05 Dmitriy Anisimkov <anisimko@adacore.com>
gcc/ada/
* libgnat/g-traceb.ads, libgnat/g-traceb.adb (Call_Chain): New
function.
From-SVN: r273101
GCC Administrator [Fri, 5 Jul 2019 00:16:23 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r273100
Jakub Jelinek [Thu, 4 Jul 2019 21:41:49 +0000 (23:41 +0200)]
re PR middle-end/78884 ([7/8] ICE when gimplifying VLA in OpenMP SIMD region)
PR middle-end/78884
* gimplify.c (struct gimplify_omp_ctx): Add add_safelen1 member.
(gimplify_bind_expr): If seeing TREE_ADDRESSABLE VLA inside of simd
loop body, set ctx->add_safelen1 instead of making it GOVD_PRIVATE.
(gimplify_adjust_omp_clauses): Add safelen (1) clause if
ctx->add_safelen1 is set.
* gcc.dg/gomp/pr78884.c: New test.
From-SVN: r273096
Jakub Jelinek [Thu, 4 Jul 2019 21:40:56 +0000 (23:40 +0200)]
omp-expand.c (expand_omp_for_static_nochunk): Don't emit GOMP_loop_start at the start of second worksharing loop in a scan.
* omp-expand.c (expand_omp_for_static_nochunk): Don't emit
GOMP_loop_start at the start of second worksharing loop in a scan.
For nowait, don't emit GOMP_loop_end_nowait at the end of first
worksharing loop in a scan even if there are conditional lastprivates,
and do emit GOMP_loop_end_nowait at the end of second worksharing loop.
* testsuite/libgomp.c/scan-9.c: New test.
* testsuite/libgomp.c/scan-10.c: New test.
From-SVN: r273095
Iain Sandoe [Thu, 4 Jul 2019 18:28:59 +0000 (18:28 +0000)]
[Darwin] Revert one hunk from r273016 (TLC for older Darwin versions).
t-darwin8 is nolonger needed (or present) for pre-10.4 powerpc, so remove
the reference.
2019-07-04 Iain Sandoe <iain@sandoe.co.uk>
* config.host: Remove reference to t-darwin8.
From-SVN: r273091
Jan Hubicka [Thu, 4 Jul 2019 16:30:53 +0000 (18:30 +0200)]
tree-ssa-alias.c (nonoverlapping_component_refs_since_match_p): Fix check for match in the ref walk.
* tree-ssa-alias.c (nonoverlapping_component_refs_since_match_p):
Fix check for match in the ref walk.
From-SVN: r273090
Andrea Corallo [Thu, 4 Jul 2019 16:25:06 +0000 (16:25 +0000)]
jit: gcc_jit_context_new_binary_op check res type
gcc/jit/ChangeLog:
2019-07-04 Andrea Corallo <andrea.corallo@arm.com>
* libgccjit.c (gcc_jit_context_new_binary_op): Check result_type to be a
numeric type.
gcc/testsuite/ChangeLog:
2019-07-04 Andrea Corallo <andrea.corallo@arm.com>
* jit.dg/test-error-gcc_jit_context_new_binary_op-bad-res-type.c:
New testcase.
From-SVN: r273089
Wilco Dijkstra [Thu, 4 Jul 2019 16:00:26 +0000 (16:00 +0000)]
Fix arm XFAIL in cunroll-15.c
Remove the XFAIL on arm in cunroll-15.c since the test passes on trunk.
Committed as obvious.
testsuite/
* gcc.dg/tree-ssa/cunroll-15.c: Remove XFAIL on arm.
From-SVN: r273088
Martin Liska [Thu, 4 Jul 2019 15:59:19 +0000 (17:59 +0200)]
Support __builtin_expect_with_probability for analysis of # of loop iterations.
2019-07-04 Martin Liska <mliska@suse.cz>
* tree-ssa-loop-niter.c (get_upper_bound_based_on_builtin_expr_with_prob):
New function.
(estimate_numbers_of_iterations):
Support __builtin_expect_with_probability for analysis
of # of loop iterations.
From-SVN: r273087
Andrea Corallo [Thu, 4 Jul 2019 15:46:00 +0000 (15:46 +0000)]
introduce gcc_jit_context_new_bitfield
gcc/jit/ChangeLog:
2019-07-04 Andrea Corallo <andrea.corallo@arm.com>
* docs/topics/compatibility.rst (LIBGCCJIT_ABI_12): New ABI tag.
* docs/topics/types.rst: Add gcc_jit_context_new_bitfield.
* jit-common.h (namespace recording): Add class bitfield.
* jit-playback.c:
(DECL_C_BIT_FIELD, SET_DECL_C_BIT_FIELD): Add macros.
(playback::context::new_bitfield): New method.
(playback::compound_type::set_fields): Add bitfield support.
(playback::lvalue::mark_addressable): Was jit_mark_addressable make this
a method of lvalue plus return a bool to communicate success.
(playback::lvalue::get_address): Check for jit_mark_addressable return
value.
* jit-playback.h (new_bitfield): New method.
(class bitfield): New class.
(class lvalue): Add jit_mark_addressable method.
* jit-recording.c (recording::context::new_bitfield): New method.
(recording::bitfield::replay_into): New method.
(recording::bitfield::write_to_dump): Likewise.
(recording::bitfield::make_debug_string): Likewise.
(recording::bitfield::write_reproducer): Likewise.
* jit-recording.h (class context): Add new_bitfield method.
(class field): Make it derivable by class bitfield.
(class bitfield): Add new class.
* libgccjit++.h (class context): Add new_bitfield method.
* libgccjit.c (struct gcc_jit_bitfield): New structure.
(gcc_jit_context_new_bitfield): New function.
* libgccjit.h
(LIBGCCJIT_HAVE_gcc_jit_context_new_bitfield) New macro.
(gcc_jit_context_new_bitfield): New function.
* libgccjit.map (LIBGCCJIT_ABI_12) New ABI tag.
gcc/testsuite/ChangeLog:
2019-07-04 Andrea Corallo <andrea.corallo@arm.com>
* jit.dg/all-non-failing-tests.h: Add test-accessing-bitfield.c.
* jit.dg/test-accessing-bitfield.c: New testcase.
* jit.dg/test-error-gcc_jit_context_new_bitfield-invalid-type.c:
Likewise.
* jit.dg/test-error-gcc_jit_context_new_bitfield-invalid-width.c:
Likewise.
* jit.dg/test-error-gcc_jit_lvalue_get_address-bitfield.c:
Likewise.
From-SVN: r273086
Alexandre Oliva [Thu, 4 Jul 2019 15:00:00 +0000 (15:00 +0000)]
introduce EH_ELSE_EXPR tree and gimplifier
I found GIMPLE_EH_ELSE offered exactly the semantics I needed for some
Ada changes yet to be contributed, but GIMPLE_EH_ELSE was only built
by GIMPLE passes, and I needed to build earlier something that
eventually became GIMPLE_EH_ELSE.
This patch does that, introducing an EH_ELSE_EXPR tree, and logic to
dump it and to gimplify it.
for gcc/ChangeLog
* doc/generic.texi (Cleanups): Document EH_ELSE_EXPR.
* except.c: Likewise.
* expr.c (expand_expr_real_1): Reject it.
* gimplify.c (gimplify_expr): Gimplify it, within
TRY_FINALLY_EXPR.
* tree-dump.c (dequeue_and_dump): Dump it.
* tree-pretty-print.c (dump_generic_node): Likewise.
* tree.c (block_may_fallthru): Handle it.
* tree.def (EH_ELSE_EXPR): Introduce it.
* gimple-pretty-print.c (dump_gimple_try): Dump TRY_FINALLY
with GIMPLE_EH_ELSE as try/finally/else.
From-SVN: r273084
Richard Biener [Thu, 4 Jul 2019 13:56:12 +0000 (13:56 +0000)]
re PR ipa/91062 (gcc.dg/ipa/ipa-pta-1.c dump contains garbage when gcc was configured with --enable-checking=all)
2019-07-04 Richard Biener <rguenther@suse.de>
PR ipa/91062
* tree-pass.h (execute_all_ipa_transforms): Add a flag
parameter whether to disable GC collection.
* passes.c (execute_one_ipa_transform_pass): Likewise, and
honor it.
(execute_all_ipa_transforms): Likewise and pass it down.
* cgraph.c (cgraph_node::get_body): Do not invoke garbage
collection from applying IPA transforms.
* cgraphunit.c (cgraph_node::expand): Allow garbage collection
from applying IPA transforms.
From-SVN: r273083
Richard Biener [Thu, 4 Jul 2019 13:55:15 +0000 (13:55 +0000)]
re PR tree-optimization/90911 (456.hmmer regression with r272239)
2019-07-04 Richard Biener <rguenther@suse.de>
PR tree-optimization/90911
* tree-vectorizer.h (_loop_vec_info::scalar_loop_scaling): New field.
(LOOP_VINFO_SCALAR_LOOP_SCALING): new.
* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Initialize
scalar_loop_scaling.
(vect_transform_loop): Scale scalar loop profile if needed.
* tree-vect-loop-manip.c (vect_loop_versioning): When re-using
the loop copy from if-conversion adjust edge probabilities
and scale the vectorized loop body profile, queue the scalar
profile for updating after peeling.
From-SVN: r273082
James Clarke [Thu, 4 Jul 2019 13:22:39 +0000 (13:22 +0000)]
s-osinte__kfreebsd-gnu.ads (clockid_t): Make type definition public.
2019-07-04 James Clarke <jrtc27@debian.org>
* libgnarl/s-osinte__kfreebsd-gnu.ads (clockid_t): Make type
definition public.
(CLOCK_REALTIME): Make value public.
From-SVN: r273080
Jan Hubicka [Thu, 4 Jul 2019 12:52:22 +0000 (14:52 +0200)]
tree-ssa-alias.c (decl_refs_may_alias_p): Add size1 and size2 parameters; return early for must-alias.
* tree-ssa-alias.c (decl_refs_may_alias_p): Add size1 and size2
parameters; return early for must-alias.
(indirect_ref_may_alias_decl_p): Likewise; when establishing
outer types match, try nonoverlapping_component_refs
if must-alias is not obvious.
(indirect_refs_may_alias_p): Likewise.
(refs_may_alias_p_2): Likewise.
* gcc.dg/tree-ssa/alias-access-path-3.c: New testcase.
* gcc.dg/tree-ssa/alias-access-path-8.c: New testcase.
From-SVN: r273079
Andrew Stubbs [Thu, 4 Jul 2019 11:43:47 +0000 (11:43 +0000)]
Improve OpenMP map diagnostics.
2019-07-04 Andrew Stubbs <ams@codesourcery.com>
gcc/cp/
* cp-tree.h (cp_omp_emit_unmappable_type_notes): New prototype.
* decl.c (cp_finish_decl): Call cp_omp_emit_unmappable_type_notes.
* decl2.c (cp_omp_mappable_type): Move contents to ...
(cp_omp_mappable_type_1): ... here and add note output.
(cp_omp_emit_unmappable_type_notes): New function.
* semantics.c (finish_omp_clauses): Call
cp_omp_emit_unmappable_type_notes in four places.
gcc/testsuite/
* g++.dg/gomp/unmappable-1.C: New file.
From-SVN: r273078
Martin Liska [Thu, 4 Jul 2019 11:38:28 +0000 (13:38 +0200)]
Fix loading of lto_section on strict alignment targets (PR lto/91078).
2019-07-04 Martin Liska <mliska@suse.cz>
PR lto/91078
* lto-common.c (lto_file_finalize): Use memcpy to set
file_data->lto_section_header.
From-SVN: r273077
Javier Miranda [Thu, 4 Jul 2019 08:07:24 +0000 (08:07 +0000)]
[Ada] Spurious error on non-default C++ constructor
The frontend reports spurious errors on C++ non-default constructors
that have formals whose type is an access to subprogram.
2019-07-04 Javier Miranda <miranda@adacore.com>
gcc/ada/
* exp_tss.adb (Init_Proc): Adding missing support for access to
subprograms and access to protected subprograms of non-default
C++ constructors.
gcc/testsuite/
* gnat.dg/cpp_constructor.adb, gnat.dg/cpp_constructor_fp.ads,
gnat.dg/cpp_constructor_useit.ads: New testcase.
From-SVN: r273072
Eric Botcazou [Thu, 4 Jul 2019 08:07:19 +0000 (08:07 +0000)]
[Ada] Clean up support for validity checks in the compiler
This removes old code in the parser that serves no useful purpose and
fixes minor issues in the Validsw package. No functional changes.
2019-07-04 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* gnat1drv.adb (Adjust_Global_Switches): Use proper interface to
set the validity settings in CodePeer mode.
* par-load.adb (Load): Remove all code dealing with validity
settings.
* validsw.ads (Validity_Check_Copies): Alphabetize.
* validsw.adb (Reset_Validity_Check_Options): Set all options to
off.
(Save_Validity_Check_Options): Save all options.
From-SVN: r273071
Hristian Kirtchev [Thu, 4 Jul 2019 08:07:14 +0000 (08:07 +0000)]
[Ada] Minor reformatting
2019-07-04 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* exp_ch3.adb, exp_ch4.adb, exp_ch4.ads, exp_ch5.adb,
exp_ch7.adb, exp_ch9.adb, exp_ch11.adb, exp_unst.adb,
rtsfind.ads, sem_attr.adb, sem_ch10.adb, sem_ch12.adb,
sem_ch13.adb, sem_dim.adb, sem_disp.adb, xref_lib.adb: Minor
reformatting.
From-SVN: r273070
Joffrey Huguet [Thu, 4 Jul 2019 08:07:09 +0000 (08:07 +0000)]
[Ada] Add preconditions in Ada.Task_Identification
This patch is needed to check for the Ada RM C.7.1(15) rule in SPARK.
2019-07-04 Joffrey Huguet <huguet@adacore.com>
gcc/ada/
* libgnarl/a-taside.ads: Add assertion policy to ignore
preconditions.
(Abort_Task, Is_Terminated, Is_Callable): Add preconditions.
From-SVN: r273069
Eric Botcazou [Thu, 4 Jul 2019 08:07:04 +0000 (08:07 +0000)]
[Ada] Fix capitalization and parenthesis glitches in GNAT RM
2019-07-04 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* doc/gnat_rm/implementation_defined_pragmas.rst: Fix
capitalization and parenthesis glitches.
* gnat_rm.texi: Regenerate.
From-SVN: r273068
Ed Schonberg [Thu, 4 Jul 2019 08:07:00 +0000 (08:07 +0000)]
[Ada] Spurious error on instantiation and limited_with_clause
This patch fixes a spurious error during the construction of an instance
body in the inlining phase of the frontend, when the package declaration
for the main unit has a limited_with_clause on some unit P, and the main
unit itself does not have a corresponding regular with_clause, but some
other unit in the context has with_clause that has compiled P. P must
be removed from visibility to prevent conflicts with homonyms in the
generic body to be instantiated.
The following must compile quietly:
gcc -c gpr2-project-view.adb
----
package GNATCOLL is
end GNATCOLL;
package GNATCOLL.Refcount is
generic
type Element_Type (<>) is private;
package Shared_Pointers is
type Ref is tagged private;
type Element_Access is access all Element_Type;
type Reference_Type (Element : access Element_Type)
is limited null record;
function Unchecked_Get (Self : Ref'Class) return Element_Access;
function Get (Self : Ref'Class) return Reference_Type
is ((Element => Unchecked_Get (Self)));
private
type Ref is tagged null record;
end Shared_Pointers;
type Refcounted is abstract tagged null record;
generic
type Encapsulated is abstract new Refcounted with private;
package Smart_Pointers is
type Encapsulated_Access is access all Encapsulated'Class;
type Ref is tagged private;
procedure Set (Self : in out Ref; Data : Encapsulated'Class);
procedure Set (Self : in out Ref; Data : access Encapsulated'Class);
private
type Ref is tagged null record;
end Smart_Pointers;
end GNATCOLL.Refcount;
----
package body GNATCOLL.Refcount is
package body Shared_Pointers is
function Unchecked_Get (Self : Ref'Class) return Element_Access is
begin
return null;
end Unchecked_Get;
end Shared_Pointers;
package body Smart_Pointers is
procedure Set (Self : in out Ref; Data : access Encapsulated'Class) is
begin
null;
end Set;
procedure Set (Self : in out Ref; Data : Encapsulated'Class) is
Tmp : constant Encapsulated_Access := new Encapsulated'Class'(Data);
begin
Set (Self, Tmp);
end Set;
end Smart_Pointers;
end GNATCOLL.Refcount;
----
package GPR2 is
end GPR2;
----
package GPR2.Parser is
end GPR2.Parser;
----
with GPR_Parser.Analysis;
package GPR2.Parser.Project is
end GPR2.Parser.Project;
----
package GPR2.Project is
end GPR2.Project;
----
with GPR2.Parser.Project;
package GPR2.Project.Configuration is
end GPR2.Project.Configuration;
----
with GPR2.Project.Configuration;
with GPR2.Unit.Set;
package GPR2.Project.Definition is
end GPR2.Project.Definition;
----
limited with GPR2.Unit.Set;
package GPR2.Project.View is
procedure Require_Body;
end GPR2.Project.View;
----
with GPR2.Project.Definition;
package body GPR2.Project.View is
procedure Require_Body is null;
end GPR2.Project.View;
----
package GPR2.Unit is
end GPR2.Unit;
package GPR2.Unit.Set is
end GPR2.Unit.Set;
...
package GPR_Parser is
end GPR_Parser;
----
with GNATCOLL.Refcount;
package GPR_Parser.Analysis is
type Unit_Provider_Interface is null record;
package Unit_Provider_References is new GNATCOLL.Refcount.Shared_Pointers
(Unit_Provider_Interface);
end GPR_Parser.Analysis;
2019-07-04 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch10.adb (Remove_Context_Clauses): Handle properly the
removal of a limited_with_clause which appears in the library
unit oF the main unit, when some other unit in the context has a
regular with_clause on the same unit, to prevent spurious
visibility errors in the subsequent analysis of pending instance
bodies.
From-SVN: r273067
Hristian Kirtchev [Thu, 4 Jul 2019 08:06:54 +0000 (08:06 +0000)]
[Ada] Management of internal data structures in Sem_Elab
This patch modifies the timing of Sem_Elab's internal data structure
creation and destruction, and adds the concept of "active" elaboration
compiler phase.
The elaboration phase of the compiler is active after the frontend
initializes Sem_Elab. It is at this point that all internal data
structures of Sem_Elab are created and become ready to accept data.
The elaboration phase of the compiler is completed after all elaboration
scenarios are examined, all ABE checks are intalled, and diagnostics are
emitted. It is at this point that all internal data structures of
Sem_Elab are destroyed. Further attempts to reintroduce data into
Sem_Elab by subsequent compiler phases are cut off.
Compilation using GCC unaffected.
2019-07-04 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* sem_elab.adb: Add new type Elaboration_Phase_Status along with
a global to keep track of the elaboration phase status.
Initialize all internal data structures to Nil for services
Elaborated_Units, Internal_Representation, and Scenario_Storage.
(Build_Call_Marker): Do not create a call marker when the
elaboration phase is not active.
(Build_Variable_Reference_Marker): Do not create a call marker
when the elaboration phase is not active.
(Check_Elaboration_Scenarios): Destroy all internal structures
when the elaboration phase does not have to run. Do not execute
when the elaboration phase is not active.
(Elaboration_Phase_Active): New routine.
(Finalize_All_Data_Structures): New routine.
(Initialize): Initialize all internal data structures and signal
that the elaboration phase has started.
(Initialize_All_Data_Structures): New routine.
(Initialize_Elaborated_Units): Initialize all internal data
structures.
(Initialize_Internal_Representation): Initialize all internal
data structures.
(Initialize_Scenario_Storage): Initialize all internal data
structures.
(Kill_Elaboration_Scenario): Do not execute when the elaboration
phase is not active.
(Set_Elaboration_Phase): New routine.
(Update_Elaboration_Scenario): Do not execute when the
elaboration phase is not active.
From-SVN: r273066
Gary Dismukes [Thu, 4 Jul 2019 08:06:49 +0000 (08:06 +0000)]
[Ada] Expr. func. with private formal rejected in nested Ghost package
The compiler prematurely freezes a private type that is the type of a
formal parameter of an expression function declared within a nested,
inactivated Ghost package, resulting is an error complaining that the
private type must be fully defined at that point. This is fixed by
testing for Ignored_Ghost_Entity in the condition guarding the code that
performs Mask_Unfrozen_Types for an expression function without a
separate declaration, ensuring that the expression function's profile
isn't frozen prematurely.
2019-07-04 Gary Dismukes <dismukes@adacore.com>
gcc/ada/
* sem_ch6.adb (Analyze_Subprogram_Body_Helper): The special
treatment of calling Mask_Unfrozen_Types must also be done in
the case of an Ignored_Ghost_Entity, because Expander_Active is
False in that case.
gcc/testsuite/
* gnat.dg/ghost5.adb, gnat.dg/ghost5.ads,
gnat.dg/ghost5_parent.ads: New testcase.
From-SVN: r273065
Yannick Moy [Thu, 4 Jul 2019 08:06:45 +0000 (08:06 +0000)]
[Ada] SPARK_Mode Off now allowed inside subprogram
The rule on SPARK_Mode have been modified so that it is now possible to
have a subprogram or package declared with SPARK_Mode Off inside a
subprogram.
2019-07-04 Yannick Moy <moy@adacore.com>
gcc/ada/
* sem_prag.adb (Check_Library_Level_Entity): Update for new rule
on SPARK_Mode.
gcc/testsuite/
* gnat.dg/spark3.adb: New testcase.
From-SVN: r273064
Justin Squirek [Thu, 4 Jul 2019 08:06:40 +0000 (08:06 +0000)]
[Ada] Spurious error on incomplete tagged formal parameter
This patch fixes an issue whereby a check for competing controlling
formals led to a spurious dispatching error due to an incomplete type
being used within a subprogram specification.
2019-07-04 Justin Squirek <squirek@adacore.com>
gcc/ada/
* sem_disp.adb (Check_Controlling_Formals): Obtain the full view
before type comparison.
gcc/testsuite/
* gnat.dg/tagged2.adb, gnat.dg/tagged2.ads: New testcase.
From-SVN: r273063
Ed Schonberg [Thu, 4 Jul 2019 08:06:35 +0000 (08:06 +0000)]
[Ada] Bug in composition of equality for variant records
This patch fixes an omission in the construction of equality routines
for variant records, to take into account user-defined equality
functions for components of the record. Previously the constructed
equality routine for variant records used the predefined equality for
all components, When composavility of equality was introduced for
untagged records, expansion of record equality was modified properly,
but not for the case of variant records, which use a different and more
complex process to build the equality function.
2019-07-04 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* exp_ch4.ads, exp_ch4.adb (Build_Eq_Call): New visible
subprogram, extracted from Expand_Composite_Equality, to handle
properly the composition of equality for variant record types.
* exp_ch3.adb (MAke_Eq_If): Use Build_Eq_Call for each
component, to handle properly the case of a component with a
user-defined equality. Revert to predefined equality if the
user-defined operation is abstract, to maintain compatibility
with older versions,
gcc/testsuite/
* gnat.dg/equal6.adb, gnat.dg/equal6_types.adb,
gnat.dg/equal6_types.ads: New testcase.
From-SVN: r273062
Justin Squirek [Thu, 4 Jul 2019 08:06:30 +0000 (08:06 +0000)]
[Ada] Missing actual for generated initialization procedure
This patch fixes an issue whereby the use of an allocator with a
composite type containing null-excluding components may lead to a
compile time error due to incorrect code generation.
2019-07-04 Justin Squirek <squirek@adacore.com>
gcc/ada/
* exp_ch3.adb (Build_Initialization_Call): Fixup
*_skip_null_excluding_check argument to handle new default.
(Init_Formals): Make *_skip_null_excluding_check formal default
to False
* exp_ch4.adb (Expand_N_Allocator): Add comment to note heavy
code duplication
gcc/testsuite/
* gnat.dg/allocator.adb: New testcase.
From-SVN: r273061
Bob Duff [Thu, 4 Jul 2019 08:06:25 +0000 (08:06 +0000)]
[Ada] Do not create a master unless Tasking_Allowed
2019-07-04 Bob Duff <duff@adacore.com>
gcc/ada/
* sem_ch3.adb (Access_Definition): Do not create a master unless
Tasking_Allowed. Otherwise, this fails on restricted runtimes.
From-SVN: r273060