Commit Graph

190900 Commits

Author SHA1 Message Date
Roger Sayle
659f8161f6 nvptx: Add support for PTX's cnot instruction.
This is a simple patch, now that the nvptx backend has transitioned
to STORE_FLAG_VALUE=1, that adds support for NVidia's cnot instruction,
that implements C/C++ style logical negation.

Previously, the simple function:

int foo(int x) { return !x; }

on nvptx-none with -O2 would generate:

	mov.u32 %r24, %ar0;
	setp.eq.u32     %r28, %r24, 0;
	selp.u32        %value, 1, 0, %r28;

with this patch, GCC now generates:

	mov.u32 %r24, %ar0;
	cnot.b32        %value, %r24;

2022-01-07  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	* config/nvptx/nvptx.md (*cnot<mode>2): New define_insn.

gcc/testsuite/ChangeLog
	* gcc.target/nvptx/cnot-1.c: New test case.
2022-01-07 09:57:21 +00:00
Haochen Gui
add37d3bf4 rs6000: Define a pattern for mffscrni. If the RN is a constant, it can call gen_rs6000_mffscrni directly.
gcc/
	* config/rs6000/rs6000.md (rs6000_mffscrni): Define.
	(rs6000_set_fpscr_rn): Change the type of operand[0] from DI to SI.
	Call gen_rs6000_mffscrni when operand[0] is a const_0_to_3_operand.

gcc/testsuite/
	* gcc.target/powerpc/mffscrni_p9.c: New testcase for mffscrni.
	* gcc.target/powerpc/test_fpscr_rn_builtin.c: Test mffscrn and mffscrni
	separately.
2022-01-07 14:36:42 +08:00
Jason Merrill
765693be1c c++: temporarily restore VEC_INIT_EXPR gimplify [PR103936]
PR103936 demonstrates that some VEC_INIT_EXPR can still survive into
GENERIC; until that's fixed let's put back the handling in cp_gimplify_expr.

	PR c++/103936
	PR c++/65591

gcc/cp/ChangeLog:

	* cp-gimplify.c (cp_gimplify_expr): Restore VEC_INIT_EXPR handling.

gcc/testsuite/ChangeLog:

	* g++.dg/init/aggr15.C: New test.
2022-01-07 00:22:56 -05:00
liuhongt
041cfa0ce4 Support commutative alternative for AVX512 vpcmpeq{b,w,d,q}
gcc/ChangeLog:

	* config/i386/sse.md
	(*<avx512>_eq<mode>3<mask_scalar_merge_name>_1): Extend to
	UNSPEC_PCMP_UNSIGNED.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr103774.c: New test.
	* gcc.target/i386/avx512bw-vpcmpequb-1.c: Adjust scan assembler
	from vpcmpub to (?:vpcmpub|vpcmpeqb).
	* gcc.target/i386/avx512bw-vpcmpequw-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpub-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpuw-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpequd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpequq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpud-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpequd-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpequq-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpuq-1.c: Ditto.
2022-01-07 11:13:00 +08:00
liuhongt
1f759dbdcd Optimize V16HF vector insert to element 0 for AVX2.
gcc/ChangeLog:

	PR target/103753
	* config/i386/i386-expand.c (ix86_expand_vector_set): Not use
	gen_avx2_pblendph_1 when elt == 0.
	* config/i386/sse.md (avx2_pblendph): Rename to ..
	(avx2_pblend<ssemodesuffix>_1).. this, and extend to V16HI.
	(*avx2_pblendw): Rename to ..
	(*avx2_pblend<ssemodesuffix>): .. this, and extend to V16HF.
	(avx2_pblendw): Rename to ..
	(*avx2_pblend<ssemodesuffix>): .. this, and extend to V16HF.
	(blendsuf): Removed.
	(sse4_1_pblend<blendsuf>): Renamed to ..
	(sse4_1_pblend<ssemodesuffix>): .. this.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr103753.c: New test.
2022-01-07 11:08:31 +08:00
Sandra Loosemore
55385f12f6 Fortran: Fix handling of optional argument to SIZE intrinsic [PR103898]
This patch fixes a think-o in the code that triggered an ICE
in the test case.

2021-01-06  Sandra Loosemore  <sandra@codesourcery.com>

	PR fortran/103898

	gcc/fortran/
	* trans-intrinsic.c (gfc_conv_intrinsic_size): Make size_var
	actually be a variable and fix surrounding code.

	gcc/testsuite/
	* gfortran.dg/pr103898.f90: New test.
2022-01-06 17:34:35 -08:00
Jason Merrill
32d8ff7371 c++: when delegating constructor throws [PR103711]
We were always calling the complete destructor if the target constructor
throws, even if we were calling the base constructor.

	PR c++/103711

gcc/cp/ChangeLog:

	* init.c (perform_target_ctor): Select destructor by in_chrg.

gcc/testsuite/ChangeLog:

	* g++.dg/eh/delegating1.C: New test.
2022-01-06 19:25:43 -05:00
Jason Merrill
6ad76e7337 c++: nested catch in ctor fn-try-block [PR61611]
Being in_function_try_handler isn't enough to satisfy the condition of
reaching the end of such a handler; in this case, we're reaching the end of
a handler within that handler, so we don't want the special semantics.

	PR c++/61611

gcc/cp/ChangeLog:

	* except.c (in_nested_catch): New.
	(expand_end_catch_block): Check it.

gcc/testsuite/ChangeLog:

	* g++.dg/eh/ctor-fntry1.C: New test.
2022-01-06 19:25:43 -05:00
Jason Merrill
b10e031458 c++: destroy retval on throwing cleanup in try [PR33799]
My earlier attempt to fix this bug didn't handle the case where both the
return and the throwing cleanup are within a try-block that catches and
discards the exception.  Fixed by adding the retval cleanup to any
try-blocks as well as the function body.  PR102191 pointed out that we also
weren't handling templates properly, so I moved the call out of the parser.

	PR c++/33799
	PR c++/102191

gcc/cp/ChangeLog:

	* except.c (maybe_splice_retval_cleanup): Check
	current_binding_level.
	* semantics.c (do_poplevel): Call it here.
	* parser.c (cp_parser_compound_statement): Not here.

gcc/testsuite/ChangeLog:

	* g++.dg/eh/return1.C: Add temporary in try block case.
	* g++.dg/cpp2a/constexpr-dtor11.C: New test.
2022-01-06 19:25:43 -05:00
Jason Merrill
4c6afbbd48 c++: clean up ref-extended temp on throwing dtor [PR53868]
We have wrap_temporary_cleanups to handle the EH region nesting problems
between cleanups for complete variables and cleanups for temporaries used in
their construction, but we weren't calling it for temporaries extended from
binding to a reference.

We still don't want this for array cleanups (since my PR94041 fix), so I
move that exception from initialize_local_var to wrap_temporary_cleanups.

	PR c++/53868

gcc/cp/ChangeLog:

	* decl.c (cp_finish_decl): Use wrap_temporary_cleanups for
	cleanups from set_up_extended_ref_temp.
	(wrap_temporary_cleanups): Ignore array cleanups.
	(initialize_local_var): Don't check for array here.
	* cp-tree.h (BIND_EXPR_VEC_DTOR): New.
	* init.c (build_vec_delete_1): Set it.

gcc/testsuite/ChangeLog:

	* g++.dg/eh/ref-temp1.C: New test.
	* g++.dg/eh/ref-temp2.C: New test.
2022-01-06 19:25:42 -05:00
Jason Merrill
2fbc45486e c++: keep destroying array after one dtor throws [PR66451]
When we're cleaning up an array, if one destructor throws, we should still
try to clean up the rest of the array.  We can use TRY_CATCH_EXPR for this,
instead of a TARGET_EXPR like my other recent patches, because a destructor
call can't involve any temporaries that need to live longer.

I thought about only doing this when we call build_vec_delete_1 from
build_vec_init, but it seems appropriate for delete-expressions as well;
we've said that the array's lifetime is over, it makes sense to keep trying
to destroy it.  The standard isn't clear, but clang seems to agree with me.

	PR c++/66451

gcc/cp/ChangeLog:

	* init.c (build_vec_delete_1): Handle throwing dtor.
	(build_vec_init): Tell it we're in a cleanup already.

gcc/testsuite/ChangeLog:

	* g++.dg/eh/array3.C: New test.
	* g++.dg/eh/array1.C: Mark destructor as throw().
	* g++.dg/ipa/devirt-40.C: Likewise.
	* g++.dg/warn/pr83054.C: Likewise.
	* g++.dg/eh/delete1.C: Shorten array to one element.
2022-01-06 19:24:31 -05:00
Jason Merrill
40140b7344 c++: don't cleanup the last aggregate elt
Now that we're building cleanups for aggregate elements more often, it seems
worth optimizing by avoiding building one for the last element; once it is
initialized, the complete object is fully initialized, the element cleanups
end in favor of the complete object cleanup, and so a cleanup for the last
element would guard nothing at all.

gcc/cp/ChangeLog:

	* typeck2.c (split_nonconstant_init_1): Don't cleanup the last elt.
	(split_nonconstant_init): Adjust.

gcc/testsuite/ChangeLog:

	* g++.dg/tree-ssa/aggregate1.C: New test.
2022-01-06 19:23:17 -05:00
Jason Merrill
4f6bc28fc7 c++: EH and partially constructed aggr temp [PR66139]
Now that PR94041 is fixed, I can return to addressing PR66139, missing
cleanups for partially constructed aggregate temporaries.  My previous
approach of calling split_nonconstant_init in cp_gimplify_init_expr broke
because gimplification is too late to be introducing destructor calls.  So
instead I now call it under cp_fold_function, just before cp_genericize;
doing it from cp_genericize itself ran into trouble with the rewriting of
invisible references.

So now the prediction in cp_gimplify_expr that cp_gimplify_init_expr
might need to replace references to TARGET_EXPR_SLOT within
TARGET_EXPR_INITIAL has come to pass.  constexpr.c already had the simple
search-and-replace tree walk I needed, but it needed to be fixed to actually
replace all occurrences instead of just the first one.

Handling of VEC_INIT_EXPR at gimplify time had similar issues that we worked
around with build_vec_init_elt, so I'm moving that to cp_fold_function as
well.  But it seems that build_vec_init_elt is still useful for setting the
VEC_INIT_EXPR_IS_CONSTEXPR flag, so I'm leaving it alone.

This also fixes 52320, because build_aggr_init of each X from build_vec_init
builds an INIT_EXPR rather than call split_nonconstant_init at that point,
and now that INIT_EXPR gets split later.

	PR c++/66139
	PR c++/52320

gcc/cp/ChangeLog:

	* constexpr.c (replace_decl): Rename from replace_result_decl.
	* cp-tree.h (replace_decl): Declare it.
	* cp-gimplify.c (cp_gimplify_init_expr): Call it.
	(cp_gimplify_expr): Don't handle VEC_INIT_EXPR.
	(cp_genericize_init, cp_genericize_init_expr)
	(cp_genericize_target_expr): New.
	(cp_fold_r): Call them.
	* tree.c (build_array_copy): Add a TARGET_EXPR.
	* typeck2.c (digest_init_r): Look through a TARGET_EXPR.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/initlist116.C: New test.
	* g++.dg/cpp0x/initlist117.C: New test.
	* g++.dg/cpp0x/lambda/lambda-eh.C: New test.
	* g++.dg/eh/aggregate1.C: New test.
2022-01-06 19:23:17 -05:00
Jason Merrill
beaee0a871 c++: temporary lifetime with array aggr init [PR94041]
The previous patch fixed temporary lifetime for aggregate initialization of
classes; this one extends that fix to arrays.  This specifically reverses my
r74790, the patch for PR12253, which was made wrong when these semantics
were specified in DR201.

Since the array cleanup region encloses the regions for any temporaries, we
don't need to add an additional region for the array object itself in either
initialize_local_var or split_nonconstant_init; we do, however, need to tell
split_nonconstant_init how to disable the cleanup once an enclosing object
is fully constructed, at which point we want to run that destructor instead.

	PR c++/94041

gcc/cp/ChangeLog:

	* decl.c (initialize_local_var): Fix comment.
	* init.c (build_new_1): Do stabilize array init.
	(build_vec_init): Use TARGET_EXPR for cleanup.  Initialization
	of an element from an explicit initializer is not a
	full-expression.
	* tree.c (expand_vec_init_expr): Pass flags through.
	* typeck2.c (split_nonconstant_init_1): Handle VEC_INIT_EXPR.
	(split_nonconstant_init): Handle array cleanups.
	* cp-tree.h: Adjust.

gcc/testsuite/ChangeLog:

	* g++.dg/init/array12.C:
	* g++.dg/init/aggr7-eh2.C: New test.
	* g++.dg/init/aggr7-eh3.C: New test.
2022-01-06 19:23:17 -05:00
Jason Merrill
ce0ab8fb46 c++: temporary lifetime with aggregate init [PR94041]
In C++98 the lifetime of temporaries in aggregate initialization was
unclear, but C++11 DR201 clarified that only temporaries created for
default-initialization of an array element with no corresponding
initializer-clause are destroyed immediately; all others persist until the
end of the full-expression.

But we never implemented that, and continued treating individual element
initializations as full-expressions, such as in my patch for PR50866 in
r180442.  This blocked my attempted fix for PR66139, which extended the use
of split_nonconstant_init, and thus the bug, to aggregate initialization of
temporaries within an expression.

The longer temporary lifetime creates further EH region overlap problems
like the ones that wrap_temporary_cleanups addresses: in aggr7.C, we start
out with a normal nesting of

A1
 c.b1
   A2
    c.b2
     ...
   ~A2
~A1

where on the way in, throwing from one of the inits will clean up from the
previous inits.  But once c.b2 is initialized, throwing from ~A2 must not
clean up c.b1; instead it needs to clean up c.  So as in build_new_1, we
deal with this by guarding the B cleanups with flags that are cleared once c
is fully constructed; throwing from one of the ~A still hits that region,
but does not call ~B.  And then wrap_temporary_cleanups deals with calling
~C, but we need to tell it not to wrap the subobject cleanups.

The change from expressing the subobject cleanups with CLEANUP_STMT to
TARGET_EXPR was also necessary because we need them to collate with the ~A
in gimplify_cleanup_point_expr; the CLEANUP_STMT representation only worked
with treating subobject initializations as full-expressions.

	PR c++/94041

gcc/cp/ChangeLog:

	* decl.c (check_initializer): Remove obsolete comment.
	(wrap_cleanups_r): Don't wrap CLEANUP_EH_ONLY.
	(initialize_local_var): Change assert to test.
	* typeck2.c (maybe_push_temp_cleanup): New.
	(split_nonconstant_init_1): Use it.
	(split_nonconstant_init): Clear cleanup flags.

gcc/testsuite/ChangeLog:

	* g++.dg/init/aggr7-eh.C: New test.
	* g++.dg/cpp0x/initlist122.C: Also test aggregate variable.
2022-01-06 19:23:16 -05:00
Jason Merrill
e948436eab c++: loop over array elts w/o explicit init [PR92385]
The PR complains that initializing a large array with {} takes a long time
to compile; this was because digest_init would turn {} into a long
CONSTRUCTOR with an initializer for each element, instead of more sensibly
generating a loop.  The standard doesn't specify this implementation, but it
does allow for it by specifying that a temporary created "when a default
constructor is called to initialize an element of an array with no
corresponding initializer" is destroyed "before the construction of the next
array element, if any." rather than living until the end of the complete
object initialization as usual.

This change is also needed before the PR94041 fix extends the lifetime of
temporaries from elements with explicit initializers.

To implement this, I change digest_init so that in cases where
initialization of trailing array elements isn't constant, we return a
VEC_INIT_EXPR instead of a bare CONSTRUCTOR; when it is encountered later,
we call build_vec_init to generate the actual initialization code.

	PR c++/92385

gcc/cp/ChangeLog:

	* typeck2.c (PICFLAG_VEC_INIT): New.
	(process_init_constructor_array): Set it.
	(process_init_constructor): Handle it.
	(split_nonconstant_init_1): Handle VEC_INIT_EXPR.
	* init.c (build_vec_init): Likewise.
	* cp-gimplify.c (cp_gimplify_expr): Factor out...
	* tree.c (expand_vec_init_expr): ...this function.
	(build_vec_init_elt): Handle BRACE_ENCLOSED_INITIALIZER_P.
	(build_vec_init_expr): Likewise.
	* constexpr.c (cxx_eval_vec_init): Likewise.
	(reduced_constant_expression_p): Check arrays before C++20.
	* cp-tree.h (expand_vec_init_expr): Declare.

gcc/testsuite/ChangeLog:

	* g++.dg/init/array61.C: New test.
2022-01-06 19:23:16 -05:00
Jason Merrill
ad64a82197 c++: don't preevaluate new-initializer
The preevaluation code was causing trouble with my fix for PR94041, and now
I see that it's actually wrong since P0145 was adopted for C++17, mandating
order of evaluation for many expressions that were previously unspecified.
I don't see a need to preserve the preevaluation code for older standard
modes.

gcc/cp/ChangeLog:

	* init.c (build_new_1): Remove preevaluation code.

gcc/testsuite/ChangeLog:

	* g++.old-deja/g++.martin/new1.C: Don't expect preeval.
	* g++.dg/tree-ssa/stabilize1.C: Removed.
2022-01-06 19:22:47 -05:00
GCC Administrator
11ce8d04f2 Daily bump. 2022-01-07 00:16:24 +00:00
David Malcolm
d564a83d14 analyzer: make use of may_be_aliased in alias detection [PR103546]
Whilst debugging PR analyzer/103546 (false +ve in flex-generated lexers)
I noticed that the analyzer was considering that writes through symbolic
pointers could be treated as clobbering static globals such as:

   static YY_BUFFER_STATE * yy_buffer_stack = NULL;

even for such variables that never have their address taken.

This patch fixes this issue at least, so that the analyzer can preserve
knowledge of such globals on code paths with writes through symbolic
pointers.

It does not fix the false +ve in the lexer code.

gcc/analyzer/ChangeLog:
	PR analyzer/103546
	* store.cc (store::eval_alias_1): Refactor handling of decl
	regions, adding a test for may_be_aliased, rejecting those for
	which it returns false.

gcc/testsuite/ChangeLog:
	PR analyzer/103546
	* gcc.dg/analyzer/aliasing-3.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-01-06 17:42:05 -05:00
Sandra Loosemore
8e2771069e Fortran: Fix ICE in argument_rank_mismatch [PR103287]
This patch removes an incorrect assertion.  A user-friendly error for this
case is already given elsewhere.

2022-01-05  Steve Kargl  <kargl@gcc.gnu.org>
	    Sandra Loosemore  <sandra@codesourcery.com>

	PR fortran/103287

	gcc/fortran/
	* interface.c (argument_rank_mismatch): Replace incorrect assertion
	with return.

	gcc/testsuite/
	* gfortran.dg/c-interop/pr103287-1.f90: new.
	* gfortran.dg/c-interop/pr103287-2.f90: new.
2022-01-06 12:45:56 -08:00
H.J. Lu
c2e5c4feed x86: Generate INT3 for __builtin_eh_return
Generate INT3 after indirect jmp in exception return for -fcf-protection
with -mharden-sls=indirect-jmp.

gcc/

	PR target/103925
	* config/i386/i386.c (ix86_output_indirect_function_return):
	Generate INT3 after indirect jmp for -mharden-sls=indirect-jmp.

gcc/testsuite/

	PR target/103925
	* gcc.target/i386/harden-sls-6.c: New test.
2022-01-06 11:35:11 -08:00
H.J. Lu
ed8060950c x86: Rename -harden-sls=indirect-branch to -harden-sls=indirect-jmp
Indirect branch also includes indirect call instructions.  Rename
-harden-sls=indirect-branch to -harden-sls=indirect-jmp to match its
intended behavior.

	PR target/102952
	* config/i386/i386-opts.h (harden_sls): Replace
	harden_sls_indirect_branch with harden_sls_indirect_jmp.
	* config/i386/i386.c (ix86_output_jmp_thunk_or_indirect):
	Likewise.
	(ix86_output_indirect_jmp): Likewise.
	(ix86_output_call_insn): Likewise.
	* config/i386/i386.opt: Replace indirect-branch with
	indirect-jmp.  Replace harden_sls_indirect_branch with
	harden_sls_indirect_jmp.
	* doc/invoke.texi (-harden-sls=): Replace indirect-branch with
	indirect-jmp.
2022-01-06 11:35:11 -08:00
Ian Lance Taylor
be129ca481 compiler: permit converting unnamed types when ignoring struct tags
Test case is https://golang.org/cl/375796.

Fixes golang/go#50439

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/375797
2022-01-06 11:24:11 -08:00
Uros Bizjak
0d03db068c i386: Improve HImode interunit moves
Currently, the compiler moves HImode values between GPR and XMM registers with:

	%vpinsrw\t{$0, %k1, %d0|%d0, %k1, 0}
	%vpextrw\t{$0, %1, %k0|%k0, %1, 0}

but it could use slightly faster and shorter:

	%vmovd\t{%k1, %0|%0, %k1}
	%vmovd\t{%1, %k0|%k0, %1}

2022-01-06  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:

	* config/i386/i386.c (ix86_output_ssemov) <MODE_DI>:
	Add %q modifier for operands in general registers.
	<MODE_SI>: Add %q modifier for operands in general registers.
	* config/i386/i386.md (*movhi_internal): Change type attribute of
	xmm-gpr interunit alternatives 9,10 to ssemov and mode attribute
	to SImode for non-avx512fp16 targets.
	(*movhf_internal): Ditto for xmm-gpr interunit alternatives 6,8.
	* config/i386/mmx.md (*movv2qi_internal):
	Ditto for xmm-gpr interunit alternatives 8,9.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr102811-2.c (dg-final):
	Update scan-assembler-times directives.
	* gcc.target/i386/sse2-float16-2.c (dg-final):
	Update scan-assembler directives.
2022-01-06 20:01:34 +01:00
Bob Duff
2a60c08e98 [Ada] Warn on subtype declaration of null range
gcc/ada/

	* sem_res.adb (Resolve_Range): Warn on null range, unless we are
	inside a generic unit or an instance thereof.
	* sem_ch3.adb (Analyze_Subtype_Indication): Minor: avoid double
	negative.
2022-01-06 17:11:42 +00:00
Piotr Trojanek
1871f2cb3c [Ada] Remove unnecessary declare block
gcc/ada/

	* errout.adb (Adjust_Name_Case): Remove unnecessary declare
	block.
2022-01-06 17:11:41 +00:00
Yannick Moy
42dd6f60d8 [Ada] Proof of System.Generic_Array_Operations at silver level
gcc/ada/

	* libgnat/a-ngcoar.adb: Add pragma to ignore assertions in
	instance.
	* libgnat/a-ngrear.adb: Likewise.
	* libgnat/s-gearop.adb: Prove implementation is free of runtime
	errors.
	* libgnat/s-gearop.ads: Add contracts to protect against runtime
	errors in the generic part.
2022-01-06 17:11:41 +00:00
Piotr Trojanek
d2bc32602c [Ada] Simplify traversal for removing warnings from dead code
gcc/ada/

	* errout.adb (Remove_Warning_Messages): Use traversal procedure
	instead of traversal function, since we discard status of each
	step anyway.
2022-01-06 17:11:41 +00:00
Piotr Trojanek
362c58c423 [Ada] Remove a locally handled exception
gcc/ada/

	* exp_ch4.adb (Expand_Concatenate): There is no reason for using
	declaring, raising and catching an exception; a simple return
	statement is enough.
2022-01-06 17:11:40 +00:00
Piotr Trojanek
a177749242 [Ada] Move messages on division by zero to the right operand
gcc/ada/

	* sem_eval.adb (Eval_Arithmetic_Op): Add Loc parameter to all
	calls to Apply_Compile_Time_Constraint_Error related to division
	by zero.
2022-01-06 17:11:40 +00:00
Piotr Trojanek
a9f0ee1dfc [Ada] Remove unnecessary guards for non-empty lists
gcc/ada/

	* errout.adb (Remove_Warning_Messages): Remove unnecessary guard.
	* exp_util.adb (Kill_Dead_Code): Likewise.
	* par_sco.adb (Traverse_Declarations_Or_Statements): Likewise.
	* sem_ch3.adb (Build_Derived_Record_Type): Likewise.
	* sem_ch4.adb (Traverse_Interfaces): Likewise.
	* sem_eval.adb (Traverse_Interfaces): Likewise.
	* sem_util.adb (Collect_Interfaces): Likewise.
	(Has_Non_Null_Statements, Side_Effect_Free_Statements):
	Likewise; turn into WHILE loops, for consistency.
2022-01-06 17:11:39 +00:00
Etienne Servais
4ca7f4e26d [Ada] Fix typo on compatibility
gcc/ada/

	* sem_type.adb (Full_View_Covers): Fix typo.
2022-01-06 17:11:39 +00:00
Eric Botcazou
b542b2d97f [Ada] Fix regression in freezing code for instantiations
gcc/ada/

	* sem_ch12.adb (Insert_Freeze_Node_For_Instance): When going to
	the outer level, do not jump over following instantiations in
	the list.
2022-01-06 17:11:39 +00:00
Piotr Trojanek
00a66280cd [Ada] Remove unreferenced Warn_On_Instance
gcc/ada/

	* err_vars.ads (Warn_On_Instance): Remove; it was a relic from
	the previous handling of warning in instances that was removed
	decades ago.
2022-01-06 17:11:38 +00:00
Piotr Trojanek
005146582c [Ada] Fix style in comments about warning messages
gcc/ada/

	* errout.adb (Error_Msg_Internal): Reorder words.
	* erroutc.ads (Is_Warning_Msg): Add closing paren.
	* sem_util.adb (Compile_Time_Constraint_Error): Fix casing.
2022-01-06 17:11:38 +00:00
Piotr Trojanek
d763e11c21 [Ada] Simplify type conversions in source pointer arithmetic
gcc/ada/

	* sem_res.adb (Resolve_String_Literal): Simplify pointer
	arithmetic.
2022-01-06 17:11:37 +00:00
Piotr Trojanek
39521d958f [Ada] Refactor repeated implicit conversion from Char_Code to Uint
gcc/ada/

	* sem_res.adb (Resolve_String_Literal): Avoid unnecessary
	conversions inside "<" and ">" bodies.
2022-01-06 17:11:37 +00:00
Piotr Trojanek
cdfdd0de39 [Ada] Fix style in calls to Compile_Time_Constraint_Error
gcc/ada/

	* checks.adb (Null_Exclusion_Static_Checks,
	Selected_Range_Checks): Fix style.
2022-01-06 17:11:37 +00:00
Eric Botcazou
ffbc891aaa [Ada] Fix spurious error on instantiation with Text_IO name
gcc/ada/

	* sem_ch8.adb (Analyze_Package_Renaming): Do not check for Text_IO
	special units when the name of the renaming is a generic instance,
	which is the case for package instantiations in the GNAT model.
2022-01-06 17:11:36 +00:00
Steve Baird
5bad97d744 [Ada] Avoid building malformed component constraints
gcc/ada/

	* sem_util.adb (Build_Discriminant_Reference): In the unexpected
	case where we previously would fail an assertion, we instead
	revert to the old behavior.
2022-01-06 17:11:36 +00:00
Steve Baird
c60f23e13e [Ada] Avoid building malformed component constraints
gcc/ada/

	* sem_util.adb (Build_Actual_Subtype_Of_Component): Define a new
	local function, Build_Discriminant_Reference, and call it in
	each of the three cases where Make_Selected_Component was
	previously being called to construct a discriminant reference (2
	in Build_Actual_Array_Constraint and 1 in
	Build_Actual_Record_Constraint). Instead of unconditionally
	using the passed-in object name as the prefix for the new
	selected component node, this new function checks to see if
	perhaps a prefix of that name should be used instead.
2022-01-06 17:11:36 +00:00
Etienne Servais
41a7b9484a [Ada] Fix typo in comments found running aspell
gcc/ada/

	* atree.adb: Fix typo.
	* einfo.ads: Likewise.
	* exp_aggr.adb: Likewise.
	* exp_ch6.adb: Likewise.
	* exp_ch7.adb: Likewise.
	* exp_ch9.adb: Likewise.
	* exp_prag.adb: Likewise.
	* exp_unst.adb: Likewise.
	* exp_unst.ads: Likewise.
	* exp_util.adb: Likewise.
	* par-endh.adb: Likewise.
	* par.adb: Likewise.
	* restrict.adb: Likewise.
	* sem.ads: Likewise.
	* sem_ch4.adb: Likewise.
	* sem_ch5.adb: Likewise.
	* sem_ch6.adb: Likewise.
	* sem_ch8.adb: Likewise.
	* sem_ch12.adb: Likewise.
	* sem_ch13.adb: Likewise.
	* sem_dim.adb: Likewise.
	* sem_elab.adb: Likewise.
	* sem_prag.adb: Likewise.
	* sem_res.adb: Likewise.
	* sem_util.adb: Likewise.
	* sem_util.ads: Likewise.
	* sinfo.ads: Likewise.
	* sprint.adb: Likewise.
	* urealp.adb: Likewise.
2022-01-06 17:11:35 +00:00
Justin Squirek
1f26ff11b6 [Ada] Spurious error when using current instance of type
gcc/ada/

	* exp_ch3.adb (Build_Assignment): Replace current instance of
	type with Init_Proc formal.
	* sem_attr.adb (OK_Self_Reference): Handle recognition of
	Current_Instance to detect certain expansion.
	* sem_ch4.adb (Analyze_One_Call): Set actual's type when the
	actual in question is a current instance and its corresponding
	formal is an incomplete type.
	* sem_util.adb (Is_Current_Instance): Add check for incomplete
	views and add comment.
2022-01-06 17:11:34 +00:00
Bob Duff
0590ed7248 [Ada] New restriction No_Tagged_Type_Registration
gcc/ada/

	* libgnat/s-rident.ads (No_Tagged_Type_Registration): New
	restriction identifier.
	* restrict.ads (Implementation_Restriction): Add restriction.
	* exp_ch7.adb (Process_Declarations): Suppress
	tagged-type-related finalization actions if the restriction is
	active.  Call RTE_Available last.
	* exp_disp.adb (Make_DT): Likewise.
	* exp_util.adb (Requires_Cleanup_Actions): Return False for a
	tagged type declaration if No_Tagged_Type_Registration is
	active.
	* sem_attr.adb (Check_Stream_Attribute): Check restriction
	No_Tagged_Type_Registration.
	* libgnat/a-except.ads (Null_Occurrence): Minor: Initialize, to
	avoid stopping at a warning in gdb.
	* doc/gnat_rm/standard_and_implementation_defined_restrictions.rst:
	Document new restriction.
	* gnat_rm.texi: Regenerate.
2022-01-06 17:11:34 +00:00
Piotr Trojanek
337417795a [Ada] Remove duplicates of empty strings
gcc/ada/

	* par-ch4.adb (P_Simple_Expression): Reuse Null_String_Id.
	* prep.adb (Parse_Def_File): Likewise; remove Empty_String.
2022-01-06 17:11:33 +00:00
Eric Botcazou
7f08c07599 [Ada] Rename Any_Access into Universal_Access
gcc/ada/

	* stand.ads (Any_Access): Delete.
	(Universal_Access): New entity.
	* einfo.ads: Remove obsolete reference to Any_Access.
	* gen_il-gen-gen_entities.adb: Likewise.
	* cstand.adb (Create_Standard): Do not create Any_Access and create
	Universal_Access as a full type instead.
	* errout.adb (Set_Msg_Insertion_Type_Reference): Do not deal with
	Any_Access and deal with Universal_Access instead.
	* sem_ch3.adb (Analyze_Object_Declaration): Replace Any_Access with
	Universal_Access.
	* sem_ch4.adb (Analyze_Null): Likewise.
	(Find_Non_Universal_Interpretations): Likewise.
	(Find_Equality_Types.Try_One_Interp): Likewise and avoid shadowing
	by renaming a local variable of the same name.
	* sem_res.adb (Make_Call_Into_Operato): Likewise.
	(Resolve_Equality_Op): Likewise.
	* sem_type.adb (Covers): Likewise.
	(Specific_Type): Likewise.
2022-01-06 17:11:33 +00:00
Piotr Trojanek
f64a1bfadd [Ada] Suppress spurious CodePeer check on generic actual subprogram
gcc/ada/

	* treepr.adb (Destroy): Prevent spurious check from CodePeer.
2022-01-06 17:11:32 +00:00
Yannick Moy
4e5e43e8ca [Ada] Justify false positive message from CodePeer analysis of GNAT
gcc/ada/

	* libgnat/s-exponu.adb (Exponu): Add annotation.
2022-01-06 17:11:32 +00:00
Justin Squirek
4458909a80 [Ada] Removal of technical debt
gcc/ada/

	* exp_ch6.adb (Add_Simple_Call_By_Copy_Code): Add comments
	regarding special handling of components which depend on
	discriminants.
	* exp_dist.adb (Build_From_Any_Function): Add Real_Rep actual
	for calls to Has_Stream_Attribute_Definition.
	(Build_To_Any_Function): Likewise.
	(Build_TypeCode_Function): Likewise.
	* freeze.adb (Freeze_Entity): Add missing comment for Test_E.
	* libgnat/s-utf_32.adb: Remove disabled warning comments and
	temporarily inserted pragma warnings.  Remove very old (2006 and
	2012) comments about bootstrapping older versions.
	* par.adb (P_Identifier): Add new parameter Force_Msg.
	* par-ch2.adb (P_Identifier): Restructure and clean up function.
	* par-ch3.adb (P_Defining_Identifier): Remove code duplication
	for parsing identifiers.
	* sem_attr.adb (Stream_Attribute_Available): Add missing
	comments and add Real_Rep actual for calls to
	Has_Stream_Attribute_Definition.
	* sem_cat.adb (Has_Read_Write_Attribute): Add Real_Rep actual
	for calls to Has_Stream_Attribute_Definition.
	(Has_Stream_Attribute_Definition): Remove local Real_Rep and fix
	recursive calls. Add default value for Real_Rep.
	* sem_cat.ads (Has_Stream_Attribute_Definition): Add new out
	parameter "Real_Rep".
	* sem_type.adb (Add_Entry): Add condition to avoid passing
	non-function calls to Function_Interp_Has_Abstract_Op.
	(Function_Interp_Has_Abstract_Op): Add missing comments and
	remove check for Is_Overloadable.
	* sem_util.adb (Derivation_Too_Early_To_Inherit): Remove
	duplicated code.
2022-01-06 17:11:32 +00:00
Javier Miranda
bfbb8de660 [Ada] Crash in class-wide pre/postconditions
gcc/ada/

	* contracts.adb (Restore_Original_Selected_Component): New
	subprogram that traverses a preanalyzed expression searching for
	dispatching calls to functions whose original node was a
	selected component, and replacing them with their original node.
	This functionality is required because the preanalyis of
	dispatching calls using the Object.Operation notation transforms
	such calls, and we need the original condition to properly
	inherit and extend the condition expression on tagged type
	derivations.  This functionality was previously provided by the
	routine Install_Original_Selected_Component (as part of
	inheriting conditions); now it is performed as part of the
	preanalysis of the condition, thus avoiding repeatedly
	installing and restoring such nodes.
	(Install_Original_Selected_Component): Removed.
	(Restore_Dispatching_Calls): Removed.
2022-01-06 17:11:31 +00:00