Commit Graph

180398 Commits

Author SHA1 Message Date
Jan Hubicka
3fd5876793 Strenghten bound for bulitin_constant_p hint.
this patch makes builtin_constant_p hint to combine with other loop hints
we already support.

gcc/ChangeLog:

2020-10-22  Jan Hubicka  <hubicka@ucw.cz>

	PR ipa/97445
	* ipa-inline.c (inline_insns_single): Add hint2 parameter.
	(inline_insns_auto): Add hint2 parameter.
	(can_inline_edge_by_limits_p): Update.
	(want_inline_small_function_p): Update.
	(wrapper_heuristics_may_apply): Update.
2020-10-22 01:42:11 +02:00
David Edelsohn
083c17f86d testsuite: Enable p9-lxvx-stxvx testcases and fold-vec-extract
This patch enables the p9-lxvx-stxvx testcases with appropriate
requirements.  It also adjusts the expected matching instructions
in the fold-vec-extract testcases for BE.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/fold-vec-extract-float.p9.c: rldicl and
	subfic only for target LE.
	* gcc.target/powerpc/fold-vec-extract-longlong.p9.c: xori only
	for target LE.  Adjust mfvsrd and add mfvsrld for BE.
	* gcc.target/powerpc/fold-vec-extract-short.p9.c: vextuhrx for LE.
	vextuhlx for BE.
	* gcc.target/powerpc/p9-lxvx-stxvx-1.c: Remove target.
	* gcc.target/powerpc/p9-lxvx-stxvx-2.c: Remove target.
	* gcc.target/powerpc/p9-lxvx-stxvx-3.c: Remove target. Require
	float128
2020-10-21 16:17:43 -04:00
Jonathan Wakely
945151b7f1 libstdc++: Simplify std::shared_ptr construction from std::weak_ptr
The _M_add_ref_lock() and _M_add_ref_lock_nothrow() members of
_Sp_counted_base are very similar, except that the former throws an
exception when the use count is zero and the latter returns false. The
former (and its callers) can be implemented in terms of the latter.
This results in a small reduction in code size, because throwing an
exception now only happens in one place.

libstdc++-v3/ChangeLog:

	* include/bits/shared_ptr.h (shared_ptr(const weak_ptr&, nothrow_t)):
	Add noexcept.
	* include/bits/shared_ptr_base.h (_Sp_counted_base::_M_add_ref_lock):
	Remove specializations and just call _M_add_ref_lock_nothrow.
	(__shared_count, __shared_ptr): Use nullptr for null pointer
	constants.
	(__shared_count(const __weak_count&)): Use _M_add_ref_lock_nothrow
	instead of _M_add_ref_lock.
	(__shared_count(const __weak_count&, nothrow_t)): Add noexcept.
	(__shared_ptr::operator bool()): Add noexcept.
	(__shared_ptr(const __weak_ptr&, nothrow_t)): Add noexcept.
2020-10-21 21:13:41 +01:00
Richard Biener
84cc3370d6 rs6000: MMA type causes an ICE in ranger pass due to incompatible types
PR97360 shows a problem in how we create our PXI and POI modes that cause
an ICE in the ranger pass.  The problem seems to be that the extra call
to build_distinct_type_copy() also creates new TYPE_{MIN,MAX}_VALUEs that
are not compatible/the same as the base type itself.  The simple "fix" is
to actually remove the unneeded build_distinct_type_copy(), since according
to richi, the types returned from make_unsigned_type() are already distinct.

gcc/

2020-10-21  Richard Biener  <rguenther@suse.de>

	PR target/97360
	* config/rs6000/rs6000-call.c (rs6000_init_builtins): Remove call to
	build_distinct_type_copy().

gcc/testsuite/

2020-10-21  Martin Liska  <mliska@suse.cz>

	PR target/97360
	* gcc.target/powerpc/pr97360.c: New test.

Co-authored-by: Andrew MacLeod <amacleod@redhat.com>
Co-authored-by: Martin Liska <mliska@suse.cz>
2020-10-21 14:29:43 -05:00
Jan Hubicka
caaa218f91 Inline functions with builtin_constant_p more agressively.
This patch implements heuristics that increases inline limits (by the hints
mechanism) for inline functions that use builtin_constant_p on parameter. Those
are very likely intended to be always inlined and simplify after inlining.

The PR is about a function that we used to inline with
 --param inline-insns-single=200 but with new default of 70 for -O2 we no longer
do so.  Hints are currently configured to bump the bound up twice, so we
get limit of 140 that is still not enough to inline the particular testcase
but it should help in general.  I can implement a stronger bump if that seems
useful (maybe it is). The example is bit operation written as a decision chain
with 64 conditions.
This blows up the limit on number of conditions we track per funtion (which is
30) and thus the size/time estimates are not working that well.

gcc/ChangeLog:

	PR ipa/97445
	* ipa-fnsummary.c (ipa_dump_hints): Add INLINE_HINT_builtin_constant_p.
	(ipa_fn_summary::~ipa_fn_summary): Free builtin_constant_p_parms.
	(ipa_fn_summary_t::duplicate): Duplicate builtin_constant_p_parms.
	(ipa_dump_fn_summary): Dump builtin_constant_p_parms.
	(add_builtin_constant_p_parm): New function
	(set_cond_stmt_execution_predicate): Update builtin_constant_p_parms.
	(ipa_call_context::estimate_size_and_time): Set
	INLINE_HINT_builtin_constant_p..
	(ipa_merge_fn_summary_after_inlining): Merge builtin_constant_p_parms.
	(inline_read_section): Read builtin_constant_p_parms.
	(ipa_fn_summary_write): Write builtin_constant_p_parms.
	* ipa-fnsummary.h (enum ipa_hints_vals): Add
	INLINE_HINT_builtin_constant_p.
	* ipa-inline.c (want_inline_small_function_p): Use
	INLINE_HINT_builtin_constant_p.
	(edge_badness): Use INLINE_HINT_builtin_constant_p.

gcc/testsuite/ChangeLog:

	PR ipa/97445
	* gcc.dg/ipa/inlinehint-5.c: New test.
2020-10-21 20:00:22 +02:00
Douglas Rupp
6bd2f2d080 Remove interfering default #undefs from vx-common.h
undef'ing LIB_SPEC and especially LINK_SPEC here is unneccesary and
inteferes with the definition of LINK_SPEC for the bi-arch'd ppc*-vx7r2
target which uses the linux64 LINK_SPEC

2020-10-21  Douglas Rupp  <rupp@adacore.com>

gcc/
	* config/vx-common.h (LINK_SPEC, LIB_SPEC): Remove #undef.
2020-10-21 16:26:38 +00:00
Douglas Rupp
1786798090 Introduce vxworks7r2 support for ppc and ppc64
This change introduces support for the most recent versions
of VxWorks on PowerPC targets, for both 32 and 64 bit thanks
to a bi-arch setup.

The system compilers are essentially configured as Linux
toolchains with only a few specificities and we replicate
that model here.

The most visible specificities are the use of secureplt by
default, the pre-definition of some macros that the system
headers still rely on (_VX_CPU and _VX_CPU_FAMILY, for example),
and of course some variations related to the so VxWorks typical
kernel vs RTP mode distinction.

In addition to the introduction of config.gcc and libgcc
configuration chunks, much inspired by the linux ones, the
change

- Reworks rs6000/vxworks.h file to feature bits common to the
  Vx6 and Vx7 port then a separate section for each, where the
  Vx7 part is very short as we rely on the Linux definitions
  for most things.

- Adjusts the CPU macro predefinitions in CPP_SPEC to resort
  to "_VX_CPU" instead of "CPU" for Vx7, to better match the
  more recent system headers expectations,

- Adds a cpu definition case for e6500.

- Changes to the use SUB3TARGET_OVERRIDE_OPTIONS instead of
  SUBSUBTARGET_OVERRIDE_OPTIONS for specifics, so we don't
  override the Linux's version of the latter for vx7.

2020-10-20  Douglas Rupp  <rupp@adacore.com>

gcc/
	* config.gcc (powerpc*-wrs-vxworks7r*): New case.
	* config/rs6000/vxworks.h: Rework to handle VxWorks7.
	Refactor as common bits + vx6 vs vx7 ones. For the
	latter, rely essentially on the Linux configuration
	and adjust CPU to _VX_CPU in CPP_SPEC. Add a case
	for e6500. Use SUB3TARGET_OVERRIDE_OPTIONS for specifics
	to preserve the Linux SUBSUBTARGET_OVERRIDE_OPTIONS
	for vx7.

libgcc/
	* config.host (powerpc*-wrs-vxworks7*): New case.
	* configure.ac: Handle powerpc*-*-vxworks7* as
	powerpc*-*-linux* for ppc-fp_type.
	* configure: Regenerate.

Co-authored-by: Olivier Hainque <hainque@adacore.com>
2020-10-21 16:26:37 +00:00
David Edelsohn
c8f795cac6 testsuite: enable and fix swaps-p8 testcases
This patch enables swaps-p8 and a few other testcases on non-powerpc64le
systems.  It also cleans up the target requirements for various testcases.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/p9-extract-1.c: Require lp64.
	* gcc.target/powerpc/p9-extract-2.c: Require lp64.
	* gcc.target/powerpc/p9-extract-3.c: Require lp64.
	* gcc.target/powerpc/p9-permute.c: Remove target.
	* gcc.target/powerpc/pr63335.c: Remove target.
	* gcc.target/powerpc/pr87507.c: Remove target.
	* gcc.target/powerpc/swaps-p8-1.c: Require LE and P8.
	* gcc.target/powerpc/swaps-p8-10.c: Remove target. Require P8.
	* gcc.target/powerpc/swaps-p8-11.c: Remove target. Require P8.
	* gcc.target/powerpc/swaps-p8-12.c: Require LE and P8.
	* gcc.target/powerpc/swaps-p8-13.c: Remove target. Require P8.
	* gcc.target/powerpc/swaps-p8-14.c: Remove target. Require P8.
	* gcc.target/powerpc/swaps-p8-15.c: Remove target. Require P8.
	* gcc.target/powerpc/swaps-p8-16.c: Remove target. Require P8.
	* gcc.target/powerpc/swaps-p8-17.c: Require P8.
	* gcc.target/powerpc/swaps-p8-18.c: Remove target. Require P8.
	* gcc.target/powerpc/swaps-p8-19.c: Remove target. Require P8.
	* gcc.target/powerpc/swaps-p8-2.c: Require LE and P8.
	* gcc.target/powerpc/swaps-p8-20.c: Remove target.
	* gcc.target/powerpc/swaps-p8-21.c: Remove target. Require Altivec.
	* gcc.target/powerpc/swaps-p8-22.c: Remove target. Require P8.
	* gcc.target/powerpc/swaps-p8-23.c: Require LE and P8.
	* gcc.target/powerpc/swaps-p8-24.c: Remove target. Require P8.
	* gcc.target/powerpc/swaps-p8-25.c: Require LE and P8.
	* gcc.target/powerpc/swaps-p8-26.c: Remove target. Require P8.
	* gcc.target/powerpc/swaps-p8-27.c: Remove target. Require P8.
	* gcc.target/powerpc/swaps-p8-28.c: Remove target.
	* gcc.target/powerpc/swaps-p8-29.c: Remove target.
	* gcc.target/powerpc/swaps-p8-3.c: Require LE and P8.
	* gcc.target/powerpc/swaps-p8-30.c: Remove target.
	* gcc.target/powerpc/swaps-p8-31.c: Remove target.
	* gcc.target/powerpc/swaps-p8-32.c: Remove target.
	* gcc.target/powerpc/swaps-p8-33.c: Remove target.
	* gcc.target/powerpc/swaps-p8-34.c: Remove target.
	* gcc.target/powerpc/swaps-p8-35.c: Remove target.
	* gcc.target/powerpc/swaps-p8-36.c: Remove target.
	* gcc.target/powerpc/swaps-p8-37.c: Remove target.
	* gcc.target/powerpc/swaps-p8-38.c: Remove target.
	* gcc.target/powerpc/swaps-p8-39.c: Remove target.
	* gcc.target/powerpc/swaps-p8-4.c: Require LE and P8.
	* gcc.target/powerpc/swaps-p8-40.c: Remove target.
	* gcc.target/powerpc/swaps-p8-41.c: Remove target.
	* gcc.target/powerpc/swaps-p8-42.c: Remove target.
	* gcc.target/powerpc/swaps-p8-43.c: Remove target.
	* gcc.target/powerpc/swaps-p8-44.c: Remove target.
	* gcc.target/powerpc/swaps-p8-45.c: Remove target.
	* gcc.target/powerpc/swaps-p8-46.c: Require LE.
	* gcc.target/powerpc/swaps-p8-5.c: Require LE and P8.
	* gcc.target/powerpc/swaps-p8-6.c: Remove target. Require P8.
	* gcc.target/powerpc/swaps-p8-7.c: Remove target. Require P8.
	* gcc.target/powerpc/swaps-p8-8.c: Remove target. Require P8.
	* gcc.target/powerpc/swaps-p8-9.c: Remove target. Require P8.
	* gcc.target/powerpc/vec-cmp.c: Require LP64.
	* gcc.target/powerpc/vec-cmpne.c: Remove target.
	* gcc.target/powerpc/vec-mul.c: Remove target.
	* gcc.target/powerpc/vec-set-char.c: Require LP64.
	* gcc.target/powerpc/vec-set-int.c: Require LP64.
	* gcc.target/powerpc/vec-set-short.c: Require LP64.
	* gcc.target/powerpc/vec-xxpermdi.c: Remove target. Require VSX.
	* gcc.target/powerpc/vsxcopy.c: Remove target. Require VSX.
2020-10-21 11:23:44 -04:00
Jonathan Wakely
a186ab670e libstdc++: Make structured bindings always work for subranges [PR 97512]
The definition of ranges::subrange was moved to the new
<bits/ranges_util.h> header so that it could be used in <algorithm>
without including the whole of <ranges>. However, the tuple-like support
that enables subrange to be used with structured bindings was left in
<ranges>. This is arguably conforming (to use a subrange you should
include <ranges>) but it's inconvenient and probably confusing.

This change makes the tuple-like support available whenever subrange
itself is available.

libstdc++-v3/ChangeLog:

	PR libstdc++/97512
	* include/bits/ranges_util.h (tuple_size<subrange>)
	(tuple_element<I, cv subrange>): Move here from ...
	* include/std/ranges: ... here.
	* testsuite/std/ranges/subrange/97512.cc: New test.
2020-10-21 14:40:54 +01:00
Thomas Rodgers
e957b86ca2 libstdc++: Rebase include/pstl to current upstream
From llvm-project/pstl @ 0b2e0e80d96

libstdc++-v3/ChangeLog:

	* include/pstl/algorithm_impl.h: Update file.
	* include/pstl/execution_impl.h: Likewise.
	* include/pstl/glue_algorithm_impl.h: Likewise.
	* include/pstl/glue_memory_impl.h: Likewise.
	* include/pstl/glue_numeric_impl.h: Likewise.
	* include/pstl/memory_impl.h: Likewise.
	* include/pstl/numeric_impl.h: Likewise.
	* include/pstl/parallel_backend.h: Likewise.
	* include/pstl/parallel_backend_serial.h: Likewise.
	* include/pstl/parallel_backend_tbb.h: Likewise.
	* include/pstl/parallel_backend_utils.h: Likewise.
	* include/pstl/pstl_config.h: Likewise.
	* include/pstl/unseq_backend_simd.h: Likewise.
2020-10-21 06:11:28 -07:00
Tobias Burnus
310fe80bab Fortran: class.c - update vtable comment
gcc/fortran/
	PR fortran/45516
	* class.c: Add _deallocate to the vtable documentation
	comment.
2020-10-21 14:38:44 +02:00
Richard Biener
d940930138 tree-optimization/97500 - avoid SLP backedges for inductions
Inductions are not vectorized as cycle but materialized from SCEV data.
Filling in backedge SLP nodes confuses this process.

2020-10-21  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97500
	* tree-vect-slp.c (vect_analyze_slp_backedges): Do not
	fill backedges for inductions.

	* gfortran.dg/pr97500.f90: New testcase.
2020-10-21 11:43:06 +02:00
liuhongt
9b5d50b7c6 Simplify trivial VEC_COND_EXPR in expander.
gcc/ChangeLog:

	PR target/97506
	* config/i386/i386-expand.c (ix86_expand_sse_movcc): Move
	op_true to dest directly when op_true equals op_false.

gcc/testsuite/ChangeLog:

	PR target/97506
	* gcc.target/i386/pr97506.c: New test.
2020-10-21 17:33:53 +08:00
Jakub Jelinek
5244b4af5e phiopt: Optimize x ? __builtin_clz (x) : 32 in GIMPLE [PR97503]
While we have at the RTL level noce_try_ifelse_collapse combined with
simplify_cond_clz_ctz, that optimization doesn't always trigger because
e.g. on powerpc there is an define_insn to compare a reg against zero and
copy that register to another one and so we end up with a different pseudo
in the simplify_cond_clz_ctz test and punt.

For targets that define C?Z_DEFINED_VALUE_AT_ZERO to 2 for certain modes,
we can optimize it already in phiopt though, just need to ensure that
we transform the __builtin_c?z* calls into .C?Z ifns because my recent
VRP changes codified that the builtin calls are always undefined at zero,
while ifns honor C?Z_DEFINED_VALUE_AT_ZERO equal to 2.
And, in phiopt we already have popcount handling that does pretty much the
same thing, except for always using a zero value rather than the one set
by C?Z_DEFINED_VALUE_AT_ZERO.

So, this patch extends that function to handle not just popcount, but also
clz and ctz.

2020-10-21  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/97503
	* tree-ssa-phiopt.c: Include internal-fn.h.
	(cond_removal_in_popcount_pattern): Rename to ...
	(cond_removal_in_popcount_clz_ctz_pattern): ... this.  Handle not just
	popcount, but also clz and ctz if it has C?Z_DEFINED_VALUE_AT_ZERO 2.

	* gcc.dg/tree-ssa/pr97503.c: New test.
2020-10-21 10:54:47 +02:00
Richard Biener
028a407463 Simplify CFG copying tables
This simplifies the maps between original and new basic blocks and
loops as used for CFG copying.  Instead of using a pointer hash
table to allocated mapping entries use a hash_map with int_hash,
removing the indirection and code duplication.  We can use -1 and
-2 as empty/deleted values as those are not valid basic-block
indices or loop numbers.

2020-10-21  Richard Biener  <rguenther@suse.de>

	* cfg.c (htab_bb_copy_original_entry): Remove.
	(bb_copy_hasher): Likewise.
	(bb_original, bb_copy, loop_copy): Use
	hash_map<int_hash<int, -1, -2>, int>.
	(original_copy_bb_pool): Remove.
	(initialize_original_copy_tables): Adjust.
	(reset_original_copy_tables): Likewise.
	(free_original_copy_tables): Likewise.
	(original_copy_tables_initialized_p): Likewise.
	(copy_original_table_clear): Simplify.
	(copy_original_table_set): Likewise.
	(get_bb_original): Likewise.
	(get_bb_copy): Likewise.
	(get_loop_copy): Likewise.
2020-10-21 10:45:08 +02:00
Richard Biener
4fa5dc951e Separate new_edges compute in copy_bbs
This separates out a loop finding new_edges from edges in copy_bbs,
making its complexity cheaper overall from total number of succs in
copied bbs times num_edges to num_edges times the complexity of
find_edge.

2020-10-21  Richard Biener  <rguenther@suse.de>

	* cfghooks.c (copy_bbs): Split out loop computing new_edges.
2020-10-21 10:45:08 +02:00
Aldy Hernandez
878315ae48 Adjust overflow for invariants in bounds_of_var_in_loop.
Invariants returned from SCEV can have TREE_OVERFLOW set.  Clear the
overflow as we do with the rest of the values returned from this
function.

gcc/ChangeLog:

	* gimple-range.cc (gimple_ranger::range_of_ssa_name_with_loop_info):
	Remove TREE_OVERFLOW special case.
	* vr-values.c (bounds_of_var_in_loop): Adjust overflow for
	invariants.
2020-10-21 10:44:10 +02:00
Jakub Jelinek
121a8812c4 libgomp: Hopefully avoid false positive warnings in env.c on solaris
> the patch also breaks bootstrap on both i386-pc-solaris2.11 and
> sparc-sun-solaris2.11:
>
> /vol/gcc/src/hg/master/local/libgomp/env.c: In function 'initialize_env':
> /vol/gcc/src/hg/master/local/libgomp/env.c:414:16: error: 'new_offload' may be used uninitialized in this function [-Werror=maybe-uninitialized]
>   414 |       *offload = new_offload;
>       |       ~~~~~~~~~^~~~~~~~~~~~~
> /vol/gcc/src/hg/master/local/libgomp/env.c:384:30: note: 'new_offload' was declared here
>   384 |   enum gomp_target_offload_t new_offload;
>       |                              ^~~~~~~~~~~

I can't reproduce that, but I fail to see why we need two separate
variables, one with actual value and one tracking if the value is valid.

So, I'm going with:

2020-10-21  Jakub Jelinek  <jakub@redhat.com>

	* env.c (parse_target_offload): Change new_offload var type to int,
	preinitialize to -1, remove found var and test new_offload != -1
	instead of found.
2020-10-21 10:21:52 +02:00
Aldy Hernandez
bae73ca522 Move simplify_cond_using_ranges_2 to tree-vrp.c
This was slated to be moved last year, as its only use is in tree-vrp.c

There are no functional changes.  It's just a move and a rename.

gcc/ChangeLog:

	* vr-values.h: Remove simplify_cond_using_ranges_2.
	(range_fits_type_p): New.
	* vr-values.c (range_fits_type_p): Remove static qualifier.
	(vrp_simplify_cond_using_ranges): Move...
	* tree-vrp.c (vrp_simplify_cond_using_ranges): ...to here.
2020-10-21 09:47:27 +02:00
Martin Liska
6c5b08a2ca libsanitizer: add test-case
gcc/testsuite/ChangeLog:

	PR sanitizer/97414
	* g++.dg/asan/pr97414.C: New test.
2020-10-21 09:28:56 +02:00
Martin Liska
b69f33f477 ASAN: Support detect_invalid_pointer_pairs=1 with detect_stack_use_after_return=1
Do not crash when AsanThread::GetStackVariableShadowStart does not find
a variable for a pointer on a shadow stack.

Cherry-pick from ad2be02a833e56f7fe280797280b219eb3312621.

Differential Revision: https://reviews.llvm.org/D89552
2020-10-21 09:27:08 +02:00
Eric Botcazou
38aca14a43 [Ada] Support of the Ada.Text_IO hierarchy for 128-bit types
gcc/ada/

	* Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add a-llltio, a-lllwti,
	a-lllzti and remove a-timoau, a-wtmoau and a-ztmoau.
	(GNATRTL_128BIT_PAIRS): Add a-tiinio.adb, a-timoio.adb, a-wtinio.adb,
	a-wtmoio.adb, a-ztinio.adb and a-ztmoio.adb.
	* impunit.adb (Non_Imp_File_Names_95): Add a-llltio, a-lllwti and
	a-lllzti.
	* krunch.ads: Document trick for Ada.Long_Long_Long_Integer_*_IO.
	* krunch.adb (Krunch): Add trick for Ada.Long_Long_Long_Integer_*_IO.
	* libgnat/a-llltio.ads: Instantiate Ada.Text_IO.Integer_IO.
	* libgnat/a-lllwti.ads: Instantiate Ada.Wide_Text_IO.Integer_IO.
	* libgnat/a-lllzti.ads: Instantiate Ada.Wide_Wide_Text_IO.Integer_IO.
	* libgnat/a-tigeau.ads (Load_Integer): New procedure.
	* libgnat/a-tigeau.adb (Load_Integer): Likewise.
	* libgnat/a-tiinau.ads, libgnat/a-tiinau.adb: Change to generic
	package.
	* libgnat/a-tiinio.adb: Instantiate it.
	* libgnat/a-tiinio__128.adb: Likewise.
	* libgnat/a-timoau.ads, libgnat/a-timoau.adb: Change to generic
	package.
	* libgnat/a-timoio.adb: Instantiate it.
	* libgnat/a-timoio__128.adb: Likewise.
	* libgnat/a-wtgeau.ads (Load_Integer): New procedure.
	* libgnat/a-wtgeau.adb (Load_Integer): Likewise.
	* libgnat/a-wtinau.ads, libgnat/a-wtinau.adb: Change to generic
	package.
	* libgnat/a-wtinio.adb: Instantiate it.
	* libgnat/a-wtinio__128.adb: Likewise.
	* libgnat/a-wtmoau.ads, libgnat/a-wtmoau.adb: Change to generic
	package.
	* libgnat/a-wtmoio.adb: Instantiate it.
	* libgnat/a-wtmoio__128.adb: Likewise.
	* libgnat/a-ztgeau.ads (Load_Integer): New procedure.
	* libgnat/a-ztgeau.adb (Load_Integer): Likewise.
	* libgnat/a-ztinau.ads, libgnat/a-ztinau.adb: Change to generic
	package.
	* libgnat/a-ztinio.adb: Instantiate it.
	* libgnat/a-ztinio__128.adb: Likewise.
	* libgnat/a-ztmoau.ads, libgnat/a-ztmoau.adb: Change to generic
	package.
	* libgnat/a-ztmoio.adb: Instantiate it.
	* libgnat/a-ztmoio__128.adb: Likewise.
2020-10-21 03:22:51 -04:00
Eric Botcazou
4cd2e6f249 [Ada] Fix problematic placement of freeze node after instantiation
gcc/ada/

	* sem_ch12.adb (Freeze_Subprogram_Body): Do not move the freeze
	node of the package body enclosing the instance when its parent
	is in the same declarative part as the freeze node of the parent.
2020-10-21 03:22:50 -04:00
Steve Baird
3d3378fbb2 [Ada] Implement missing function result finalization.
gcc/ada/

	* exp_ch6.adb (Insert_Post_Call_Actions): When a function's
	result type requires finalization and we decide to make copy of
	a call to the function and subsequently refer only to the copy,
	then don't forget to finalize the original function result
	object.
2020-10-21 03:22:50 -04:00
Eric Botcazou
cb7584a41d [Ada] Support of attributes Image, Put_Image, Val and Width for 128-bit types
gcc/ada/

	* Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add s-widint,
	s-widthi, s-widuns, s-widuns.
	(GNATRTL_128BIT_OBJS): Add s-imglllb, s-imgllli, s-imglllu, s-imglllw,
	s-valllli, s-vallllu, s-widllli, s-widlllu.
	* exp_imgv.adb (Expand_Image_Attribute): Deal with 128-bit types.
	(Expand_Value_Attribute): Likewise.
	(Expand_Width_Attribute): Likewise.
	* exp_put_image.adb (Build_Elementary_Put_Image_Call): Likewise.
	* krunch.adb (Krunch): Deal with s-img, s-val and s-wid prefixes.
	* rtsfind.ads (RTU_Id): Add System_Img_LLLI, System_Img_LLLU,
	System_Val_LLLI, System_Val_LLL, System_Wid_Int, System_Wid_LLLI,
	System_Wid_LLLU, System_Wid_Uns).
	(RE_Id): Add RE_Image_Long_Long_Long_Integer,
	RE_Image_Long_Long_Long_Unsigned,
	RE_Put_Image_Long_Long_Long_Integer,
	RE_Put_Image_Long_Long_Long_Unsigned,
	RE_Long_Long_Long_Unsigned, RE_Value_Long_Long_Long_Integer,
	RE_Value_Long_Long_Long_Unsigned, RE_Width_Integer,
	RE_Width_Long_Long_Long_Integer, RE_Width_Long_Long_Long_Unsigned,
	RE_Width_Unsigned, RE_Image_Long_Long_Long_Integer,
	RE_Image_Long_Long_Long_Unsigned, RE_Put_Image_Long_Long_Long_Integer,
	RE_Put_Image_Long_Long_Long_Unsigned, RE_Long_Long_Long_Unsigned,
	RE_Value_Long_Long_Long_Integer, RE_Value_Long_Long_Long_Unsigned,
	RE_Width_Integer, RE_Width_Long_Long_Long_Integer,
	RE_Width_Long_Long_Long_Unsigned, RE_Width_Unsigned.
	* libgnat/s-imageb.ads, libgnat/s-imageb.adb: New generic
	package.
	* libgnat/s-imagei.ads, libgnat/s-imagei.adb: Likewise.
	* libgnat/s-imageu.ads, libgnat/s-imageu.adb: Likewise.
	* libgnat/s-imagew.ads, libgnat/s-imagew.adb: Likewise.
	* libgnat/s-imgbiu.ads: Instantiate System.Image_B.
	* libgnat/s-imgbiu.adb: Add pragma No_Body.
	* libgnat/s-imgint.ads: Instantiate System.Image_I.
	* libgnat/s-imgint.adb: Add pragma No_Body.
	* libgnat/s-imgllb.ads: Instantiate System.Image_B.
	* libgnat/s-imgllb.adb: Add pragma No_Body0
	* libgnat/s-imglli.ads: Instantiate System.Image_I.
	* libgnat/s-imglli.adb: Add pragma No_Body.
	* libgnat/s-imglllb.ads: Instantiate System.Image_B.
	* libgnat/s-imgllli.ads: Instantiate System.Image_I.
	* libgnat/s-imglllu.ads: Instantiate System.Image_U.
	* libgnat/s-imglllw.ads: Instantiate System.Image_W.
	* libgnat/s-imgllu.ads: Instantiate System.Image_U.
	* libgnat/s-imgllu.adb: Add pragma No_Body.
	* libgnat/s-imgllw.ads: Instantiate System.Image_W.
	* libgnat/s-imgllw.adb: Add pragma No_Body.
	* libgnat/s-imgrea.adb: Remove clauses for System.Unsigned_Types.
	* libgnat/s-imguns.ads: Instantiate System.Image_U.
	* libgnat/s-imguns.adb: Add pragma No_Body.
	* libgnat/s-imgwiu.ads: Instantiate System.Image_W.
	* libgnat/s-imgwiu.adb: Add pragma No_Body.
	* libgnat/s-putima.ads (Long_Long_Long_Unsigned): New subtype.
	(Put_Image_Long_Long_Long_Unsigned): New procedure.
	* libgnat/s-putima.adb (Small): Rename to Integer_Images.
	(Large): Rename to LL_Integer_Images.
	(LLL_Integer_Images): New instantiation.
	(Put_Image_Long_Long_Long_Integer): New renaming.
	(Put_Image_Long_Long_Long_Unsigned): Likewise.
	* libgnat/s-valint.ads: Instantiate System.Value_I.
	* libgnat/s-valint.adb: Add pragma No_Body.
	* libgnat/s-vallli.ads: Instantiate System.Value_I.
	* libgnat/s-vallli.adb: Add pragma No_Body.
	* libgnat/s-valllli.ads: Instantiate System.Value_I.
	* libgnat/s-vallllu.ads: Instantiate System.Value_U.
	* libgnat/s-valllu.ads: Instantiate System.Value_U.
	* libgnat/s-valllu.adb: Add pragma No_Body.
	* libgnat/s-valuei.ads, libgnat/s-valuei.adb: New generic
	package.
	* libgnat/s-valueu.ads, libgnat/s-valueu.adb: Likewise.
	* libgnat/s-valuns.ads: Instantiate System.Value_U.
	* libgnat/s-valuns.adb: Add pragma No_Body.
	* libgnat/s-widint.ads: Instantiate System.Width_I.
	* libgnat/s-widlli.ads: Likewise.
	* libgnat/s-widlli.adb: Add pragma No_Body.
	* libgnat/s-widllli.ads: Instantiate System.Width_I.
	* libgnat/s-widlllu.ads: Instantiate System.Width_U.
	* libgnat/s-widllu.ads: Likewise.
	* libgnat/s-widllu.adb: Add pragma No_Body.
	* libgnat/s-widthi.ads, libgnat/s-widthi.adb: New generic
	package.
	* libgnat/s-widthu.ads, libgnat/s-widthu.adb: Likewise.
	* libgnat/s-widuns.ads: Instantiate System.Width_U.
2020-10-21 03:22:50 -04:00
Eric Botcazou
a219511d1d [Ada] Work around missing Long_Long_Long_Size entry in .atp file
gcc/ada/

	* set_targ.adb (DTN): Fix oversight.
	(Read_Target_Dependent_Values): Do not error out on missing
	Long_Long_Long_Size entry and reuse Long_Long_Size for it.
2020-10-21 03:22:50 -04:00
Piotr Trojanek
4270e94541 [Ada] Fix analysis of iterated component expression with null range
gcc/ada/

	* exp_aggr.adb (Gen_Loop): Analyze copy of the expression in the
	scope of the implicit loop with name of the index parameter
	visible.
2020-10-21 03:22:49 -04:00
Eric Botcazou
a5476382a7 [Ada] Basic support for 128-bit types
gcc/ada/

	* Makefile.rtl (GNATRTL_128BIT_PAIRS): New variable.
	(GNATRTL_128BIT_OBJS): Likewise.
	(Windows): In 64-bit mode, add the former to LIBGNAT_TARGET_PAIRS and
	the latter to EXTRA_GNATRTL_NONTASKING_OBJS.
	(x86_64/linux): Likewise, but unconditionally.
	(GNATRTL_NONTASKING_OBJS): Add s-aridou, s-exponn, s-expont,
	s-exponu.
	* ada_get_targ.adb (Get_Long_Long_Long_Size): New function.
	* checks.adb (Apply_Arithmetic_Overflow_Strict): Use Integer_Type_For
	to find an appropriate integer type; if it does not exist and the max
	integer size is larger than 64, use the 128-bit arithmetic routines.
	* cstand.adb (Create_Standard): Build Standard_Long_Long_Long_Integer
	and its base type.  Use it for Etype of Any_Integer, Any_Modular and
	Any_Numeric.  Use its size for Build Standard_Long_Long_Long_Unsigned
	and Universal_Integer.
	(Print_Standard): Print Long_Long_Long_Integer.
	* exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_Mod>: Adjust
	comment.
	* exp_ch3.adb (Simple_Init_Initialize_Scalars_Type): Deal with 128-bit
	types.
	* exp_ch4.adb (Expand_Array_Comparison): Likewise.
	(Expand_N_Op_Expon): Likewise.
	(Narrow_Large_Operation): Likewise.
	* exp_dbug.adb (Bounds_Match_Size): Handle 128-bit size.
	* exp_fixd.adb (Build_Double_Divide_Code): Use RE_Double_Divide64.
	* exp_intr.adb (Expand_Binary_Operator_Call): Handle 128-bit size.
	* exp_pakd.ads (E_Array): Extend range to 127.
	(Bits_Id): Fill in up to 127.
	(Get_Id): Likewise.
	(GetU_Id): Likewise.
	(Set_Id): Likewise.
	(SetU_Id): Likewise.
	* exp_pakd.adb (Revert_Storage_Order): Handle 128-bit size.
	* exp_util.adb (Integer_Type_For): Likewise.
	(Small_Integer_Type_For): Likewise.
	* fname.adb (Is_Predefined_File_Name): Do not return False for names
	larger than 12 characters if they start with "s-".
	* freeze.adb (Adjust_Esize_For_Alignment): Change the maximum value
	to System_Max_Integer_Size.
	(Check_Suspicious_Modulus): Adjust comment.
	(Freeze_Entity): Likewise.
	* get_targ.ads (Get_Long_Long_Long_Size): New function.
	* get_targ.adb (Get_Long_Long_Long_Size): Likewise.
	(Width_From_Size): Deal with 128-bit size.
	* gnat1drv.adb (Adjust_Global_Switches): Deal with 128-bit types.
	* impunit.adb (Get_Kind_Of_File): Bump buffer size.  Accept files with
	13 characters if they start with 's'.  Compare slice of Buffer.
	(Not_Impl_Defined_Unit): Accept files with 13 characters if they start
	with 's'.
	* krunch.ads: Document length for 128-bit support units.
	* krunch.adb (Krunch): Set length to 9 for 128-bit support units.
	* layout.adb (Layout_Type): Use System_Max_Integer_Size as alignment
	limit.
	* rtsfind.ads (RTU_Id): Add System_Arith_128,
	System_Compare_Array_Signed_128, System_Compare_Array_Unsigned_128,
	System_Exn_LLLI, System_Exp_LLLU, System_Pack_[65..127].
	(RE_Id): Add RE_Integer_128, RE_Unsigned_128, RE_Add_With_Ovflo_Check128
	RE_Multiply_With_Ovflo_Check128, RE_Subtract_With_Ovflo_Check128,
	RE_Bswap_128, RE_Compare_Array_S128, RE_Compare_Array_U128,
	RE_Exn_Long_Long_Long_Integer, RE_Exp_Long_Long_Long_Integer,
	RE_Exp_Long_Long_Long_Unsigned, RE_Bits_[65-127], RE_Get_[65-127],
	RE_Set_[65-127], RE_IS_Is16, RE_IS_Iu16, RE_Integer_128 and
	RE_Unsigned_128.  Rename RE_Add_With_Ovflo_Check, RE_Double_Divide,
	RE_Multiply_With_Ovflo_Check, RE_Scaled_Divide and
	RE_Subtract_With_Ovflo_Check.  Remove RE_IS_Iz1, RE_IS_Iz2, RE_IS_Iz4,
	RE_IS_Iz8, RE_Long_Unsigned, RE_Short_Unsigned, RE_Short_Short_Unsigned
	(RE_Unit_Table): Likewise.
	* sem_aux.adb (Corresponding_Unsigned_Type): Deal with a size equal to
	that of Standard_Long_Long_Long_Integer.
	(First_Subtype): Deal with Standard_Long_Long_Long_Integer'Base.
	* sem_ch13.adb (Analyze_Attribute_Definition_Clause) <Attribute_Size>:
	Check the size against powers of 2 and System_Max_Integer_Size for
	objects as well.
	(Set_Enum_Esize): Deal with 128-bit bounds.
	* sem_ch3.adb (Set_Modular_Size): Handle 128-bit size.
	(Modular_Type_Declaration): Deal with 128-bit types.
	(Signed_Integer_Type_Declaration): Support derivation from
	Standard_Long_Long_Long_Integer.
	* sem_ch4.adb (Analyze_Mod): Handle 128-bit modulus.
	* sem_intr.adb: Add with and use clauses for Ttypes.
	(Check_Shift): Handle 128-bit size and modulus.
	* sem_prag.adb (Analyze_Pragma) <Pragma_Initialize_Scalars>: Deal
	with Signed_128 and Unsigned_128.
	(Analyze_Integer_Value): Handle 128-bit size.
	* sem_util.ads (Addressable): Adjust description.
	* sem_util.adb (Addressable): Return true for 128 if the system
	supports 128 bits.
	(Set_Invalid_Binder_Values): Deal with Signed_128 and Unsigned_128.
	* set_targ.ads (Long_Long_Long_Size): New variable.
	* set_targ.adb (S_Long_Long_Long_Size): New constant.
	(DTN): Add entry for S_Long_Long_Long_Size.
	(DTV): Add entry for Long_Long_Long_Size.
	(Set_Targ): Set Long_Long_Long_Size.
	* snames.ads-tmpl (Name_Max_Integer_Size): New attribute name.
	(Name_Signed_128): New scalar name.
	(Name_Unsigned_128): Likewise.
	(Scalar_Id): Adjust.
	(Integer_Scalar_Id): Likewise.
	(Attribute_Id): Add Attribute_Max_Integer_Size.
	* stand.ads (Standard_Entity_Type): Add S_Long_Long_Long_Integer.
	(Standard_Long_Long_Long_Integer): New renaming.
	(Universal_Integer): Adjust description.
	(Standard_Long_Long_Long_Unsigned): New variable.
	* switch-c.adb (Scan_Front_End_Switches): Deal with -gnate128.
	* ttypes.ads (Standard_Long_Long_Long_Integer_Size): New variable.
	(Standard_Long_Long_Long_Integer_Width): Likewise.
	(System_Max_Integer_Size): Turn into variable.
	(System_Max_Binary_Modulus_Power): Likewise.
	* uintp.ads (Uint_127): New constant.
	* uintp.adb (UI_Power_2): Extednd to 128.
	(UI_Power_10): Likewise.
	(UI_Expon): Deal with exponent up to 128 specially.
	* usage.adb (Write_Switch_Char): Print -gnate128 switch.
	* libgnat/a-tifiio.adb (Put_Scaled): Call Scaled_Divide64.
	* libgnat/interfac__2020.ads (Integer_128): New integer type.
	(Unsigned_128): New modular type.
	(Shift_Left, Shift_Right, Shift_Right_Arithmetic, Rotate_Left,
	Rotate_Right): New intrinsic functions operating on it.
	* libgnat/s-aridou.ads, libgnat/s-aridou.adb: New generic
	package.
	* libgnat/s-arit64.ads, libgnat/s-arit64.adb: Instantiate
	System.Arithmetic_Double.
	* libgnat/s-arit128.ads, libgnat/s-arit128.adb: Likewise.
	* libgnat/s-bytswa.ads: Add with clause for Interfaces, use subtypes
	of unsigned types defined in Interfaces and add Bswap_128.
	* libgnat/s-casi128.ads, libgnat/s-casi128.adb: New package.
	* libgnat/s-caun128.ads, libgnat/s-caun128.adb: Likewise.
	* libgnat/s-exnint.ads: Instantiate System.Exponn.
	* libgnat/s-exnint.adb: Add pragma No_Body.
	* libgnat/s-exnlli.ads: Instantiate System.Exponn.
	* libgnat/s-exnlli.adb: Add pragma No_Body.
	* libgnat/s-exnllli.ads: Instantiate System.Exponn.
	* libgnat/s-expint.ads: Likewise.
	* libgnat/s-expint.adb: Add pragma No_Body.
	* libgnat/s-explli.ads: Instantiate System.Exponn.
	* libgnat/s-explli.adb: Add pragma No_Body.
	* libgnat/s-expllli.ads: Instantiate System.Exponn.
	* libgnat/s-explllu.ads: Instantiate System.Exponu.
	* libgnat/s-expllu.ads: Likewise.
	* libgnat/s-expllu.adb: Add pragma No_Body.
	* libgnat/s-exponn.ads, libgnat/s-exponn.adb: New generic
	function.
	* libgnat/s-expont.ads, libgnat/s-expont.adb: Likewise.
	* libgnat/s-exponu.ads, libgnat/s-exponu.adb: Likewise.
	* libgnat/s-expuns.ads, libgnat/s-expuns.adb: Likewise.
	* libgnat/s-pack65.ads, libgnat/s-pack65.adb: New package.
	* libgnat/s-pack66.ads, libgnat/s-pack66.adb: New package.
	* libgnat/s-pack67.ads, libgnat/s-pack67.adb: New package.
	* libgnat/s-pack68.ads, libgnat/s-pack68.adb: New package.
	* libgnat/s-pack69.ads, libgnat/s-pack69.adb: New package.
	* libgnat/s-pack70.ads, libgnat/s-pack70.adb: New package.
	* libgnat/s-pack71.ads, libgnat/s-pack71.adb: New package.
	* libgnat/s-pack72.ads, libgnat/s-pack72.adb: New package.
	* libgnat/s-pack73.ads, libgnat/s-pack73.adb: New package.
	* libgnat/s-pack74.ads, libgnat/s-pack74.adb: New package.
	* libgnat/s-pack75.ads, libgnat/s-pack75.adb: New package.
	* libgnat/s-pack76.ads, libgnat/s-pack76.adb: New package.
	* libgnat/s-pack77.ads, libgnat/s-pack77.adb: New package.
	* libgnat/s-pack78.ads, libgnat/s-pack78.adb: New package.
	* libgnat/s-pack79.ads, libgnat/s-pack79.adb: New package.
	* libgnat/s-pack80.ads, libgnat/s-pack80.adb: New package.
	* libgnat/s-pack81.ads, libgnat/s-pack81.adb: New package.
	* libgnat/s-pack82.ads, libgnat/s-pack82.adb: New package.
	* libgnat/s-pack83.ads, libgnat/s-pack83.adb: New package.
	* libgnat/s-pack84.ads, libgnat/s-pack84.adb: New package.
	* libgnat/s-pack85.ads, libgnat/s-pack85.adb: New package.
	* libgnat/s-pack86.ads, libgnat/s-pack86.adb: New package.
	* libgnat/s-pack87.ads, libgnat/s-pack87.adb: New package.
	* libgnat/s-pack88.ads, libgnat/s-pack88.adb: New package.
	* libgnat/s-pack89.ads, libgnat/s-pack89.adb: New package.
	* libgnat/s-pack90.ads, libgnat/s-pack90.adb: New package.
	* libgnat/s-pack91.ads, libgnat/s-pack91.adb: New package.
	* libgnat/s-pack92.ads, libgnat/s-pack92.adb: New package.
	* libgnat/s-pack93.ads, libgnat/s-pack93.adb: New package.
	* libgnat/s-pack94.ads, libgnat/s-pack94.adb: New package.
	* libgnat/s-pack95.ads, libgnat/s-pack95.adb: New package.
	* libgnat/s-pack96.ads, libgnat/s-pack96.adb: New package.
	* libgnat/s-pack97.ads, libgnat/s-pack97.adb: New package.
	* libgnat/s-pack98.ads, libgnat/s-pack98.adb: New package.
	* libgnat/s-pack99.ads, libgnat/s-pack99.adb: New package.
	* libgnat/s-pack100.ads, libgnat/s-pack100.adb: New package.
	* libgnat/s-pack101.ads, libgnat/s-pack101.adb: New package.
	* libgnat/s-pack102.ads, libgnat/s-pack102.adb: New package.
	* libgnat/s-pack103.ads, libgnat/s-pack103.adb: New package.
	* libgnat/s-pack104.ads, libgnat/s-pack104.adb: New package.
	* libgnat/s-pack105.ads, libgnat/s-pack105.adb: New package.
	* libgnat/s-pack106.ads, libgnat/s-pack106.adb: New package.
	* libgnat/s-pack107.ads, libgnat/s-pack107.adb: New package.
	* libgnat/s-pack108.ads, libgnat/s-pack108.adb: New package.
	* libgnat/s-pack109.ads, libgnat/s-pack109.adb: New package.
	* libgnat/s-pack110.ads, libgnat/s-pack110.adb: New package.
	* libgnat/s-pack111.ads, libgnat/s-pack111.adb: New package.
	* libgnat/s-pack112.ads, libgnat/s-pack112.adb: New package.
	* libgnat/s-pack113.ads, libgnat/s-pack113.adb: New package.
	* libgnat/s-pack114.ads, libgnat/s-pack114.adb: New package.
	* libgnat/s-pack115.ads, libgnat/s-pack115.adb: New package.
	* libgnat/s-pack116.ads, libgnat/s-pack116.adb: New package.
	* libgnat/s-pack117.ads, libgnat/s-pack117.adb: New package.
	* libgnat/s-pack118.ads, libgnat/s-pack118.adb: New package.
	* libgnat/s-pack119.ads, libgnat/s-pack119.adb: New package.
	* libgnat/s-pack120.ads, libgnat/s-pack120.adb: New package.
	* libgnat/s-pack121.ads, libgnat/s-pack121.adb: New package.
	* libgnat/s-pack122.ads, libgnat/s-pack122.adb: New package.
	* libgnat/s-pack123.ads, libgnat/s-pack123.adb: New package.
	* libgnat/s-pack124.ads, libgnat/s-pack124.adb: New package.
	* libgnat/s-pack125.ads, libgnat/s-pack125.adb: New package.
	* libgnat/s-pack126.ads, libgnat/s-pack126.adb: New package.
	* libgnat/s-pack127.ads, libgnat/s-pack127.adb: New package.
	* libgnat/s-rannum.ads (Random): New function returning 128-bit.
	* libgnat/s-rannum.adb (Random): Implement it.
	* libgnat/s-scaval.ads: Add with clause for Interfaces, use subtypes
	of unsigned types defined in Interfaces.
	* libgnat/s-scaval.adb: Add use clause for Interfaces.
	* libgnat/s-scaval__128.ads, libgnat/s-scaval__128.adb: New
	package.
	* libgnat/s-unstyp.ads (Long_Long_Long_Unsigned): New modular type.
	(Shift_Left, Shift_Right, Shift_Right_Arithmetic, Rotate_Left,
	Rotate_Right): New intrinsic functions operating on it.

gcc/testsuite/

	* gnat.dg/multfixed.adb: Update expected exception message.
2020-10-21 03:22:49 -04:00
Eric Botcazou
6551e4cb27 [Ada] Document Long_Long_Long_Integer in implementation characteristics
gcc/ada/

	* doc/gnat_rm/implementation_defined_characteristics.rst: Add
	Long_Long_Long_Integer to the list of predefined integer types.
	* gnat_rm.texi: Regenerate.
2020-10-21 03:22:49 -04:00
Yannick Moy
bdf5a98385 [Ada] Fix target configuration file used for CodePeer/SPARK for new ints
gcc/ada/

	* ada_get_targ.adb (Width_From_Size): Add case for 128 bits.
	Reorder declarations in the same order as get_targ.adb to
	facilitate diffs.
2020-10-21 03:22:48 -04:00
Piotr Trojanek
74580e1b05 [Ada] Refactor repeated calls to Etype in aggregate expansion
gcc/ada/

	* exp_aggr.adb (Expand_N_Aggregate): Refactor repeated calls to
	Etype (N).
	(Build_Array_Aggr_Code): Fix whitespace.
2020-10-21 03:22:48 -04:00
Dmitriy Anisimkov
3c2d338129 [Ada] Fix bootstrap with old GCC
gcc/ada/

	* adaint.c (__gnat_file_time): Use regular arithmetic instead of
	__builtin_*_overflow routines if GCC version 4 or less and
	compiler is g++.
2020-10-21 03:22:48 -04:00
Piotr Trojanek
ed9a428d02 [Ada] Fix crash on illegal OTHERS in iterated_component_association
gcc/ada/

	* sem_aggr.adb (Resolve_Array_Aggregate): Use Choice_List, which
	internally calls either Choice or Discrete_Choices, depending on
	the context.
2020-10-21 03:22:48 -04:00
Piotr Trojanek
e22557ee95 [Ada] Use index parameter for iterated_component_association
gcc/ada/

	* sem_aggr.adb (Resolve_Iterated_Component_Association): Use
	existing defining identifier for index parameter.
2020-10-21 03:22:47 -04:00
Javier Miranda
f1722339ef [Ada] Wrong detection of potentially blocking call in protected object
gcc/ada/

	* exp_ch9.adb (Build_Task_Activation_Call): Do not generate a
	call to activate tasks if we are within the scope of a protected
	type and pragma Detect_Blocking is active.
2020-10-21 03:22:47 -04:00
Liaiss Merzougue
d0d9f29d52 [Ada] Codepeer remarks take into account
gcc/ada/

	* libgnat/s-carsi8.adb (Compare_Array_S8): Add pragma Assert to
	avoid warning concerning Left_Len and RighLen value regarding
	Bytes_Compared_As_Words.
	* libgnat/s-carun8.adb (Compare_Array_U8): Likewise.
	* libgnat/s-geveop.adb (Binary_Operation, Unary_Operation): Add
	pragma Assert concerning divide by 0 warning.
	* libgnat/s-imgcha.adb (Image_Character): Code update to prevent
	constant operation warning.
	(Image_Character): Add pragma Assert concerning the unchecked
	String size.
	* libgnat/s-imgdec.adb
	(Round): Upate loop code to prevent warning concerning
	Digs'First access.
	(Round): Add pragma assert.
	(Set): Add pragma Assert for the unchecked string size.
	(Set_Digits): Add pragma Assert for the input range.
	(Set_Decimal_Digits): Add pragma Assert.
	(Set_Blank_And_Sign): Add pragma Assert for the input range.
	* libgnat/s-arit64.adb (DoubleDivide): Add pragma Assert
	concerning Du /= 0.
	(Multiply_With_Ovflo_Check): Add pragma Annotate to avoid
	warning concerning unsigned -> signed conversion.
	* libgnat/s-imguns.adb (Set_Image_Unsigned): Add pragma Assert
	to prevent overflow check warning.  Add pragma Assert for
	controlling S'First = 1.
	* libgnat/s-imgrea.adb (Image_Floating_Point, Set, Set_Digs,
	Set_Special_Fill, Convert_Integer): Add pragma Annotate to
	prevent overflow check warning.
	(Set_Image_Real): Add pragma Annotate to avoid dead code warning
	on float check. Add pragma Assert to prevent overflow check
	warning.
	* libgnat/s-imgwiu.adb (Set_Digits, Set_Image_Width_Unsigned):
	Add pragma assert to prevent overflow check warning.
	* libgnat/s-imgllu.adb (Set_Image_Long_Long_Unsigned): Add
	pragma assert to prevent overflow check warning.
	* libgnat/s-imgint.adb (Set_Digits): Add Assert for input
	constraint and to prevent overflow check warning, create
	Non_Positive subtype, and change the T parameter as Non_Positive
	instead Integer.
	(Set_Image_Integer): Add pragma assert to prevent overflow check
	warning.
	* libgnat/s-imglli.adb (Set_Digits): Add Assert for input
	constraint and to prevent overflow check warning, create
	Non_Positive subtype, and change the T parameter as Non_Positive
	instead Integer.
	(Set_Image_Long_Long_Integer): Add pragma assert to prevent
	overflow check warning.
	* libgnat/s-fatgen.adb (Decompose, Pred, Succ): Add pragma
	Annotate to prevent dead code due to invalid float check.
	* libgnat/s-imenne.adb (Image_Enumeration_8,
	Image_Enumeration_16, Image_Enumeration_32): Add pragma Assert
	to prevent overflow check warning.  Add Names_Index subtype for
	restricting Index_table content.
2020-10-21 03:22:47 -04:00
Gary Dismukes
05eb5c6142 [Ada] Compiler crash on prefixed call to controlled function with invariant check
gcc/ada/

	* exp_ch6.adb (Insert_Post_Call_Actions): Test for
	N_Explicit_Dereference as part of the existing test for function
	calls.
2020-10-21 03:22:46 -04:00
Eric Botcazou
5ff5f7210f [Ada] Fix bogus error for bit-packed array with volatile component
gcc/ada/

	* freeze.adb (Check_Strict_Alignment): Do not set the flag for
	a bit-packed array type, even if it is a by-reference type.
2020-10-21 03:22:46 -04:00
Dmitriy Anisimkov
948c6d7e9e [Ada] Improve precision of Ada.Directories.Modification_Time
gcc/ada/

	* adaint.c (__gnat_file_time): New routine.
	(__gnat_copy_attribs): Copy timestamps in nanoseconds.
	* libgnat/a-direct.adb (C_Modification_Time): Bind to
	__gnat_file_time.
	(Modification_Time): Call to C_Modification_Time.
2020-10-21 03:22:46 -04:00
Piotr Trojanek
3b612313b6 [Ada] Fix crash with iterated_component_association and -gnatc
gcc/ada/

	* sem_aggr.adb (Resolve_Iterated_Component_Association):
	Expression's copy and now has the same parent as the original
	expression.
	(Resolve_Array_Aggregate): Add ??? comment about a still
	existing minor issue that led to discovery of the above crash.
2020-10-21 03:22:46 -04:00
Javier Miranda
7c6fb753e2 [Ada] Spurious error in current instance used as formal package
gcc/ada/

	* sem_ch12.adb (Install_Parents_Of_Generic_Context): Simplify
	functionality; collect and install parents of generic child
	package.
	(Remove_Parents_Of_Generic_Context): Code cleanup.
	(Instantiate_Package_Body): Hide parents of generic context from
	visibility before installing the parent instance; restore their
	visibility when the instance is analyzed
2020-10-21 03:22:45 -04:00
Doug Rupp
4a17254b26 [Ada] Remove -mthreads from Linker_Options pragma for x86-lynx178e
gcc/ada/

	* libgnarl/s-osinte__lynxos178e.ads: Remove -mthreads switch.
2020-10-21 03:22:45 -04:00
Patrick Bernardi
603b57c732 [Ada] Use VxWorks 7 APIs for accessing environment variables in kernel mode
gcc/ada/

	* env.c (__gnat_setenv): call setenv for VxWorks 7 kernel mode.
	(__gnat_environ): envGet takes an int instead of a NULL pointer.
	(__gnat_unsetenv): call unsetenv for VxWorks 7 kernel mode.
	(__gnat_clearenv): use __gnat_unsetenv to clear environment
	variables.
2020-10-21 03:22:45 -04:00
Eric Botcazou
e98f6ed1e2 [Ada] Use helper function in Freeze_Subprogram_Body
gcc/ada/

	* sem_ch12.adb (Freeze_Subprogram_Body): Call
	Package_Freeze_Node to retrieve the freeze node for the
	enclosing body of the generic.
2020-10-21 03:22:45 -04:00
Justin Squirek
bd4dc93d42 [Ada] Incorrect associations for extra accessibility parameters
gcc/ada/

	* exp_ch6.adb (Expand_Call_Helper): Modify calls to
	Add_Extra_Actual to use Extra_Accessibility instead of
	Get_Accessibility for the EF parameter.
2020-10-21 03:22:44 -04:00
Piotr Trojanek
c43098ca63 [Ada] Make minimum accessibility level a constant object
gcc/ada/

	* exp_ch6.adb (Expand_Actuals): Whitespace cleanup.
	* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Make minimum
	accessibility a constant object.
2020-10-21 03:22:44 -04:00
Patrick Bernardi
512fe5e067 [Ada] Simplify the VxWorks implementation of __gnat_environ
gcc/ada/

	* env.c (__gnat_environ): For VxWorks kernel simply return the
	result of the envGet call. Do this for VxWorks 6 and 7 as they
	both support the same API.
2020-10-21 03:22:44 -04:00
Ghjuvan Lacambre
54c49fcdd7 [Ada] Disable warnings on entities when building finalizers
gcc/ada/

	* exp_ch7.adb (Build_Finalizer): Disable warnings on referenced
	entity.
2020-10-21 03:22:44 -04:00
Piotr Trojanek
53ac0963d4 [Ada] Fix typos and style in comments related to Default_Initial_Condition
gcc/ada/

	* einfo.ads, sem_ch3.adb, sem_util.adb: Fix comments.
2020-10-21 03:22:43 -04:00
Javier Miranda
ac38961bad [Ada] Spurious error in taft ammendment derivation of CPP type
gcc/ada/

	* sem_ch3.adb (Build_Derived_Type): Propagate convention of
	class-wide parent.
2020-10-21 03:22:43 -04:00