188455 Commits

Author SHA1 Message Date
Jonathan Wakely
b8d42cfa84 libstdc++: Replace try-catch in std::list::merge to avoid O(N) size
The current std::list::merge code calls size() before starting to merge
any elements, so that the _M_size members can be updated after the merge
finishes. The work is done in a try-block so that the sizes can still be
updated in an exception handler if any element comparison throws.

The _M_size members only exist for the cxx11 ABI, so the initial call to
size() and the try-catch are only needed for that ABI. For the old ABI
the size() call performs an O(N) list traversal to get a value that
isn't even used, and catching exceptions just to rethrow them isn't
needed either.

This refactors the merge functions to remove the try-catch block and use
an RAII type instead. For the cxx11 ABI that type's destructor updates
the list sizes, and for the old ABI it's a no-op.

libstdc++-v3/ChangeLog:

	* include/bits/list.tcc (list::merge): Remove call to size() and
	try-catch block. Use _Finalize_merge instead.
	* include/bits/stl_list.h (list::_Finalize_merge): New
	scope guard type to update _M_size members after a merge.
2021-10-01 15:04:02 +01:00
Martin Liska
5051fad858 options: fix concat of options.
PR target/102552

gcc/c-family/ChangeLog:

	* c-common.c (parse_optimize_options): decoded_options[0] is
	  used for program name, so merged_decoded_options should also
	  respect that.
2021-10-01 15:56:25 +02:00
Przemyslaw Wirkus
0acdc7fc07 aarch64: fix AARCH64_FL_V9 flag value
Patch is fixing AARCH64_FL_V9 flag value which is now wrongly set due to
merge error.

gcc/ChangeLog:

	* config/aarch64/aarch64.h (AARCH64_FL_V9): Update value.
2021-10-01 14:00:05 +01:00
Aldy Hernandez
75d053df72 Remove shadowed oracle field.
The m_oracle field in the path solver was shadowing the base class.
This was causing subtle problems while calculating outgoing edges
between blocks, because the query object being passed did not have an
oracle set.

This should further improve our solving ability.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* gimple-range-path.cc (path_range_query::compute_ranges): Use
	get_path_oracle.
	* gimple-range-path.h (class path_range_query): Remove shadowed
	m_oracle field.
	(path_range_query::get_path_oracle): New.
2021-10-01 14:43:54 +02:00
Jakub Jelinek
9c1a633d96 ubsan: Move INT_MIN / -1 instrumentation from -fsanitize=integer-divide-by-zero to -fsanitize=signed-integer-overflow [PR102515]
As noted by Richi, in clang INT_MIN / -1 is instrumented under
-fsanitize=signed-integer-overflow rather than
-fsanitize=integer-divide-by-zero as we did and doing it in the former
makes more sense, as it is overflow during division rather than division
by zero.
I've verified on godbolt that clang behaved that way since 3.2-ish times or
so when sanitizers were added.
Furthermore, we've been using
-f{,no-}sanitize-recover=integer-divide-by-zero to decide on the float
-fsanitize=float-divide-by-zero instrumentation _abort suffix.
The case where INT_MIN / -1 is instrumented by one sanitizer and
x / 0 by another one when both are enabled is slightly harder if
the -f{,no-}sanitize-recover={integer-divide-by-zero,signed-integer-overflow}
flags differ, then we need to emit both __ubsan_handle_divrem_overflow
and __ubsan_handle_divrem_overflow_abort calls guarded by their respective
checks rather than one guarded by check1 || check2.

2021-10-01  Jakub Jelinek  <jakub@redhat.com>
	    Richard Biener  <rguenther@suse.de>

	PR sanitizer/102515
gcc/
	* doc/invoke.texi (-fsanitize=integer-divide-by-zero): Remove
	INT_MIN / -1 division detection from here ...
	(-fsanitize=signed-integer-overflow): ... and add it here.
gcc/c-family/
	* c-ubsan.c (ubsan_instrument_division): Check the right
	flag_sanitize_recover bit, depending on which sanitization
	is done.  Sanitize INT_MIN / -1 under SANITIZE_SI_OVERFLOW
	rather than SANITIZE_DIVIDE.  If both SANITIZE_SI_OVERFLOW
	and SANITIZE_DIVIDE is enabled, neither check is known
	to be false and flag_sanitize_recover bits for those two
	aren't the same, emit both __ubsan_handle_divrem_overflow
	and __ubsan_handle_divrem_overflow_abort calls.
gcc/c/
	* c-typeck.c (build_binary_op): Call ubsan_instrument_division
	for division even for SANITIZE_SI_OVERFLOW.
gcc/cp/
	* typeck.c (cp_build_binary_op): Call ubsan_instrument_division
	for division even for SANITIZE_SI_OVERFLOW.
gcc/testsuite/
	* c-c++-common/ubsan/div-by-zero-3.c: Use
	-fsanitize=signed-integer-overflow instead of
	-fsanitize=integer-divide-by-zero.
	* c-c++-common/ubsan/div-by-zero-5.c: Likewise.
	* c-c++-common/ubsan/div-by-zero-4.c: Likewise.  Add
	-fsanitize-undefined-trap-on-error.
	* c-c++-common/ubsan/float-div-by-zero-2.c: New test.
	* c-c++-common/ubsan/overflow-div-1.c: New test.
	* c-c++-common/ubsan/overflow-div-2.c: New test.
	* c-c++-common/ubsan/overflow-div-3.c: New test.
2021-10-01 14:27:32 +02:00
Kyrylo Tkachov
1c6a8b8013 aarch64: Fix cpymem-size.c test for ILP32
gcc/testsuite/

	* gcc.target/aarch64/cpymem-size.c: Adjust scan for ilp32.
2021-10-01 12:19:42 +01:00
Przemyslaw Wirkus
f0688d42c9 aarch64: add armv9-a to -march
gcc/ChangeLog:

	* config/aarch64/aarch64-arches.def (AARCH64_ARCH): Added
	armv9-a.
	* config/aarch64/aarch64.h (AARCH64_FL_V9): New.
	(AARCH64_FL_FOR_ARCH9): New flags for Armv9-A.
	(AARCH64_ISA_V9): New ISA flag.
	* doc/invoke.texi: Update docs.
2021-10-01 10:57:34 +01:00
Andrew Pinski
d0abfa815a Fix bb-slp-pr97709.c after computed goto change
Looks like I tested the change for bb-slp-pr97709.c on an
older tree which did not have the error message so I had
missed one more place where the change was needed.

Anyways committed after testing to make sure the testcase passes
now.

gcc/testsuite/ChangeLog:

	* gcc.dg/vect/bb-slp-pr97709.c: Fix for computed goto
	pointers.
2021-10-01 09:26:34 +00:00
Martin Liska
6de9f0c13b Append target/optimize attr to the current cmdline.
gcc/c-family/ChangeLog:

	* c-common.c (parse_optimize_options): Combine optimize
	options with what was provided on the command line.

gcc/ChangeLog:

	* toplev.c (toplev::main): Save decoded optimization options.
	* toplev.h (save_opt_decoded_options): New.
	* doc/extend.texi: Be more clear about optimize and target
	attributes.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx512er-vrsqrt28ps-3.c: Disable fast math.
	* gcc.target/i386/avx512er-vrsqrt28ps-5.c: Likewise.
	* gcc.target/i386/attr-optimize.c: New test.
2021-10-01 11:09:10 +02:00
Eric Botcazou
97909f80fd Fix ICE with stack checking emulation at -O2
On bare-metal platforms, the Ada compiler emulates stack checking (it is
required by the language and tested by ACATS) in the runtime via the
stack_check_libfunc hook of the RTL middle-end.  Calls to the function
are generated as libcalls but they now require a proper function type
at -O2 or above.

gcc/
	* explow.c: Include langhooks.h.
	(set_stack_check_libfunc): Build a proper function type.
2021-10-01 10:56:45 +02:00
Eric Botcazou
021ad8e5cf Fix PR c++/64697 at -O1 or above
The BFD fix eliminates the link failure and working code is generated at
-O0, but _not_ when optimization is enabled because the optimizer changes:

        movq    .refptr._ZTH1s(%rip), %rax
        testq   %rax, %rax
        je      .L2
        call    _ZTH1s

into:

        leaq    _ZTH1s(%rip), %rax
        testq   %rax, %rax
        je      .L2
        call    _ZTH1s

and the leaq now also gets the relocation overflow.  So the fix is to
teach legitimate_pic_address_disp_p to reject the transformation when
the symbol is an external weak function, which yields:

        cmpq    $0, .refptr._ZTH1s(%rip)
        je      .L2
        call    _ZTH1s

and the cmpq keeps a relocation that does not overflow.

gcc/
	PR c++/64697
	* config/i386/i386.c (legitimate_pic_address_disp_p): For PE-COFF do
	not return true for external weak function symbols in medium model.
2021-10-01 10:56:24 +02:00
Jakub Jelinek
e705b8533a openmp: Differentiate between order(concurrent) and order(reproducible:concurrent)
While OpenMP 5.1 implies order(concurrent) is the same thing as
order(reproducible:concurrent), this is going to change in OpenMP 5.2, where
essentially order(concurrent) means nothing is stated on whether it is
reproducible or unconstrained (and is determined by other means, e.g. for/do
with schedule static or runtime with static being selected is implicitly
reproducible, distribute with dist_schedule static is implicitly reproducible,
loop is implicitly reproducible) and when the modifier is specified explicitly,
it overrides the implicit behavior either way.
And, when order(reproducible:concurrent) is used with e.g. schedule(dynamic)
or some other schedule that is by definition not reproducible, it is
implementation's duty to ensure it is reproducible, either by remembering how
it scheduled some loop and then replaying the same schedule when seeing loops
with the same directive/schedule/number of iterations, or by overriding the
schedule to some reproducible one.

This patch doesn't implement the 5.2 wording just yet, but in the FEs
differentiates between the 3 states - no explicit modifier, explicit reproducible
or explicit unconstrainted, so that the middle-end can easily switch any time.
Instead it follows the 5.1 wording where both order(concurrent) (implicit or
explicit) or order(reproducible:concurrent) imply reproducibility.
And, it implements the easier method, when for/do should be reproducible, it
just chooses static schedule.  order(concurrent) implies no OpenMP APIs in the
loop body nor threadprivate vars, so the exact scheduling isn't (easily at least)
observable.

2021-10-01  Jakub Jelinek  <jakub@redhat.com>

gcc/
	* tree.h (OMP_CLAUSE_ORDER_REPRODUCIBLE): Define.
	* tree-pretty-print.c (dump_omp_clause) <case OMP_CLAUSE_ORDER>: Print
	reproducible: for OMP_CLAUSE_ORDER_REPRODUCIBLE.
	* omp-general.c (omp_extract_for_data): If OMP_CLAUSE_ORDER is seen
	without OMP_CLAUSE_ORDER_UNCONSTRAINED, overwrite sched_kind to
	OMP_CLAUSE_SCHEDULE_STATIC.
gcc/c-family/
	* c-omp.c (c_omp_split_clauses): Also copy
	OMP_CLAUSE_ORDER_REPRODUCIBLE.
gcc/c/
	* c-parser.c (c_parser_omp_clause_order): Set
	OMP_CLAUSE_ORDER_REPRODUCIBLE for explicit reproducible: modifier.
gcc/cp/
	* parser.c (cp_parser_omp_clause_order): Set
	OMP_CLAUSE_ORDER_REPRODUCIBLE for explicit reproducible: modifier.
gcc/fortran/
	* gfortran.h (gfc_omp_clauses): Add order_reproducible bitfield.
	* dump-parse-tree.c (show_omp_clauses): Print REPRODUCIBLE: for it.
	* openmp.c (gfc_match_omp_clauses): Set order_reproducible for
	explicit reproducible: modifier.
	* trans-openmp.c (gfc_trans_omp_clauses): Set
	OMP_CLAUSE_ORDER_REPRODUCIBLE for order_reproducible.
	(gfc_split_omp_clauses): Also copy order_reproducible.
gcc/testsuite/
	* gfortran.dg/gomp/order-5.f90: Adjust scan-tree-dump-times regexps.
libgomp/
	* testsuite/libgomp.c-c++-common/order-reproducible-1.c: New test.
	* testsuite/libgomp.c-c++-common/order-reproducible-2.c: New test.
2021-10-01 10:45:48 +02:00
Jakub Jelinek
3749c3aff6 openmp: Avoid PLT relocations for omp_* symbols in libgomp
This patch avoids the following relocations:
readelf -Wr libgomp.so.1.0.0 | grep omp_
00000000000470e0  0000020700000007 R_X86_64_JUMP_SLOT     000000000001d9d0 omp_fulfill_event@@OMP_5.0.1 + 0
0000000000047170  000000b800000007 R_X86_64_JUMP_SLOT     000000000000e760 omp_display_env@@OMP_5.1 + 0
00000000000471e0  000000e800000007 R_X86_64_JUMP_SLOT     000000000000f910 omp_get_initial_device@@OMP_4.5 + 0
0000000000047280  0000019500000007 R_X86_64_JUMP_SLOT     0000000000015940 omp_get_active_level@@OMP_3.0 + 0
00000000000472c8  0000020d00000007 R_X86_64_JUMP_SLOT     0000000000035210 omp_get_team_num@@OMP_4.0 + 0
00000000000472f0  0000014700000007 R_X86_64_JUMP_SLOT     0000000000035200 omp_get_num_teams@@OMP_4.0 + 0
by using ialias{,_call,_redirect} macros as needed.

We still have many acc_* PLT relocations, could somebody please fix those?
readelf -Wr libgomp.so.1.0.0 | grep acc_
0000000000046fb8  000001ed00000006 R_X86_64_GLOB_DAT      0000000000036350 acc_prof_unregister@@OACC_2.5.1 + 0
0000000000046fd8  000000a400000006 R_X86_64_GLOB_DAT      0000000000035f30 acc_prof_register@@OACC_2.5.1 + 0
0000000000046fe0  000001d100000006 R_X86_64_GLOB_DAT      0000000000035ee0 acc_prof_lookup@@OACC_2.5.1 + 0
0000000000047058  000001dd00000007 R_X86_64_JUMP_SLOT     0000000000031f40 acc_create_async@@OACC_2.5 + 0
0000000000047068  0000011500000007 R_X86_64_JUMP_SLOT     000000000002fc60 acc_get_property@@OACC_2.6 + 0
0000000000047070  000001fb00000007 R_X86_64_JUMP_SLOT     0000000000032ce0 acc_wait_all@@OACC_2.0 + 0
0000000000047080  0000006500000007 R_X86_64_JUMP_SLOT     000000000002f990 acc_on_device@@OACC_2.0 + 0
0000000000047088  000000ae00000007 R_X86_64_JUMP_SLOT     0000000000032140 acc_attach_async@@OACC_2.6 + 0
0000000000047090  0000021900000007 R_X86_64_JUMP_SLOT     000000000002f550 acc_get_device_type@@OACC_2.0 + 0
0000000000047098  000001cb00000007 R_X86_64_JUMP_SLOT     0000000000032090 acc_copyout_finalize@@OACC_2.5 + 0
00000000000470a8  0000005200000007 R_X86_64_JUMP_SLOT     0000000000031f80 acc_copyin@@OACC_2.0 + 0
00000000000470b8  000001ad00000007 R_X86_64_JUMP_SLOT     0000000000032030 acc_delete_finalize@@OACC_2.5 + 0
00000000000470e8  0000010900000007 R_X86_64_JUMP_SLOT     0000000000031f00 acc_create@@OACC_2.0 + 0
00000000000470f8  0000005900000007 R_X86_64_JUMP_SLOT     0000000000032b70 acc_wait_async@@OACC_2.0 + 0
0000000000047110  0000013100000007 R_X86_64_JUMP_SLOT     0000000000032860 acc_async_test@@OACC_2.0 + 0
0000000000047118  000001ff00000007 R_X86_64_JUMP_SLOT     000000000002f720 acc_get_device_num@@OACC_2.0 + 0
0000000000047128  0000019100000007 R_X86_64_JUMP_SLOT     0000000000032020 acc_delete_async@@OACC_2.5 + 0
0000000000047130  000001d200000007 R_X86_64_JUMP_SLOT     000000000002efa0 acc_shutdown@@OACC_2.0 + 0
0000000000047150  000000d000000007 R_X86_64_JUMP_SLOT     0000000000031f00 acc_present_or_create@@OACC_2.0 + 0
0000000000047188  0000019200000007 R_X86_64_JUMP_SLOT     0000000000031910 acc_is_present@@OACC_2.0 + 0
0000000000047190  000001aa00000007 R_X86_64_JUMP_SLOT     000000000002fca0 acc_get_property_string@@OACC_2.6 + 0
00000000000471d0  000001bf00000007 R_X86_64_JUMP_SLOT     0000000000032120 acc_update_self_async@@OACC_2.5 + 0
0000000000047200  0000020500000007 R_X86_64_JUMP_SLOT     0000000000032e00 acc_wait_all_async@@OACC_2.0 + 0
0000000000047208  000000a600000007 R_X86_64_JUMP_SLOT     0000000000031790 acc_deviceptr@@OACC_2.0 + 0
0000000000047218  0000007500000007 R_X86_64_JUMP_SLOT     0000000000032000 acc_delete@@OACC_2.0 + 0
0000000000047238  000001e900000007 R_X86_64_JUMP_SLOT     000000000002f3a0 acc_set_device_type@@OACC_2.0 + 0
0000000000047240  000001f600000007 R_X86_64_JUMP_SLOT     000000000002ef20 acc_init@@OACC_2.0 + 0
0000000000047248  0000018800000007 R_X86_64_JUMP_SLOT     0000000000032060 acc_copyout@@OACC_2.0 + 0
0000000000047258  0000021f00000007 R_X86_64_JUMP_SLOT     0000000000032a80 acc_wait@@OACC_2.0 + 0
0000000000047270  000001bc00000007 R_X86_64_JUMP_SLOT     0000000000032100 acc_update_self@@OACC_2.0 + 0
0000000000047288  0000011400000007 R_X86_64_JUMP_SLOT     0000000000032080 acc_copyout_async@@OACC_2.5 + 0
0000000000047290  0000013d00000007 R_X86_64_JUMP_SLOT     000000000002f850 acc_set_device_num@@OACC_2.0 + 0
00000000000472a8  000000c500000007 R_X86_64_JUMP_SLOT     00000000000320e0 acc_update_device_async@@OACC_2.5 + 0
00000000000472c0  0000014600000007 R_X86_64_JUMP_SLOT     0000000000031fc0 acc_copyin_async@@OACC_2.5 + 0
00000000000472f8  0000006a00000007 R_X86_64_JUMP_SLOT     000000000002f310 acc_get_num_devices@@OACC_2.0 + 0
0000000000047350  0000021700000007 R_X86_64_JUMP_SLOT     0000000000031f80 acc_present_or_copyin@@OACC_2.0 + 0
0000000000047360  0000020900000007 R_X86_64_JUMP_SLOT     00000000000320c0 acc_update_device@@OACC_2.0 + 0
0000000000047380  0000008400000007 R_X86_64_JUMP_SLOT     0000000000032950 acc_async_test_all@@OACC_2.0 + 0

2021-10-01  Jakub Jelinek  <jakub@redhat.com>

	* affinity-fmt.c (omp_get_team_num, omp_get_num_teams): Add
	ialias_redirect.
	* env.c (handle_omp_display_env): Use ialias_call.
	* icv-device.c: Move ialias right below each function.
	(omp_get_device_num): Use ialias_call.
	* fortran.c (omp_fulfill_event): Add ialias_redirect.
	* icv.c (omp_get_active_level): Add ialias_redirect.
2021-10-01 10:42:07 +02:00
Jakub Jelinek
998e434f8f openmp: Add alloc_align attribute to omp_aligned_*alloc and testcase for omp_realloc
This patch adds alloc_align attribute to omp_aligned_{,c}alloc so that if
the first argument is constant, GCC can assume requested alignment.

Additionally, it adds testsuite coverage for omp_realloc which I haven't
managed to write in the patch from yesterday.

2021-10-01  Jakub Jelinek  <jakub@redhat.com>

	* omp.h.in (omp_aligned_alloc, omp_aligned_calloc): Add
	__alloc_align__ (1) attribute.
	* testsuite/libgomp.c-c++-common/alloc-9.c: New test.
2021-10-01 10:32:10 +02:00
Jakub Jelinek
701075864a c++: Fix handling of __thread/thread_local extern vars declared at function scope [PR102496]
The introduction of push_local_extern_decl_alias in
r11-3699-g4e62aca0e0520e4ed2532f2d8153581190621c1a
broke tls vars, while the decl they are created for has the tls model
set properly, nothing sets it for the alias that is actually used,
so accesses to it are done as if they were normal variables.
This is then diagnosed at link time if the definition of the extern
vars is __thread/thread_local.

2021-10-01  Jakub Jelinek  <jakub@redhat.com>

	PR c++/102496
	* name-lookup.c (push_local_extern_decl_alias): Return early even for
	tls vars with non-dependent type when processing_template_decl.  For
	CP_DECL_THREAD_LOCAL_P vars call set_decl_tls_model on alias.

	* g++.dg/tls/pr102496-1.C: New test.
	* g++.dg/tls/pr102496-2.C: New test.
2021-10-01 10:30:16 +02:00
Richard Biener
3a7f20ed26 middle-end/102518 - avoid invalid GIMPLE during inlining
When inlining we have to avoid mapping a non-lvalue parameter
value into a context that prevents the parameter to be a register.
Formerly the register were TREE_ADDRESSABLE but now it can be
just DECL_NOT_GIMPLE_REG_P.

2021-09-30  Richard Biener  <rguenther@suse.de>

	PR middle-end/102518
	* tree-inline.c (setup_one_parameter): Avoid substituting
	an invariant into contexts where a GIMPLE register is not valid.

	* gcc.dg/torture/pr102518.c: New testcase.
2021-10-01 08:26:26 +02:00
Bob Duff
ea0b5b656a [Ada] Subprogram_Variant in ignored ghost code
gcc/ada/

	* exp_ch6.adb (Expand_Call_Helper): Do not call
	Check_Subprogram_Variant if the subprogram is an ignored ghost
	entity. Otherwise the compiler crashes (in debug builds) or
	gives strange error messages (in production builds).
2021-10-01 06:13:39 +00:00
Ghjuvan Lacambre
29ada0e5a2 [Ada] Empty CUDA_Global procedures when compiling for host
gcc/ada/

	* gnat_cuda.adb (Empty_CUDA_Global_Subprograms): New procedure.
	(Expand_CUDA_Package): Call Empty_CUDA_Global_Subprograms.
2021-10-01 06:13:39 +00:00
Steve Baird
e02c8dffe3 [Ada] Improved checking for invalid index values when accessing array elements
gcc/ada/

	* checks.ads: Define a type Dimension_Set. Add an out-mode
	parameter of this new type to Generate_Index_Checks so that
	callers can know for which dimensions a check was generated. Add
	an in-mode parameter of this new type to
	Apply_Subscript_Validity_Checks so that callers can indicate
	that no check is needed for certain dimensions.
	* checks.adb (Generate_Index_Checks): Implement new
	Checks_Generated parameter.
	(Apply_Subscript_Validity_Checks): Implement new No_Check_Needed
	parameter.
	* exp_ch4.adb (Expand_N_Indexed_Component): Call
	Apply_Subscript_Validity_Checks in more cases than before. This
	includes declaring two new local functions,
	(Is_Renamed_Variable_Name,
	Type_Requires_Subscript_Validity_Checks_For_Reads): To help in
	deciding whether to call Apply_Subscript_Validity_Checks.
	Adjust to parameter profile changes in Generate_Index_Checks and
	Apply_Subscript_Validity_Checks.
2021-10-01 06:13:39 +00:00
Eric Botcazou
f5d4b3fbf6 [Ada] Document rounding mode assumed for dynamic floating-point computations
gcc/ada/

	* doc/gnat_rm/implementation_defined_characteristics.rst: Document
	the rounding mode assumed for dynamic computations as per 3.5.7(16).
	* gnat_rm.texi: Regenerate.
2021-10-01 06:13:39 +00:00
Bob Duff
3f561db7ca [Ada] More work on efficiency improvements
gcc/ada/

	* table.ads (Table_Type): Remove "aliased"; no longer needed by
	Atree.  Besides it contradicted the comment a few lines above,
	"--  Note: We do not make the table components aliased...".
	* types.ads: Move type Slot to Atree.
	* atree.ads: Move type Slot fromt Types to here.  Move type
	Node_Header from Seinfo to here.
	* atree.adb: Avoid the need for aliased components of the Slots
	table.  Instead of 'Access, use a getter and setter.  Misc
	cleanups.
	(Print_Statistics): Print statistics about node and entity kind
	frequencies. Give 3 digit fractions instead of percentages.
	* (Get_Original_Node_Count, Set_Original_Node_Count): Statistics
	for calls to Original_Node and Set_Original_Node.
	(Original_Node, Set_Original_Node): Gather statistics by calling
	the above.
	(Print_Field_Statistics): Print Original_Node statistics.
	(Update_Kind_Statistics): Remove, and put all statistics
	gathering under "if Atree_Statistics_Enabled", which is a flag
	generated in Seinfo by Gen_IL.
	* gen_il-gen.adb (Compute_Field_Offsets): Choose offsets of
	Nkind, Ekind, and Homonym first. This causes a slight efficiency
	improvement.  Misc cleanups.  Do not generate Node_Header; it is
	now hand-written in Atree.  When choosing the order in which to
	assign offsets, weight by the frequency of the node type, so the
	more common nodes get their field offsets assigned earlier.  Add
	more special cases.
	(Compute_Type_Sizes): Remove this and related things.
	There was a comment: "At some point we can instrument Atree to
	print out accurate size statistics, and remove this code." We
	have Atree statistics, so we now remove this code.
	(Put_Seinfo): Generate Atree_Statistics_Enabled, which is equal
	to Statistics_Enabled. This allows Atree to say "if
	Atree_Statistics_Enabled then <gather statistics>" for
	efficiency. When Atree_Statistics_Enabled is False, the "if ..."
	will be optimized away.
	* gen_il-internals.ads (Type_Frequency): New table of kind
	frequencies.
	* gen_il-internals.adb: Minor comment improvement.
	* gen_il-fields.ads: Remove unused subtypes.  Suppress style
	checks in the Type_Frequency table.  If we regenerate this
	table (see -gnatd.A) we don't want to have to fiddle with
	casing.
	* impunit.adb: Minor.
	* sinfo-utils.adb: Minor.
	* debug.adb: Minor comment improvement.
2021-10-01 06:13:39 +00:00
Eric Botcazou
3a81dbb618 [Ada] Add missing guard before call to Interface_Present_In_Ancestor
gcc/ada/

	* sem_type.adb (Specific_Type): Check that the type is tagged
	before calling Interface_Present_In_Ancestor on it.
2021-10-01 06:13:38 +00:00
Eric Botcazou
f54be415c1 [Ada] Add new debug switch -gnatd.8
gcc/ada/

	* debug.adb (d.8): Document usage.
	* fe.h (Debug_Flag_Dot_8): Declare.
2021-10-01 06:13:38 +00:00
Gary Dismukes
302563cf1b [Ada] Spurious warning about hiding in generic instantiation
gcc/ada/

	* sem_util.adb (Enter_Name): Suppress hiding warning when in an
	instance.
2021-10-01 06:13:38 +00:00
Ed Schonberg
1c37d1960a [Ada] Crash on improper use of GNAT attribute Type_Key
gcc/ada/

	* sem_attr.adb (Analyze_Attribute, case Type_Key): Attribute can
	be applied to a formal type.
	* sem_ch5.adb (Analyze_Case_Statement): If Extensions_Allowed is
	not enabled, verify that the type of the expression is discrete.
2021-10-01 06:13:38 +00:00
Justin Squirek
10ca293141 [Ada] Crash on renaming within declare expression
gcc/ada/

	* exp_dbug.adb (Debug_Renaming_Declaration): Add check for
	Entity present for Ren to prevent looking at unanalyzed nodes
2021-10-01 06:13:38 +00:00
Ghjuvan Lacambre
3323aa7ee7 [Ada] Fix CodePeer warnings
gcc/ada/

	* atree.adb (Print_Statistics): Help CodePeer see Total as
	greater than zero.
	* gen_il-gen.adb (One_Comp): Annotate Field_Table as Modified.
2021-10-01 06:13:38 +00:00
Richard Kenner
ddd1ab30e6 [Ada] Add Evaluable_Kind and Global_Name_Kind
gcc/ada/

	* gen_il-gen-gen_entities.adb (Evaluable_Kind,
	Global_Name_Kind): Add.
	* gen_il-types.ads (Evaluable_Kind, Global_Name_Kind): Likewise.
2021-10-01 06:13:37 +00:00
Ghjuvan Lacambre
8279a1125f [Ada] Stub CUDA_Device aspect
gcc/ada/

	* aspects.ads: Add CUDA_Device aspect.
	* gnat_cuda.ads (Add_CUDA_Device_Entity): New subprogram.
	* gnat_cuda.adb:
	(Add_CUDA_Device_Entity): New subprogram.
	(CUDA_Device_Entities_Table): New hashmap for CUDA_Device
	entities.
	(Get_CUDA_Device_Entities): New internal subprogram.
	(Set_CUDA_Device_Entities): New internal subprogram.
	* par-prag.adb (Prag): Handle pragma id Pragma_CUDA_Device.
	* sem_prag.ads (Aspect_Specifying_Pragma): Mark CUDA_Device as
	being both aspect and pragma.
	* sem_prag.adb (Analyze_Pragma): Add CUDA_Device entities to
	list of CUDA_Entities belonging to package N.
	(Sig_Flags): Signal CUDA_Device entities as referenced.
	* snames.ads-tmpl: Create CUDA_Device names and pragmas.
2021-10-01 06:13:37 +00:00
Gary Dismukes
28c49456b2 [Ada] Assert_Failure on derived type with inherited Default_Initial_Condition
gcc/ada/

	* exp_util.adb (Build_DIC_Procedure_Body): Remove inappropriate
	Assert pragma.  Remove unneeded and dead code related to derived
	private types.
2021-10-01 06:13:37 +00:00
Richard Kenner
698425f5cc [Ada] Add more node unions
gcc/ada/

	* gen_il-gen-gen_nodes.adb (N_Alternative, N_Is_Case_Choice):
	Add.
	(N_Is_Exception_Choice, N_Is_Range): Likewise.
	* gen_il-types.ads: Add above names.
	* gen_il-gen.adb (Put_Union_Membership): Write both declarations
	and definitions of union functions.
2021-10-01 06:13:37 +00:00
Ed Schonberg
8b1a5da38e [Ada] Implementation of AI12-0212: iterator specs in array aggregates (II)
gcc/ada/

	* exp_aggr.adb (Expand_Array_Aggregate,
	Two_Pass_Aggregate_Expansion): Increment index for element
	insertion within the loop, only if upper bound has not been
	reached.
2021-10-01 06:13:37 +00:00
Javier Miranda
475e1d2400 [Ada] Ada2022: AI12-0195 overriding class-wide pre/postconditions
gcc/ada/

	* contracts.ads (Make_Class_Precondition_Subps): New subprogram.
	(Merge_Class_Conditions): New subprogram.
	(Process_Class_Conditions_At_Freeze_Point): New subprogram.

	* contracts.adb (Check_Class_Condition): New subprogram.
	(Set_Class_Condition): New subprogram.
	(Analyze_Contracts): Remove code analyzing class-wide-clone
	subprogram since it is no longer built.
	(Process_Spec_Postconditions): Avoid processing twice seen
	subprograms.
	(Process_Preconditions): Simplify its functionality to
	non-class-wide preconditions.
	(Process_Preconditions_For): No action needed for wrappers and
	helpers.
	(Make_Class_Precondition_Subps): New subprogram.
	(Process_Class_Conditions_At_Freeze_Point): New subprogram.
	(Merge_Class_Conditions): New subprogram.
	* exp_ch6.ads (Install_Class_Preconditions_Check): New
	subprogram.
	* exp_ch6.adb (Expand_Call_Helper): Install class-wide
	preconditions check on dispatching primitives that have or
	inherit class-wide preconditions.
	(Freeze_Subprogram): Remove code for null procedures with
	preconditions.
	(Install_Class_Preconditions_Check): New subprogram.
	* exp_util.ads (Build_Class_Wide_Expression): Lower the
	complexity of this subprogram; out-mode formal Needs_Wrapper
	since this functionality is now provided by a new subprogram.
	(Get_Mapped_Entity): New subprogram.
	(Map_Formals): New subprogram.
	* exp_util.adb (Build_Class_Wide_Expression): Lower the
	complexity of this subprogram. Its previous functionality is now
	provided by subprograms Needs_Wrapper and Check_Class_Condition.
	(Add_Parent_DICs): Map the overridden primitive to the
	overriding one.
	(Get_Mapped_Entity): New subprogram.
	(Map_Formals): New subprogram.
	(Update_Primitives_Mapping): Adding assertion.
	* freeze.ads (Check_Inherited_Conditions): Subprogram made
	public with added formal to support late overriding.
	* freeze.adb (Check_Inherited_Conditions): New implementation;
	builds the dispatch table wrapper required for class-wide
	pre/postconditions; added support for late overriding.
	(Needs_Wrapper): New subprogram.
	* sem.ads (Inside_Class_Condition_Preanalysis): New global
	variable.
	* sem_disp.ads (Covered_Interface_Primitives): New subprogram.
	* sem_disp.adb (Covered_Interface_Primitives): New subprogram.
	(Check_Dispatching_Context): Skip checking context of
	dispatching calls during preanalysis of class-wide conditions
	since at that stage the expression is not installed yet on its
	definite context.
	(Check_Dispatching_Call): Skip checking 6.1.1(18.2/5) by
	AI12-0412 on helpers and wrappers internally built for
	supporting class-wide conditions; for late-overriding
	subprograms call Check_Inherited_Conditions to build the
	dispatch-table wrapper (if required).
	(Propagate_Tag): Adding call to
	Install_Class_Preconditions_Check.
	* sem_util.ads (Build_Class_Wide_Clone_Body): Removed.
	(Build_Class_Wide_Clone_Call): Removed.
	(Build_Class_Wide_Clone_Decl): Removed.
	(Class_Condition): New subprogram.
	(Nearest_Class_Condition_Subprogram): New subprogram.
	* sem_util.adb (Build_Class_Wide_Clone_Body): Removed.
	(Build_Class_Wide_Clone_Call): Removed.
	(Build_Class_Wide_Clone_Decl): Removed.
	(Class_Condition): New subprogram.
	(Nearest_Class_Condition_Subprogram): New subprogram.
	(Eligible_For_Conditional_Evaluation): No need to evaluate
	class-wide conditions during preanalysis since the expression is
	not installed on its definite context.
	* einfo.ads (Class_Wide_Clone): Removed.
	(Class_Postconditions): New attribute.
	(Class_Preconditions): New attribute.
	(Class_Preconditions_Subprogram): New attribute.
	(Dynamic_Call_Helper): New attribute.
	(Ignored_Class_Postconditions): New attribute.
	(Ignored_Class_Preconditions): New attribute.
	(Indirect_Call_Wrapper): New attribute.
	(Is_Dispatch_Table_Wrapper): New attribute.
	(Static_Call_Helper): New attribute.
	* exp_attr.adb (Expand_N_Attribute_Reference): When the prefix
	is of an access-to-subprogram type that has class-wide
	preconditions and an indirect-call wrapper of such subprogram is
	available, replace the prefix by the wrapper.
	* exp_ch3.adb (Build_Class_Condition_Subprograms): New
	subprogram.
	(Register_Dispatch_Table_Wrappers): New subprogram.
	* exp_disp.adb (Build_Class_Wide_Check): Removed; class-wide
	precondition checks now rely on internally built helpers.
	* sem_ch13.adb (Analyze_Aspect_Specifications): Set initial
	value of attributes Class_Preconditions, Class_Postconditions,
	Ignored_Class_Preconditions and Ignored_Class_Postconditions.
	These values are later updated with the full pre/postcondition
	by Merge_Class_Conditions.
	(Freeze_Entity_Checks): Call
	Process_Class_Conditions_At_Freeze_Point.
	* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Remove code
	building the body of the class-wide clone subprogram since it is
	no longer required.
	(Install_Entity): Adding assertion.
	* sem_prag.adb (Analyze_Pre_Post_Condition_In_Decl_Part): Remove
	code building and analyzing the class-wide clone subprogram; no
	longer required.
	(Build_Pragma_Check_Equivalent): Adjust call to
	Build_Class_Wide_Expression since the formal named Needs_Wrapper
	has been removed.
	* sem_attr.adb (Analyze_Attribute_Old_Result): Skip processing
	these attributes during preanalysis of class-wide conditions
	since at that stage the expression is not installed yet on its
	definite context.
	* sem_res.adb (Resolve_Actuals): Skip applying RM 3.9.2(9/1) and
	SPARK RM 6.1.7(3) on actuals of internal helpers and wrappers
	built to support class-wide preconditions.
	* sem_ch5.adb (Process_Bounds): Do not generate a constant
	declaration for the bounds when we are preanalyzing a class-wide
	condition.
	(Analyze_Loop_Parameter_Specification): Handle preanalysis of
	quantified expression placed in the outermost expression of a
	class-wide condition.
	* ghost.adb (Check_Ghost_Context): No check required during
	preanalysis of class-wide conditions.
	* gen_il-fields.ads (Opt_Field_Enum): Adding
	Class_Postconditions, Class_Preconditions,
	Class_Preconditions_Subprogram, Dynamic_Call_Helper,
	Ignored_Class_Postconditions, Ignored_Class_Preconditions,
	Indirect_Call_Wrapper, Is_Dispatch_Table_Wrapper,
	Static_Call_Helper.
	* gen_il-gen-gen_entities.adb (Is_Dispatch_Table_Wrapper):
	Adding semantic flag Is_Dispatch_Table_Wrapper; removing
	semantic field Class_Wide_Clone; adding semantic fields for
	Class_Postconditions, Class_Preconditions,
	Class_Preconditions_Subprogram, Dynamic_Call_Helper,
	Ignored_Class_Postconditions, Indirect_Call_Wrapper,
	Ignored_Class_Preconditions, and Static_Call_Helper.
2021-10-01 06:13:37 +00:00
Piotr Trojanek
fa465c1b60 [Ada] Fix deleting CodePeer files for non-ordinary units
gcc/ada/

	* comperr.adb (Delete_SCIL_Files): Handle generic subprogram
	declarations and renaming just like generic package declarations
	and renamings, respectively; handle
	N_Subprogram_Renaming_Declaration.
2021-10-01 06:13:36 +00:00
Steve Baird
19ab5a56d6 [Ada] Improve error message for .ali file version mismatch
gcc/ada/

	* bcheck.adb (Check_Versions): Add support for the case where
	the .ali file contains both a primary and a secondary version
	number, as in "GNAT Lib v22.20210809".
2021-10-01 06:13:36 +00:00
Steve Baird
aa4648eef4 [Ada] Fix bug in inherited user-defined-literal aspects for tagged types
gcc/ada/

	* sem_res.adb (Resolve): Two separate fixes. In the case where
	Find_Aspect for a literal aspect returns the aspect for a
	different (ancestor) type, call Corresponding_Primitive_Op to
	get the right callee. In the case where a downward tagged type
	conversion appears to be needed, generate a null extension
	aggregate instead, as per Ada RM 3.4(27).
	* sem_util.ads, sem_util.adb: Add new Corresponding_Primitive_Op
	function. It maps a primitive op of a tagged type and a
	descendant type of that tagged type to the corresponding
	primitive op of the descendant type. The body of this function
	was written by Javier Miranda.
2021-10-01 06:13:36 +00:00
Bob Duff
a6fe12b0a9 [Ada] Info. gathering in preparation for more efficiency improvements
gcc/ada/

	* atree.adb: Gather and print statistics about frequency of
	getter and setter calls.
	* atree.ads (Print_Statistics): New procedure for printing
	statistics.
	* debug.adb: Document -gnatd.A switch.
	* gen_il-gen.adb: Generate code for statistics gathering.
	Choose the offset of Homonym early.  Misc cleanup.  Put more
	comments in the generated code.
	* gen_il-internals.ads (Unknown_Offset): New value to indicate
	that the offset has not yet been chosen.
	* gnat1drv.adb: Call Print_Statistics.
	* libgnat/s-imglli.ads: Minor comment fix.
	* output.ads (Write_Int_64): New procedure to write a 64-bit
	value.  Needed for new statistics, and could come in handy
	elsewhere.
	* output.adb (Write_Int_64): Likewise.
	* sinfo.ads: Remove obsolete comment. The xtreeprs program no
	longer exists.
	* types.ads: New 64-bit types needed for new statistics.
2021-10-01 06:13:36 +00:00
Dmitriy Anisimkov
e0ab200357 [Ada] Support gmem.out longer than 2G on 32 bit platforms
gcc/ada/

	* libgnat/memtrack.adb (Putc): New routine wrapped around fputc
	with error check.
	(Write): New routine wrapped around fwrite with error check.
	Remove bound functions fopen, fwrite, fputs, fclose, OS_Exit.
	Use the similar routines from System.CRTL and System.OS_Lib.
2021-10-01 06:13:36 +00:00
Ed Schonberg
6732c4035d [Ada] Spurious range checks on aggregate with non-static bounds
gcc/ada/

	* exp_aggr.adb (Must_Slide): If the aggregate only contains an
	others_clause no sliding id involved. Otherwise sliding is
	required if any bound of the aggregate or the context subtype is
	non-static.
2021-10-01 06:13:36 +00:00
Richard Kenner
3e20570d90 [Ada] Add N_Is_Decl
gcc/ada/

	* gen_il-gen-gen_nodes.adb (N_Is_Decl): Add.
	* gen_il-types.ads (N_Is_Decl): Likewise.
2021-10-01 06:13:35 +00:00
Richard Kenner
7916838b66 [Ada] Add N_Entity_Name
gcc/ada/

	* gen_il-gen-gen_nodes.adb (N_Entity_Name): Add.
	* gen_il-types.ads (N_Entity_Name): Likewise.
2021-10-01 06:13:35 +00:00
Steve Baird
cafd1c1a71 [Ada] Improve error message for .ali file version mismatch
gcc/ada/

	* bcheck.adb (Check_Versions): In the case of an ali file
	version mismatch, if distinct integer values can be extracted
	from the two version strings then include those values in the
	generated error message.
2021-10-01 06:13:35 +00:00
Steve Baird
8e35980ff8 [Ada] No ABE check needed for an expression function call.
gcc/ada/

	* sem_elab.adb (Is_Safe_Call): Return True in the case of a
	(possibly rewritten) call to an expression function.
2021-10-01 06:13:35 +00:00
Ghjuvan Lacambre
1b482832d5 [Ada] Fix CodePeer warnings
gcc/ada/

	* sem_aggr.adb (Resolve_Iterated_Component_Association):
	Initialize Id_Typ to Any_Type by default.
2021-10-01 06:13:35 +00:00
Eric Botcazou
c4f826d933 [Ada] Document that gnatmem requires fixed-position executables
gcc/ada/

	* doc/gnat_ugn/gnat_and_program_execution.rst (gnatmem): Document
	that it works only with fixed-position executables.
2021-10-01 06:13:35 +00:00
Doug Rupp
2e0782a9fa [Ada] Switch to SR0660
gcc/ada/

	* libgnat/s-parame__vxworks.ads (time_t_bits): Change to
	Long_Long_Integer'Size.
2021-10-01 06:13:34 +00:00
GCC Administrator
2467998373 Daily bump. 2021-10-01 00:16:27 +00:00
David Edelsohn
f1408388f2 testsuite: Fix cf-descriptor-5.f90
gcc/testsuite/ChangeLog

	* gfortran.dg/c-interop/cf-descriptor-5-c.c: Include alloca.h.
2021-09-30 18:36:06 -04:00
Przemyslaw Wirkus
cd08eae26e arm: Enable Cortex-R52+ CPU
Patch is adding Cortex-R52+ as 'cortex-r52plus' command line
flag for -mcpu option.

gcc/ChangeLog:

	* config/arm/arm-cpus.in: Add Cortex-R52+ CPU.
	* config/arm/arm-tables.opt: Regenerate.
	* config/arm/arm-tune.md: Regenerate.
	* doc/invoke.texi: Update docs.
2021-09-30 23:14:20 +01:00
Patrick Palka
9845c52db3 c++: __is_trivially_xible and multi-arg aggr paren init [PR102535]
is_xible_helper assumes only 0- and 1-argument ctors can be trivial, but
C++20 aggregate paren init means multi-arg ctors can now be trivial too.
This patch relaxes the relevant early exit check accordingly.

	PR c++/102535

gcc/cp/ChangeLog:

	* method.c (is_xible_helper): Don't exit early for multi-arg
	ctors in C++20.

gcc/testsuite/ChangeLog:

	* g++.dg/ext/is_trivially_constructible7.C: New test.
2021-09-30 17:34:23 -04:00