platform/upstream/gcc.git
3 years ago[Ada] Remove End_Interp_List from the overloaded resolution API
Piotr Trojanek [Fri, 29 Jan 2021 18:34:39 +0000 (19:34 +0100)]
[Ada] Remove End_Interp_List from the overloaded resolution API

gcc/ada/

* sem_ch4.adb (Analyze_Call): Remove call to End_Interp_List.
(Process_Overloaded_Indexed_Component): Remove call to
End_Interp_List.
* sem_util.adb (Insert_Explicit_Dereference): Remove call to
End_Interp_List.
* sem_type.ads (End_Interp_List): Remove.
* sem_type.adb (Add_Entry): The guard against duplicate entries
is now checked before other conditions, so that EXIT statements
do not bypass this guard.
(End_Interp_List): Remove.

3 years ago[Ada] Crash on imported object with deep initialization and No_Aborts
Ed Schonberg [Mon, 1 Feb 2021 18:12:57 +0000 (13:12 -0500)]
[Ada] Crash on imported object with deep initialization and No_Aborts

gcc/ada/

* exp_util.adb (Remove_Init_Call): If a simple initialization
call is present, and the next statement is an initialization
block (that contains a call to a Deep_ Initialize routine),
remove the block as well, and insert the first initialization
call in it, in case it is needed for later relocation.

3 years ago[Ada] Remove some ??? comments
Gary Dismukes [Sat, 30 Jan 2021 01:03:34 +0000 (20:03 -0500)]
[Ada] Remove some ??? comments

gcc/ada/

* errout.ads (Size_Too_Small_Message): Remove low-value ???
comment.
* exp_util.ads: Remove ??? in part of overall package comments
and restructure comment to clarify.
(Duplicate_Subexpr): Remove ??? comment that seems unnecessary.
* sem_ch3.ads (Analyze_Declarations): Remove two parenthesized
??? comments and add more description of the procedure's
actions.
(Get_Discriminant_Value): Remove ??? comment requesting more
documentation, expanding description of the function's actions.
* sem_disp.ads (Check_Operation_From_Incomplete_Type): Add more
semantic description of the procedure and remove ??? comment
requesting such.
(Propagate_Tag): Refine comment to indicate meaning of formal
parameters and generally improve the spec comment (and remove
??? comment asking about the parameters).

3 years ago[Ada] Computation of Shift_Left and large signed values
Arnaud Charlet [Fri, 29 Jan 2021 15:57:39 +0000 (10:57 -0500)]
[Ada] Computation of Shift_Left and large signed values

gcc/ada/

* sem_eval.adb (Fold_Shift): Fix computation of Shift_Left
resulting in negative signed values.

3 years ago[Ada] Fix signature mismatch for Defining_Entity
Eric Botcazou [Tue, 26 Jan 2021 11:10:45 +0000 (12:10 +0100)]
[Ada] Fix signature mismatch for Defining_Entity

gcc/ada/

* sem_util.ads (Defining_Entity): Remove Empty_On_Errors parameter.
(Defining_Entity_Or_Empty): New function.
* sem_util.adb (Defining_Entity): Move bulk of implementation to...
(Defining_Entity_Or_Empty): ...here.  Do not raise Program_Error.
(Innermost_Master_Scope_Depth): Call Defining_Entity_Or_Empty.

3 years ago[Ada] Implement aspect No_Controlled_Parts
Justin Squirek [Wed, 20 Jan 2021 17:09:19 +0000 (12:09 -0500)]
[Ada] Implement aspect No_Controlled_Parts

gcc/ada/

* aspects.ads: Add entries to register
Aspect_No_Controlled_Parts.
* freeze.adb (Check_No_Controlled_Parts_Violations): Added to
check requirements of aspect No_Controlled_Parts after a type
has been frozen.
(Freeze_Entity): Add call to
Check_No_Controlled_Parts_Violations.
(Find_Aspect_No_Controlled_Parts): Created to obtain the aspect
specification for No_Controlled_Parts on a given type when
present.
(Find_Aspect_No_Controlled_Parts_Value): Protect against invalid
value.
(Has_Aspect_No_Controlled_Parts): Created as a prediate function
to check if No_Controlled_Parts has been specified on a type for
Get_Anacestor_Types_With_Specification.
(Get_Aspect_No_Controlled_Parts_Value): Created to obtain the
value of the aspect No_Controlled_Parts when specified on a
given type.
(Get_Generic_Formal_Types_In_Hierarchy): Created to collect
formal types in a given type's hierarchy.
(Get_Types_With_Aspect_In_Hierarchy): Created to collect types
in a given type's hierarchy with No_Controlled_Parts specified.
* sem_ch13.adb (Analyze_One_Aspect): Add processing for
No_Controlled_Parts, and fix error in check for allowed pragmas
for formal types.
(Check_Expr_Is_OK_Static_Expression): Created to enforce
checking of static expressions in the same vein as
Analyze_Pragma.Check_Expr_OK_Static_Expression.
* sem_util.adb (Collect_Types_In_Hierarchy): Created to collect
types in a given type's hierarchy that match a given predicate
function.
* sem_util.ads: Fix typo.
* snames.ads-tmpl: Add entry for No_Controlled_Parts.

3 years ago[Ada] Raise Constraint_Error for Compose and Scaling if Machine_Overflows
Eric Botcazou [Mon, 25 Jan 2021 18:22:39 +0000 (19:22 +0100)]
[Ada] Raise Constraint_Error for Compose and Scaling if Machine_Overflows

gcc/ada/

* libgnat/s-fatgen.adb (Scaling): Raise Constraint_Error in the
overflow case when T'Machine_Overflows is True.

3 years ago[Ada] Minor efficiency improvement in containers
Bob Duff [Mon, 25 Jan 2021 15:18:08 +0000 (10:18 -0500)]
[Ada] Minor efficiency improvement in containers

gcc/ada/

* libgnat/a-conhel.adb (TC_Check): Move the Assert into the
'if'.

3 years ago[Ada] sigtramp: fix powerpc64 against -fPIC
Frederic Konrad [Fri, 6 Nov 2020 18:59:51 +0000 (19:59 +0100)]
[Ada] sigtramp: fix powerpc64 against -fPIC

gcc/ada/

* sigtramp-vxworks-target.inc: Use a local label for the TOC.

3 years ago[Ada] Move Has_Inferable_Discriminants to Sem_Util
Claire Dross [Mon, 25 Jan 2021 14:30:22 +0000 (15:30 +0100)]
[Ada] Move Has_Inferable_Discriminants to Sem_Util

gcc/ada/

* exp_ch4.adb (Has_Inferable_Discriminants): Moved to Sem_Util.
* sem_util.ads, sem_util.adb (Has_Inferable_Discriminants):
Moved from Exp_Ch4.

3 years ago[Ada] Spurious error on protected call in inherited postcondition
Ed Schonberg [Sun, 24 Jan 2021 18:18:28 +0000 (13:18 -0500)]
[Ada] Spurious error on protected call in inherited postcondition

gcc/ada/

* exp_util.adb (Build_Class_Wide_Expression, Replace_Entity):
Add guard to verify that the enclosing pragma is a precondition.

3 years agoi386: Do not emit mask compares for mode sizes < 16 [PR100445]
Uros Bizjak [Fri, 7 May 2021 09:15:07 +0000 (11:15 +0200)]
i386: Do not emit mask compares for mode sizes < 16 [PR100445]

Recent addition of v*cond* patterns for MMXMODEI modes allows 64bit MMX
modes to enter ix86_expand_sse_cmp. ix86_use_mask_cmp_p was not prepared
to reject mode sizes < 16, resulting in ICE due to unavailability of 64bit
masked PCOM instructions.

2021-05-07  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/100445
* config/i386/i386-expand.c (ix86_use_mask_cmp_p):
Return false for mode sizes < 16.

gcc/testsuite/

PR target/100445
* gcc.target/i386/pr100445-1.c: New test.

3 years agoi386: Fix up 8-byte vcond* with -mxop [PR100445]
Jakub Jelinek [Fri, 7 May 2021 08:37:52 +0000 (10:37 +0200)]
i386: Fix up 8-byte vcond* with -mxop [PR100445]

ix86_expand_sse_movcc has special TARGET_XOP handling and the recent
addition of support of v*cond* patterns for MMXMODEI modes results in
ICEs because the expected pattern doesn't exist.  We can handle it
using 128-bit vpcmov (if we ignore the upper 64 bits like we ignore in
other TARGET_MMX_WITH_SSE support).

2021-05-07  Jakub Jelinek  <jakub@redhat.com>

PR target/100445
* config/i386/mmx.md (*xop_pcmov_<mode>): New define_insn.

* gcc.target/i386/pr100445.c: New test.

3 years agoDaily bump.
GCC Administrator [Fri, 7 May 2021 00:16:33 +0000 (00:16 +0000)]
Daily bump.

3 years agopreprocessor: Fix pp-number lexing of digit separators [PR83873, PR97604]
Joseph Myers [Thu, 6 May 2021 23:20:35 +0000 (23:20 +0000)]
preprocessor: Fix pp-number lexing of digit separators [PR83873, PR97604]

When the preprocessor lexes preprocessing numbers in lex_number, it
accepts digit separators in more cases than actually permitted in
pp-numbers by the standard syntax.

One thing this accepts is adjacent digit separators; there is some
code to reject those later, but as noted in bug 83873 it fails to
cover the case of adjacent digit separators within a floating-point
exponent.  Accepting adjacent digit separators only results in a
missing diagnostic, not in valid code being rejected or being accepted
with incorrect semantics, because the correct lexing in such a case
would have '' start the following preprocessing tokens, and no valid
preprocessing token starts '' while ' isn't valid on its own as a
preprocessing token either.  So this patch fixes that case by moving
the error for adjacent digit separators to lex_number (allowing a more
specific diagnostic than if '' were excluded from the pp-number
completely).

Other cases inappropriately accepted involve digit separators before
'.', 'e+', 'e-', 'p+' or 'p-' (or corresponding uppercase variants).
In those cases, as shown by the test digit-sep-pp-number.C added, this
can result in valid code being wrongly rejected as a result of too
many characters being included in the pp-number.  So this case is
fixed by terminating the pp-number at the correct character according
to the standard.  That test also covers the case where a digit
separator was followed by an identifier-nondigit that is not a
nondigit (e.g. a UCN); that case was already handled correctly.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

libcpp/
PR c++/83873
PR preprocessor/97604
* lex.c (lex_number): Reject adjacent digit separators here.  Do
not allow digit separators before '.' or an exponent with sign.
* expr.c (cpp_classify_number): Do not check for adjacent digit
separators here.

gcc/testsuite/
PR c++/83873
PR preprocessor/97604
* g++.dg/cpp1y/digit-sep-neg-2.C,
g++.dg/cpp1y/digit-sep-pp-number.C: New tests.
* g++.dg/cpp1y/digit-sep-line-neg.C, g++.dg/cpp1y/digit-sep-neg.C:
Adjust expected messages.

3 years agolibstdc++: Improve static assert messages
Jonathan Wakely [Thu, 6 May 2021 14:28:55 +0000 (15:28 +0100)]
libstdc++: Improve static assert messages

The message used for static assertions should be phrased so that it's
unambiguous whether the condition should be true or false. The message
should definitely not state the negative condition.

libstdc++-v3/ChangeLog:

* include/bits/stl_algobase.h (__copy_move, __copy_move_backward):
Improve static_assert messages.
* testsuite/25_algorithms/copy/58982.cc: Adjust expected output.
* testsuite/25_algorithms/copy_n/58982.cc: Likewise.

3 years agoipa-sra: Do not bail out when callers cannot be cloned
Martin Jambor [Wed, 5 May 2021 08:41:41 +0000 (10:41 +0200)]
ipa-sra: Do not bail out when callers cannot be cloned

IPA-SRA fails to produce (very simple) edge summaries when a caller
cannot be cloned or its signature cannot be changed which makes it
less powerful for no good reason.  This patch fixes that problem.

gcc/ChangeLog:

2021-04-12  Martin Jambor  <mjambor@suse.cz>

* ipa-sra.c (ipa_sra_dump_all_summaries): Dump edge summaries even
when there is no function summary.
(ipa_sra_summarize_function): produce edge summaries even when
bailing out early.

gcc/testsuite/ChangeLog:

2021-04-12  Martin Jambor  <mjambor@suse.cz>

* gcc.dg/ipa/ipa-sra-1.c (main): Revert change done by
05193687dde, make the argv again pointer to an array.

3 years agogo: use htab_eq_string in godump
Tom Tromey [Thu, 29 Apr 2021 00:47:15 +0000 (18:47 -0600)]
go: use htab_eq_string in godump

This changes godump to use the new htab_eq_string function.

gcc

* godump.c (string_hash_eq): Remove.
(go_finish): Use htab_eq_string.

3 years agogcc: use htab_eq_string
Tom Tromey [Thu, 29 Apr 2021 00:46:44 +0000 (18:46 -0600)]
gcc: use htab_eq_string

This changes one spot in GCC to use the new htab_eq_string function.

gcc

* gengtype-state.c (read_state): Use htab_eq_string.
(string_eq): Remove.

3 years agolibiberty: add htab_eq_string
Tom Tromey [Thu, 29 Apr 2021 00:44:48 +0000 (18:44 -0600)]
libiberty: add htab_eq_string

The libiberty hash table includes a helper function for strings, but
no equality function.  Consequently, this equality function has been
reimplemented a number of times in both the gcc and binutils-gdb
source trees.  This patch adds the function to the libiberty hash
table, as a step toward the goal of removing all the copies.

One change to gcc is included here.  Normally I would have put this in
the next patch, but gensupport.c used the most natural name for its
reimplementation of this function, and this can't coexist with the
extern function in libiberty.

include

* hashtab.h (htab_eq_string): Declare.

libiberty

* hashtab.c (htab_eq_string): New function.

gcc

* gensupport.c (htab_eq_string): Remove.

3 years agoAdd line debug info for virtual thunks
Bernd Edlinger [Tue, 12 Jan 2021 15:27:53 +0000 (16:27 +0100)]
Add line debug info for virtual thunks

There is no debug info when the DECL_IGNORED_P flag
is set.  But sometimes we have the line info of the
function decl, as in the case of on virtual thunks.
So instead of no line info at all, we emit at least
the location of the function decl.
On the other side, there are DECL_IGNORED_P functions
which do not have any source line info at all.
Remove those from the debug_range info, to make it
clear for the debugger that the line info for these
functions is invalid.  This has the effect that the
debugger will not step into the function without
debug info.

2021-05-06  Bernd Edlinger  <bernd.edlinger@hotmail.de>

PR ipa/97937
* debug.h (gcc_debug_hooks): Add set_ignored_loc function pointer.
* dwarf2out.h (dw_fde_node::ignored_debug): New data item.
* dbxout.c (dbx_debug_hooks, xcoff_debug_hooks): Add dummy
set_ignored_loc callbacks.
* debug.c (do_nothing_debug_hooks): Likewise.
* vmsdbgout.c (vmsdbg_debug_hooks): Likewise.
* dwarf2out.c (text_section_used, cold_text_section_used): Remove.
(in_text_section_p, last_text_label, last_cold_label,
switch_text_ranges, switch_cold_ranges): New data items.
(dwarf2out_note_section_used): Remove.
(dwarf2out_begin_prologue): Set fde->ignored_debug and
in_text_section_p.
(mark_ignored_debug_section): New helper function.
(dwarf2out_end_epilogue, dwarf2out_switch_text_section): Call
mark_ignored_debug_section.
(dwarf2_debug_hooks): Use dwarf2out_set_ignored_loc.
(dwarf2_lineno_debug_hooks): Use dummy for set_ignored_loc.
(size_of_aranges): Adjust formula for multi-part text ranges size.
(output_aranges): Output multi-part text ranges.
(dwarf2out_set_ignored_loc): New callback function.
(dwarf2out_finish): Output multi-part text ranges.
(dwarf2out_c_finalize): Clear new data items.
* final.c (final_start_function_1): Call set_ignored_loc callback.
(final_scan_insn_1): Likewise.
* ggc-page.c (gt_ggc_mx): New helper function.
* stringpool.c (gt_pch_nx): Likewise.

3 years agoFix PR testsuite/100454
Eric Botcazou [Thu, 6 May 2021 14:26:55 +0000 (16:26 +0200)]
Fix PR testsuite/100454

gcc/testsuite/
* gnat.dg/opt93.adb: Compile only for LP64 targets.

3 years agotestsuite: Add s390 to vect_*_cvt checks.
Robin Dapp [Thu, 6 May 2021 13:55:47 +0000 (15:55 +0200)]
testsuite: Add s390 to vect_*_cvt checks.

This patch adds s390 to vect_*_cvt checks in target-supports.exp.

gcc/testsuite/ChangeLog:

* lib/target-supports.exp: Add s390 checks for vect conversions.

3 years agotestsuite: Add vect_floatint_cvt to gcc.dg/vect/pr56541.c
Robin Dapp [Thu, 6 May 2021 13:52:48 +0000 (15:52 +0200)]
testsuite: Add vect_floatint_cvt to gcc.dg/vect/pr56541.c

pr56541.c converts a float vector to an int (bool) vector.  Add
vect_floatint_cvt in order to select the right targets.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/pr56541.c: Add vect_floatint_cvt.

3 years agoFortran: Assumed and explicit size class arrays [PR46691/99819].
Paul Thomas [Thu, 6 May 2021 13:41:33 +0000 (14:41 +0100)]
Fortran: Assumed and explicit size class arrays [PR46691/99819].

2021-05-06  Paul Thomas  <pault@gcc.gnu.org>

gcc/fortran/ChangeLog

PR fortran/46691
PR fortran/99819
* class.c (gfc_build_class_symbol): Remove the error that
disables assumed size class arrays. Class array types that are
not deferred shape or assumed rank are given a unique name and
placed in the procedure namespace.
* trans-array.c (gfc_trans_g77_array): Obtain the data pointer
for class arrays.
(gfc_trans_dummy_array_bias): Suppress the runtime error for
extent violations in explicit shape class arrays because it
always fails.
* trans-expr.c (gfc_conv_procedure_call): Handle assumed size
class actual arguments passed to non-descriptor formal args by
using the data pointer, stored as the symbol's backend decl.

gcc/testsuite/ChangeLog

PR fortran/46691
PR fortran/99819
* gfortran.dg/class_dummy_6.f90: New test.
* gfortran.dg/class_dummy_7.f90: New test.

3 years agolibstdc++: Implement LWG 3533 changes to foo_view::iterator::base()
Patrick Palka [Thu, 6 May 2021 13:11:44 +0000 (09:11 -0400)]
libstdc++: Implement LWG 3533 changes to foo_view::iterator::base()

libstdc++-v3/ChangeLog:

* include/std/ranges (filter_view::_Iterator::base): Make the
const& overload unconstrained and return a const reference as
per LWG 3533.  Make unconditionally noexcept.
(transform_view::_Iterator::base): Likewise.
(elements_view::_Iterator::base): Likewise.

3 years agolibstdc++: Implement LWG 3391 changes to move/counted_iterator::base()
Patrick Palka [Thu, 6 May 2021 13:11:42 +0000 (09:11 -0400)]
libstdc++: Implement LWG 3391 changes to move/counted_iterator::base()

libstdc++-v3/ChangeLog:

* include/bits/stl_iterator.h (move_iterator::base): Make the
const& overload unconstrained and return a const reference as
per LWG 3391.  Make unconditionally noexcept.
(counted_iterator::base): Likewise.
* testsuite/24_iterators/move_iterator/lwg3391.cc: New test.
* testsuite/24_iterators/move_iterator/move_only.cc: Adjust
has_member_base concept to decay-copy the result of base().

3 years agorefactor SSA rewriting timevars
Richard Biener [Thu, 6 May 2021 09:17:58 +0000 (11:17 +0200)]
refactor SSA rewriting timevars

This avoids too deep stacks of timevars during incremental
SSA rewrite and basically use TV_TREE_INTO_SSA for all into-SSA
rewrite work and TV_TREE_SSA_INCREMENTAL for update_ssa.

2021-05-06  Richard Biener  <rguenther@suse.de>

* timevar.def (TV_TREE_INSERT_PHI_NODES): Remove.
(TV_TREE_SSA_REWRITE_BLOCKS): Likewise.
(TV_TREE_INTO_SSA): New.
* tree-into-ssa.c (insert_phi_nodes): Do not account separately.
(rewrite_blocks): Likewise.
(pass_data_build_ssa): Account to TV_TREE_INTO_SSA.

3 years agolibstdc++: Fix definition of std::remove_cvref_t
Jonathan Wakely [Thu, 6 May 2021 12:40:53 +0000 (13:40 +0100)]
libstdc++: Fix definition of std::remove_cvref_t

I originally defined std::remove_cvref_t in terms of the internal
__remove_cvref_t trait, to avoid instantiating the remove_cvref class
template. However, as described in P1715R0 that is observable by users
and is thus non-conforming.

This defines remove_cvref_t as specified in the standard.

libstdc++-v3/ChangeLog:

* include/std/type_traits (remove_cvref_t): Define in terms of
remove_cvref.
* testsuite/20_util/remove_cvref/value.cc: Check alias.

3 years agoRevert "libstdc++: Use unsigned char argument to std::isdigit"
Jonathan Wakely [Thu, 6 May 2021 08:33:41 +0000 (09:33 +0100)]
Revert "libstdc++: Use unsigned char argument to std::isdigit"

This reverts commit d0d6ca019717305df0ef41e3fe1da48f7f561fac.

3 years agophiopt: Use gphi *phi instead of gimple *phi some more
Jakub Jelinek [Thu, 6 May 2021 12:05:06 +0000 (14:05 +0200)]
phiopt: Use gphi *phi instead of gimple *phi some more

Various functions in phiopt are also called with a gphi * but use
gimple * argument for it.

2021-05-06  Jakub Jelinek  <jakub@redhat.com>

* tree-ssa-phiopt.c (value_replacement, minmax_replacement,
abs_replacement, xor_replacement,
cond_removal_in_popcount_clz_ctz_pattern,
replace_phi_edge_with_variable): Change type of phi argument from
gimple * to gphi *.

3 years agoAvoid update_ssa quadraticness in loop splitting
Richard Biener [Thu, 6 May 2021 09:29:25 +0000 (11:29 +0200)]
Avoid update_ssa quadraticness in loop splitting

We already take care to not apply loop splitting to IL produced
by splitting so we should be able to delay updating SSA and
loop-closed SSA that was left broken after loop versioning
until after we processed all opportunities.

2021-05-06  Richard Biener  <rguenther@suse.de>

* tree-ssa-loop-split.c (split_loop): Delay updating SSA form.
Output an opt-info message.
(do_split_loop_on_cond): Likewise.
(tree_ssa_split_loops): Update SSA form here.

3 years agoFix IPA SRA removal of DECL_BY_REFERENCE return
Richard Biener [Thu, 6 May 2021 07:44:49 +0000 (09:44 +0200)]
Fix IPA SRA removal of DECL_BY_REFERENCE return

While doing bogus call LHS removal I noticed that cloning with
dropping a return value creates a bogus replacement for a
DECL_BY_REFERENCE DECL_RESULT, resulting in MEM_REFs of
aggregates rather than pointers.  The following fixes this
latent issue.

2021-05-06  Richard Biener  <rguenther@suse.de>

* tree-inline.c (tree_function_versioning): Fix DECL_BY_REFERENCE
return variable removal.

3 years agotestsuite: gcc.c-torture/execute/ieee/cdivchkld.c needs fmaxl
Christophe Lyon [Thu, 6 May 2021 09:05:52 +0000 (09:05 +0000)]
testsuite: gcc.c-torture/execute/ieee/cdivchkld.c needs fmaxl

The new test gcc.c-torture/execute/ieee/cdivchkld.c needs fmaxl(),
which may not be available, for instance on aarch64-elf with newlib.
As discussed in the PR, requiring c99_runtime enables to skip the test
in this case.

2021-05-06  Christophe Lyon  <christophe.lyon@linaro.org>

PR testsuite/100355
gcc/testsuite/
* gcc.c-torture/execute/ieee/cdivchkld.x: New.

3 years agoIBM Z: Fix error checking for builtin vec_permi
Marius Hillenbrand [Tue, 4 May 2021 11:30:05 +0000 (13:30 +0200)]
IBM Z: Fix error checking for builtin vec_permi

The builtin vec_permi is peculiar in that its immediate operand is
encoded differently than the immediate operand that is backing the
builtin. This fixes the check for the immediate operand, adding a
regression test in the process.

This partially reverts commit 3191c1f4488d1f7563b563d7ae2a102a26f16d82

2021-05-06  Marius Hillenbrand  <mhillen@linux.ibm.com>

gcc/ChangeLog:

* config/s390/s390-builtins.def (O_M5, O1_M5, ...): Remove unused macros.
(s390_vec_permi_s64, s390_vec_permi_b64, s390_vec_permi_u64)
(s390_vec_permi_dbl, s390_vpdi): Use the O3_U2 type for the immediate
operand.
* config/s390/s390.c (s390_const_operand_ok): Remove unused
values.

gcc/testsuite/ChangeLog:

* gcc.target/s390/zvector/imm-range-error-1.c: Fix test for
__builtin_s390_vpdi.
* gcc.target/s390/zvector/vec-permi.c: New test for builtin
vec_permi.

3 years agophiopt: Optimize (x <=> y) cmp z [PR94589]
Jakub Jelinek [Thu, 6 May 2021 08:15:40 +0000 (10:15 +0200)]
phiopt: Optimize (x <=> y) cmp z [PR94589]

genericize_spaceship genericizes i <=> j to approximately
({ int c; if (i == j) c = 0; else if (i < j) c = -1; else c = 1; c; })
for strong ordering and
({ int c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = 2; c; })
for partial ordering.
The C++ standard supports then == or != comparisons of that against
strong/partial ordering enums, or </<=/==/!=/>/>= comparisons of <=> result
against literal 0.

In some cases we already optimize that but in many cases we keep performing
all the 2 or 3 comparisons, compute the spaceship value and then compare
that.

The following patch recognizes those patterns if the <=> operands are
integral types or floating point (the latter only for -ffast-math) and
optimizes it to the single comparison that is needed (plus adds debug stmts
if needed for the spaceship result).

There is one thing I'd like to address in a follow-up: the pr94589-2.C
testcase should be matching just 12 times each, but runs
into operator>=(partial_ordering, unspecified) being defined as
(_M_value&1)==_M_value
rather than _M_value>=0.  When not honoring NaNs, the 2 case should be
unreachable and so (_M_value&1)==_M_value is then equivalent to _M_value>=0,
but is not a single use but two uses.  I'll need to pattern match that case
specially.

2021-05-06  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/94589
* tree-ssa-phiopt.c (tree_ssa_phiopt_worker): Call
spaceship_replacement.
(cond_only_block_p, spaceship_replacement): New functions.

* gcc.dg/pr94589-1.c: New test.
* gcc.dg/pr94589-2.c: New test.
* gcc.dg/pr94589-3.c: New test.
* gcc.dg/pr94589-4.c: New test.
* g++.dg/opt/pr94589-1.C: New test.
* g++.dg/opt/pr94589-2.C: New test.
* g++.dg/opt/pr94589-3.C: New test.
* g++.dg/opt/pr94589-4.C: New test.

3 years agoipa/100373 - fix emutls lowering compare-debug issue
Richard Biener [Wed, 5 May 2021 08:15:27 +0000 (10:15 +0200)]
ipa/100373 - fix emutls lowering compare-debug issue

emutls figured that tls uses in debug-insns need lowering but
that obviously has effects on code-generation as can be seen
in the following IL diff with the new testcase:

   <bb 2> [local count: 1073741824]:
-  a = 0;
+  # DEBUG BEGIN_STMT
   _4 = __builtin___emutls_get_address (&__emutls_v.b);
+  # DEBUG D#1 => *_4
+  # DEBUG d => (long int) D#1
+  # DEBUG BEGIN_STMT
+  a = 0;
+  # DEBUG BEGIN_STMT
   *_4 = 0;
   return;

where it figured the debug use of b in the original

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG D#1 => b
  # DEBUG d => (long int) D#1
  # DEBUG BEGIN_STMT
  a = 0;

needs lowering (it maybe does when we want to produce perfect
debug but that's just bad luck).

The following patch fixes this by avoiding to create a new
emutls address when visiting debug stmts and instead resets them.
Another option might be to simply not lower debug stmt uses
but I have no way to verify actual debug info for this.

2021-05-05  Richard Biener  <rguenther@suse.de>

PR ipa/100373
* tree-emutls.c (gen_emutls_addr): Pass in whether we're
dealing with a debug use and only query existing addresses
if so.
(lower_emutls_1): Avoid splitting out addresses for debug
stmts, reset the debug stmt when we fail to find existing
lowered addresses.
(lower_emutls_phi_arg): Set wi.stmt.

* gcc.dg/pr100373.c: New testcase.

3 years ago[Ada] ACATS 4.1R-c611a04: Class-wide preconditions in dispatching calls
Javier Miranda [Sun, 24 Jan 2021 18:57:18 +0000 (13:57 -0500)]
[Ada] ACATS 4.1R-c611a04: Class-wide preconditions in dispatching calls

gcc/ada/

* exp_disp.adb (Build_Class_Wide_Check): Extending the
functionality of this routine to climb to the ancestors
searching for the enclosing overridden dispatching primitive
that has a class-wide precondition to generate the check.

3 years ago[Ada] Avoid repeated analysis of constraint ranges
Piotr Trojanek [Sun, 24 Jan 2021 15:02:49 +0000 (16:02 +0100)]
[Ada] Avoid repeated analysis of constraint ranges

gcc/ada/

* sem_ch3.adb (Constraint_Index): Remove redundant problematic
analysis.

3 years ago[Ada] Assert failure on E_Enumeration_Literal and front-end unnesting
Arnaud Charlet [Sun, 24 Jan 2021 14:08:14 +0000 (09:08 -0500)]
[Ada] Assert failure on E_Enumeration_Literal and front-end unnesting

gcc/ada/

* exp_unst.adb (Note_Uplevel_Bound): Exclude
E_Enumeration_Literal.

3 years ago[Ada] Bad expansion with -gnato2 and if expression
Arnaud Charlet [Fri, 22 Jan 2021 13:55:13 +0000 (08:55 -0500)]
[Ada] Bad expansion with -gnato2 and if expression

gcc/ada/

* exp_ch4.adb (Expand_N_If_Expression):
Apply_Arithmetic_Overflow_Check will not deal with
Then/Else_Actions so skip minimizing overflow checks if any
actions are present.

3 years ago[Ada] In CodePeer mode, use regular-exception handling
Boris Yakobowski [Thu, 21 Jan 2021 17:43:27 +0000 (18:43 +0100)]
[Ada] In CodePeer mode, use regular-exception handling

gcc/ada/

* gnat1drv.adb (Adjust_Global_Switches): Simplify logic.

3 years ago[Ada] AI12-0411: Add "bool" to Interfaces.C
Arnaud Charlet [Thu, 21 Jan 2021 09:28:16 +0000 (04:28 -0500)]
[Ada] AI12-0411: Add "bool" to Interfaces.C

gcc/ada/

* libgnat/i-c.ads (bool): New type.
* libgnat/i-cexten.ads, libgnat/i-cexten__128.ads (bool): Now
a subtype of Interfaces.C.bool.
* libgnarl/s-interr__vxworks.adb (Interrupt_Manager): Qualify
False.
* libgnarl/s-interr.adb, libgnarl/s-interr__hwint.adb,
libgnarl/s-tasini.adb, libgnarl/s-tasren.adb,
libgnarl/s-tassta.adb, libgnarl/s-tpobmu.adb,
libgnarl/s-tpobop.adb, libgnarl/s-tpopmo.adb: Replace
Assert (False) by Assert (Standard.False).

3 years ago[Ada] Explain meaning of Non_Std_Executable
Ghjuvan Lacambre [Thu, 21 Jan 2021 12:29:51 +0000 (13:29 +0100)]
[Ada] Explain meaning of Non_Std_Executable

gcc/ada/

* make.adb (Compute_Executable): Document parameter.

3 years ago[Ada] Do not second-guess the hardware for underflow handling of Scaling
Eric Botcazou [Thu, 21 Jan 2021 12:12:50 +0000 (13:12 +0100)]
[Ada] Do not second-guess the hardware for underflow handling of Scaling

gcc/ada/

* libgnat/s-fatgen.adb (Scaling): Use single handling of
underflow.  Add pragma Annotate.

3 years ago[Ada] Make Is_OK_Static_Subtype use Is_Static_Subtype
Ghjuvan Lacambre [Wed, 13 Jan 2021 17:03:15 +0000 (18:03 +0100)]
[Ada] Make Is_OK_Static_Subtype use Is_Static_Subtype

gcc/ada/

* sem_eval.adb (Is_OK_Static_Subtype): Call Is_Static_Subtype,
remove redundant checks.

3 years ago[Ada] Remove repeated calls in Resolve_Range
Piotr Trojanek [Wed, 20 Jan 2021 16:41:09 +0000 (17:41 +0100)]
[Ada] Remove repeated calls in Resolve_Range

gcc/ada/

* sem_res.adb (First_Last_Ref): Simplify "if [condition] then
return True" in "return [condition]".
(Resolve_Range): Remove calls appearing in IF condition from the
THEN statements.

3 years ago[Ada] Use high-level Make_Character_Literal instead of low-level New_Node
Piotr Trojanek [Wed, 20 Jan 2021 11:41:16 +0000 (12:41 +0100)]
[Ada] Use high-level Make_Character_Literal instead of low-level New_Node

gcc/ada/

* sem_case.adb (Missing_Choice): Fix typo in comment.
(Lit_Of): Simplify with Make_Character_Literal.
(Check_Choices): Remove extra spaces in parameter
specifications.
* sem_case.ads: Same reformatting.

3 years ago[Ada] Missing semantic error on ineffective Others_Clause
Ed Schonberg [Wed, 20 Jan 2021 21:15:30 +0000 (16:15 -0500)]
[Ada] Missing semantic error on ineffective Others_Clause

gcc/ada/

* exp_aggr.adb (Expand_Array_Aggregate): If the expression in an
Others_Clause has not been analyzed because previous analysis of
the enclosing aggregate showed the clause to be ineffective i.e.
cover a null range, analyze it now to detect a possible type
illegality.

3 years ago[Ada] Fix off-by-one bug in underflow handling of Scaling
Eric Botcazou [Wed, 20 Jan 2021 16:08:51 +0000 (17:08 +0100)]
[Ada] Fix off-by-one bug in underflow handling of Scaling

gcc/ada/

* libgnat/s-fatgen.adb (Scaling): Fix off-by-one bug for underflow.

3 years ago[Ada] Assert failure on pragma Inline in procedure body
Arnaud Charlet [Wed, 20 Jan 2021 09:50:14 +0000 (04:50 -0500)]
[Ada] Assert failure on pragma Inline in procedure body

gcc/ada/

* sem_ch6.adb (Is_Inline_Pragma): Protect against N not being a
list member in both branches.

3 years ago[Ada] Remove hardcoded pragma Warnings from the formal vectors library
Piotr Trojanek [Tue, 19 Jan 2021 14:07:35 +0000 (15:07 +0100)]
[Ada] Remove hardcoded pragma Warnings from the formal vectors library

gcc/ada/

* libgnat/a-cofove.adb (Insert_Space): Remove hardcoded pragma
Warnings.

3 years ago[Ada] Set Raises_CE flag only in Apply_Compile_Time_Constraint_Error
Piotr Trojanek [Fri, 8 Jan 2021 20:43:10 +0000 (21:43 +0100)]
[Ada] Set Raises_CE flag only in Apply_Compile_Time_Constraint_Error

gcc/ada/

* sem_ch4.adb (Analyze_Selected_Component): Remove explicit call
to Set_Raises_Constraint_Error on statically missing component.
* sem_eval.adb (Eval_Arithmetic_Op): Likewise for static
divisions by integer and real zeros.
* sem_util.adb (Apply_Compile_Time_Constraint_Error): Call
Set_Raises_Constraint_Error before exiting early in GNATprove
mode.

3 years ago[Ada] Spurious constraint error on conversion of access types
Justin Squirek [Fri, 15 Jan 2021 15:59:49 +0000 (10:59 -0500)]
[Ada] Spurious constraint error on conversion of access types

gcc/ada/

* checks.adb (Make_Discriminant_Constraint_Check): Add check for
null when the type being converted is an access type.

3 years ago[Ada] Fix handling of PATs
Arnaud Charlet [Tue, 19 Jan 2021 08:32:24 +0000 (03:32 -0500)]
[Ada] Fix handling of PATs

gcc/ada/

* exp_pakd.adb (Expand_Packed_Eq): Fix handling of PATs.

3 years ago[Ada] Remove unused initial value in Read_Library_Info_From_Full
Piotr Trojanek [Tue, 19 Jan 2021 10:59:57 +0000 (11:59 +0100)]
[Ada] Remove unused initial value in Read_Library_Info_From_Full

gcc/ada/

* osint.adb (Read_Library_Info_From_Full): Cleanup unused
initial value.

3 years ago[Ada] Document a few more characteristics of floating-point support
Eric Botcazou [Mon, 18 Jan 2021 18:30:27 +0000 (19:30 +0100)]
[Ada] Document a few more characteristics of floating-point support

gcc/ada/

* doc/gnat_rm/implementation_defined_characteristics.rst (3.5.7):
Mention the IEEE standard explicitly.  Use current format names.
Document assumed rounding mode and new features of I/O support.
* gnat_rm.texi: Regenerate.

3 years ago[Ada] Reset x87 FPU to 64-bit precision for floating-point I/O on Linux
Eric Botcazou [Mon, 18 Jan 2021 10:19:01 +0000 (11:19 +0100)]
[Ada] Reset x87 FPU to 64-bit precision for floating-point I/O on Linux

gcc/ada/

* init.c (__gnat_init_float): Use full version on Linux too.

3 years ago[Ada] Make new implementation of System.Fat_Gen.Valid more robust
Eric Botcazou [Fri, 15 Jan 2021 18:01:59 +0000 (19:01 +0100)]
[Ada] Make new implementation of System.Fat_Gen.Valid more robust

gcc/ada/

* libgnat/s-fatgen.adb (Valid): Do a bit comparison with 0.0
when denormalized numbers are not supported.

3 years ago[Ada] Fix restriction No_Enumeration_Maps on both Image attributes
Piotr Trojanek [Fri, 15 Jan 2021 23:00:35 +0000 (00:00 +0100)]
[Ada] Fix restriction No_Enumeration_Maps on both Image attributes

gcc/ada/

* sem_attr.adb (Check_Enum_Image): Reword comment; add
Check_Enumeration_Maps parameter.  Now this routine combines
both referencing enumeration literals and checking restriction
No_Enumeration_Maps, if required.
(Analyze_Attribute): Remove duplicated code and instead call
Check_Enum_Image.

3 years ago[Ada] Remove redundant condition for Image attribute and Ada version
Piotr Trojanek [Fri, 15 Jan 2021 15:58:41 +0000 (16:58 +0100)]
[Ada] Remove redundant condition for Image attribute and Ada version

gcc/ada/

* sem_attr.adb (Analyze_Image_Attribute): Remove redundant
condition; add a missing header box.

3 years ago[Ada] Add mention of underscore and fix grammar error in doc for -gnatd
Gary Dismukes [Fri, 15 Jan 2021 19:45:42 +0000 (14:45 -0500)]
[Ada] Add mention of underscore and fix grammar error in doc for -gnatd

gcc/ada/

* doc/gnat_ugn/building_executable_programs_with_gnat.rst: Add
mention of underscore and fix grammar error in doc for -gnatd.
* gnat_ugn.texi: Regenerate.

3 years ago[Ada] Implement tiered support for floating-point exponentiation
Eric Botcazou [Thu, 14 Jan 2021 12:16:16 +0000 (13:16 +0100)]
[Ada] Implement tiered support for floating-point exponentiation

gcc/ada/

* Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add s-exponr, s-exnflt
and s-exnlfl.
* exp_ch4.adb (Expand_N_Op_Expon): Use RE_Exn_Float for Short_Float.
* rtsfind.ads (RTU_Id): Add System_Exn_Flt and System_Exn_LFlt.
(RE_Id): Adjust entries for RE_Exn_Float and RE_Exn_Long_Float.
(RE_Unit_Table): Likewise.
* libgnat/s-exnflt.ads: New file.
* libgnat/s-exnlfl.ads: Likewise.
* libgnat/s-exnllf.ads: Change to mere instantiation.
* libgnat/s-exnllf.adb: Move implementation to...
* libgnat/s-exponr.ads: New generic unit.
* libgnat/s-exponr.adb: ...here and also make it generic.
(Expon): Do the computation in double precision internally.

3 years ago[Ada] Style cleanups related to writing of ALI files
Piotr Trojanek [Fri, 15 Jan 2021 13:08:07 +0000 (14:08 +0100)]
[Ada] Style cleanups related to writing of ALI files

gcc/ada/

* lib-writ.adb, osint.adb, osint.ads: Cleanup.

3 years ago[Ada] Remove excessive conditions in iterations across components
Piotr Trojanek [Fri, 15 Jan 2021 13:01:59 +0000 (14:01 +0100)]
[Ada] Remove excessive conditions in iterations across components

gcc/ada/

* exp_ch3.adb (Expand_Freeze_Array_Type): Remove excessive
condition.
(Expand_N_Object_Declaration): Likewise.
(Build_Equivalent_Aggregate): Likewise.
(Initialization_Warning): Likewise; change another excessive
condition into assertion.
* freeze.adb (Freeze_Entity): Remove excessive condition.

3 years ago[Ada] Crash on if_expression used as index of discriminant-dependent array
Ed Schonberg [Thu, 14 Jan 2021 22:54:05 +0000 (17:54 -0500)]
[Ada] Crash on if_expression used as index of discriminant-dependent array

gcc/ada/

* sem_res.adb (Resolve_If_Expression): If the context of the
expression is an indexed_component, resolve the expression and
its dependent_expressions with the base type of the index, to
ensure that an index check is generated when resolving the
enclosing indexxed_component, and avoid an improper use of
discriminants out of scope, when the index type is
discriminant-dependent.

3 years ago[Ada] Fix typos
Arnaud Charlet [Fri, 15 Jan 2021 10:41:45 +0000 (05:41 -0500)]
[Ada] Fix typos

gcc/ada/

* einfo.ads, exp_prag.adb, exp_util.adb: Fix typos.

3 years agoRISC-V: Generate helpers for cbranch4.
Christoph Muellner [Wed, 5 May 2021 19:23:41 +0000 (21:23 +0200)]
RISC-V: Generate helpers for cbranch4.

On RISC-V we are facing the fact, that our conditional branches
require Pmode conditions. Currently, we generate them explicitly
with a check for Pmode and then calling the proper generator
(i.e. gen_cbranchdi4 on RV64 and gen_cbranchsi4 on RV32).
Let's simplify this code by generating the INSN helpers
and use gen_cbranch4 (Pmode).

gcc/
PR target/100266
* config/riscv/riscv.c (riscv_block_move_loop): Use cbranch helper.
* config/riscv/riscv.md (cbranch<mode>4): Generate helpers.
(stack_protect_test): Use cbranch helper.

3 years agoDaily bump.
GCC Administrator [Thu, 6 May 2021 00:16:37 +0000 (00:16 +0000)]
Daily bump.

3 years agoFix PR target/100402
Eric Botcazou [Wed, 5 May 2021 20:48:51 +0000 (22:48 +0200)]
Fix PR target/100402

This is a regression for 64-bit Windows present from mainline down to the 9
branch and introduced by the fix for PR target/99234.  Again SEH, but with
a twist related to the way MinGW implements setjmp/longjmp, which turns out
to be piggybacked on SEH with recent versions of MinGW, i.e. the longjmp
performs a bona-fide unwinding of the stack, because it calls RtlUnwindEx
with the second argument initially passed to setjmp, which is the result of
__builtin_frame_address (0) in the MinGW header file:

  define setjmp(BUF) _setjmp((BUF), __builtin_frame_address (0))

This means that we directly expose the frame pointer to the SEH machinery
here (unlike with regular exception handling where we use an intermediate
CFA) and thus that we cannot do whatever we want with it.  The old code
would leave it unaligned, i.e. not multiple of 16, whereas the new code
aligns it, but this breaks for some reason; at least it appears that a
.seh_setframe directive with 0 as second argument always works, so the
fix aligns it this way.

gcc/
PR target/100402
* config/i386/i386.c (ix86_compute_frame_layout): For a SEH target,
always return the establisher frame for __builtin_frame_address (0).
gcc/testsuite/
* gcc.c-torture/execute/20210505-1.c: New test.

3 years agox86: Build only one __cpu_model/__cpu_features2 variables
Ivan Sorokin [Mon, 3 May 2021 08:39:48 +0000 (11:39 +0300)]
x86: Build only one __cpu_model/__cpu_features2 variables

GCC -O2 generated quite bad code for this function:

bool
f (void)
{
  return __builtin_cpu_supports("popcnt")
 && __builtin_cpu_supports("ssse3");
}

f:
movl __cpu_model+12(%rip), %edx
movl %edx, %eax
shrl $6, %eax
andl $1, %eax
andl $4, %edx
movl $0, %edx
cmove %edx, %eax
ret

The problem was caused by the fact that internally every invocation of
__builtin_cpu_supports built a new variable __cpu_model and a new type
__processor_model.  Because of this, GIMPLE level optimizers weren't able
to CSE the loads of __cpu_model and optimize bit-operations properly.

Improve GCC -O2 code generation by caching __cpu_model and__cpu_features2
variables as well as their types:

f:
        movl    __cpu_model+12(%rip), %eax
        andl    $68, %eax
        cmpl    $68, %eax
        sete    %al
        ret

2021-05-05  Ivan Sorokin <vanyacpp@gmail.com>
    H.J. Lu <hjl.tools@gmail.com>

gcc/

PR target/91400
* config/i386/i386-builtins.c (ix86_cpu_model_type_node): New.
(ix86_cpu_model_var): Likewise.
(ix86_cpu_features2_type_node): Likewise.
(ix86_cpu_features2_var): Likewise.
(fold_builtin_cpu): Cache __cpu_model and __cpu_features2 with
their types.

gcc/testsuite/

PR target/91400
* gcc.target/i386/pr91400-1.c: New test.
* gcc.target/i386/pr91400-2.c: Likewise.

3 years agoPR middle-end/100325 - missing warning with -O0 on sprintf overflow with pointer...
Martin Sebor [Wed, 5 May 2021 17:07:39 +0000 (11:07 -0600)]
PR middle-end/100325 - missing warning with -O0 on sprintf overflow with pointer plus offset

gcc/ChangeLog:

* passes.def (pass_warn_printf): Run after SSA.

gcc/testsuite/ChangeLog:

* gcc.dg/tree-ssa/builtin-sprintf-warn-26.c: New test.

3 years agolibstdc++: Don't constrain some enable_borrowed_range specializations
Patrick Palka [Wed, 5 May 2021 16:07:52 +0000 (12:07 -0400)]
libstdc++: Don't constrain some enable_borrowed_range specializations

These constraints are already present on the template we're partially
specializing for.

libstdc++-v3/ChangeLog:

* include/bits/ranges_util.h (enable_borrowed_range<subrange>):
Remove constraints on this partial specialization.
* include/std/ranges (enable_borrowed_range<iota_view>):
Likewise.

3 years agolibstdc++: Implement LWG 3517/3520 for join_view/transform_view
Patrick Palka [Wed, 5 May 2021 16:07:32 +0000 (12:07 -0400)]
libstdc++: Implement LWG 3517/3520 for join_view/transform_view

libstdc++-v3/ChangeLog:

* include/std/ranges (transform_view::_Iterator::iter_swap):
Remove as per LWG 3520.
(join_view::_Iterator::iter_swap): Add indirectly_swappable
constraint as per LWG 3517.

3 years agoarm/97903: Missed optimization in lowering test operation.
Prathamesh Kulkarni [Wed, 5 May 2021 15:41:45 +0000 (21:11 +0530)]
arm/97903: Missed optimization in lowering test operation.

gcc/ChangeLog:

2021-05-05  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

* config/arm/neon.md (neon_vtst_combine<mode>): New pattern.
* config/arm/predicates.md (minus_one_operand): New predicate.

3 years agoRemove cc0 remnants from avr port
Jeff Law [Wed, 5 May 2021 15:15:42 +0000 (09:15 -0600)]
Remove cc0 remnants from avr port

gcc/
* config/avr/avr.md: Remove references to CC_STATUS_INIT.

3 years agoPR rtl-optimization/100263: Ensure register can change mode
Stefan Schulze Frielinghaus [Wed, 5 May 2021 15:00:43 +0000 (17:00 +0200)]
PR rtl-optimization/100263: Ensure register can change mode

For move2add_valid_value_p we also have to ask the target whether a
register can be accessed in a different mode than it was set before.

gcc/ChangeLog:

PR rtl-optimization/100263
* postreload.c (move2add_valid_value_p): Ensure register can
change mode.

3 years agoFix PR rtl-optimization/100411
Eric Botcazou [Wed, 5 May 2021 14:50:55 +0000 (16:50 +0200)]
Fix PR rtl-optimization/100411

This is the bootstrap failure of GCC 11 on MinGW64 configured with --enable-
tune=nocona.  The bottom line is that SEH does not support CFI for epilogues
but the x86 back-end nevertheless attaches it to instructions, so we have to
filter it out and this is done by detecting the end of the prologue by means
of the NOTE_INSN_PROLOGUE_END note.

But the compiler manages to generate a second epilogue before this note in
the RTL stream and this fools the aforementioned logic.  The root cause is
cross-jumping, which inserts a jump before the end of the prologue, in fact
just before the note; the rest (CFG cleanup, BB reordering, etc) is downhill
from there.

gcc/
PR rtl-optimization/100411
* cfgcleanup.c (try_crossjump_to_edge): Also skip end of prologue
and beginning of function markers.

3 years agoRemove NOTICE_UPDATE_CC remnants on cr16
Jeff Law [Wed, 5 May 2021 13:49:28 +0000 (07:49 -0600)]
Remove NOTICE_UPDATE_CC remnants on cr16

gcc
* config/cr16/cr16.h (NOTICE_UPDATE_CC): Remove.
* config/cr16/cr16.c (notice_update_cc): Remove.
* config/cr16/cr16-protos.h (notice_update_cc): Remove.

3 years agoPR fortran/100274 - ICE in gfc_conv_procedure_call, at fortran/trans-expr.c:6131
Harald Anlauf [Wed, 5 May 2021 13:25:50 +0000 (15:25 +0200)]
PR fortran/100274 - ICE in gfc_conv_procedure_call, at fortran/trans-expr.c:6131

When the check for the length of formal and actual character arguments
found a mismatch and emitted a warning, it would skip further checks
like that could lead to errors.  Fix that by continuing the checking.
Also catch a NULL pointer dereference.

gcc/fortran/ChangeLog:

PR fortran/100274
* interface.c (gfc_compare_actual_formal): Continue checks after
emitting warning for argument length mismatch.
* trans-expr.c (gfc_conv_procedure_call): Check for NULL pointer
dereference.

gcc/testsuite/ChangeLog:

PR fortran/100274
* gfortran.dg/argument_checking_25.f90: New test.

3 years agoi386: Implement integer vector compares for 64bit vectors [PR98218]
Uros Bizjak [Wed, 5 May 2021 13:07:25 +0000 (15:07 +0200)]
i386: Implement integer vector compares for 64bit vectors [PR98218]

Implement integer vector compares for 64bit vectors for TARGET_MMX_WITH_SSE.

2021-05-05  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/98218
* config/i386/i386-expand.c (ix86_expand_int_sse_cmp):
Handle V8QI, V4HI and V2SI modes.
* config/i386/i386.c (ix86_build_const_vector): Handle V2SImode.
(ix86_build_signbit_mask): Ditto.
* config/i386/mmx.md (MMXMODE14): New mode iterator.
(<smaxmin:code><MMXMODE14:mode>3): New expander.
(*mmx_<smaxmin:code><MMXMODE14:mode>3): New insn pattern.
(<umaxmin:code><MMXMODE24:mode>3): New expander.
(*mmx_<umaxmin:code><MMXMODE24:mode>3): New insn pattern.
(vec_cmp<MMXMODEI:mode><MMXMODEI:mode>): New expander.
(vec_cmpu<MMXMODEI:mode><MMXMODEI:mode>): Ditto.
(vcond<MMXMODEI:mode><MMXMODEI:mode>): Ditto.
(vcondu<MMXMODEI:mode><MMXMODEI:mode>): Ditto.
(vcond_mask_<MMXMODEI:mode><MMXMODEI:mode>): Ditto.

gcc/testsuite/

PR target/98218
* gcc.target/i386/pr98218-1.c: New test.
* gcc.target/i386/pr98218-1a.c: Ditto.
* gcc.target/i386/pr98218-2.c: Ditto.
* gcc.target/i386/pr98218-2a.c: Ditto.
* gcc.target/i386/pr98218-3.c: Ditto.
* gcc.target/i386/pr98218-3a.c: Ditto.
* gcc.dg/vect/vect-bool-cmp.c (dg-final):
Scan vect tree dump for "LOOP VECTORIZED", not VECTORIZED.

3 years agolibstdc++: Add tests for std::invoke feature test macro
Jonathan Wakely [Wed, 5 May 2021 11:41:14 +0000 (12:41 +0100)]
libstdc++: Add tests for std::invoke feature test macro

libstdc++-v3/ChangeLog:

* testsuite/20_util/function_objects/invoke/3.cc: Check feature
test macro.
* testsuite/20_util/function_objects/invoke/version.cc: New test.

3 years agolibstdc++: Use unsigned char argument to std::isdigit
Jonathan Wakely [Wed, 5 May 2021 10:19:55 +0000 (11:19 +0100)]
libstdc++: Use unsigned char argument to std::isdigit

Passing plain char to isdigit is undefined if the value is negative.

libstdc++-v3/ChangeLog:

* include/std/charconv (__from_chars_alnum): Pass unsigned
char to std::isdigit.

3 years agoMinor formatting tweak
Eric Botcazou [Wed, 5 May 2021 10:48:44 +0000 (12:48 +0200)]
Minor formatting tweak

gcc/testsuite/
* gnat.dg/debug17.adb: Minor tweak.

3 years agoGenerate debug info for local dynamic record types
Eric Botcazou [Wed, 5 May 2021 10:07:24 +0000 (12:07 +0200)]
Generate debug info for local dynamic record types

In Ada you can embed VLAs in local record types and thus end up with
dynamic offsets in record types, which are not well described in DWARF
because 1) the temporaries generated for them by the gimplifier are
naturally marked DECL_IGNORED_P and 2) when the types are referenced
in nested subprograms, the DWARF back-end does not correctly handle
the rewritten references.

gcc/
* dwarf2out.c (loc_list_from_tree_1) <DECL>: During early DWARF, do
not expand the VALUE_EXPR of variables put in the non-local frame.
* gimplify.c (gimplify_type_sizes) <RECORD_TYPE>: If the type is not
to be ignored for debug info, ensure its variable offsets are not.
gcc/testsuite/
* gnat.dg/debug8.adb: Minor tweak.
* gnat.dg/debug11.adb: Likewise.
* gnat.dg/debug16.adb: Likewise.
* gnat.dg/debug17.adb: New test.
* gnat.dg/specs/debug1.ads: Minor tweak.

3 years agolibgfortran/intrinsics/chmod.c: Silence unused var warning
Tobias Burnus [Wed, 5 May 2021 09:48:48 +0000 (11:48 +0200)]
libgfortran/intrinsics/chmod.c: Silence unused var warning

libgfortran/ChangeLog:

* intrinsics/chmod.c (chmod_internal): Only declare mode_mask var
if HAVE_UMASK.

3 years agotestsuite: Add s390 to gcc.dg/vect/slp-21.c
Robin Dapp [Tue, 27 Apr 2021 15:11:54 +0000 (17:11 +0200)]
testsuite: Add s390 to gcc.dg/vect/slp-21.c

On s390 we vectorize 4 statements using SLP.  Add s390*-*-* to the
appropriate dg-finals.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/slp-21.c: Add s390.

3 years ago[Ada] Fix expansion of attributes Input/Output for unchecked union types
Piotr Trojanek [Thu, 14 Jan 2021 16:28:31 +0000 (17:28 +0100)]
[Ada] Fix expansion of attributes Input/Output for unchecked union types

gcc/ada/

* exp_attr.adb (Expand_N_Attribute_Reference): Fix expansion of
attributes Input and Output for unchecked unions.
* sem_case.ads: Fix typo "disriminant" and refill comment.

3 years ago[Ada] Reuse Has_Defaulted_Discriminants where possible
Piotr Trojanek [Thu, 14 Jan 2021 20:14:06 +0000 (21:14 +0100)]
[Ada] Reuse Has_Defaulted_Discriminants where possible

gcc/ada/

* exp_attr.adb, exp_ch9.adb, sem_ch3.adb: Reuse
Has_Defaulted_Discriminants.
* sem_ch4.adb (Analyze_Allocator): Reuse
Has_Defaulted_Discriminants (after reordering conjuncts); remove
redundant IF statement, whose condition is implied by
Has_Defaulted_Discriminants.
* sem_util.adb (Has_Defaulted_Discriminants): Has_Discriminants
implies that the First_Discriminant is present.
(Is_Fully_Initialized_Type): Reuse Has_Defaulted_Discriminants.

3 years ago[Ada] Incorrect accessibility level on actual in procedure call
Justin Squirek [Thu, 14 Jan 2021 12:52:26 +0000 (07:52 -0500)]
[Ada] Incorrect accessibility level on actual in procedure call

gcc/ada/

* exp_ch6.adb (Expand_Call_Helper): Add condition to check for
expanded actuals and remove dead code.

3 years ago[Ada] Detect unchecked union subcomponents in nested variant parts
Piotr Trojanek [Wed, 13 Jan 2021 16:17:34 +0000 (17:17 +0100)]
[Ada] Detect unchecked union subcomponents in nested variant parts

gcc/ada/

* exp_ch4.adb (Has_Unconstrained_UU_Component): Rewrite to
follow the Ada RM grammar.

3 years ago[Ada] Refine types of variables with call to Scope as their initial values
Piotr Trojanek [Wed, 13 Jan 2021 21:53:32 +0000 (22:53 +0100)]
[Ada] Refine types of variables with call to Scope as their initial values

gcc/ada/

* exp_ch4.adb (User_Defined_Primitive_Equality_Op): Refine type
of a local variable.
* exp_dbug.adb (Scope_Contains): Refine all types from Node_Id
to Entity_Id; rename parameters to match those of the
Scope_Within routine (which is similar but not the same); also,
simplify an OR ELSE into a membership test.

3 years ago[Ada] Detect unchecked union components with fully qualified names
Piotr Trojanek [Wed, 13 Jan 2021 11:53:21 +0000 (12:53 +0100)]
[Ada] Detect unchecked union components with fully qualified names

gcc/ada/

* exp_ch4.adb (Component_Is_Unconstrained_UU): Detect both
qualified and unqualified names of unchecked union components.

3 years ago[Ada] Remove redundant checks for empty lists
Piotr Trojanek [Tue, 12 Jan 2021 20:37:26 +0000 (21:37 +0100)]
[Ada] Remove redundant checks for empty lists

gcc/ada/

* exp_ch4.adb (Variant_Is_Unconstrained_UU): Remove redundant
check for empty list.
* exp_disp.adb (Find_Entry_Index): Simplify by removing
redundant check and counting from zero; fix type of a local
variable.
* sem_ch12.adb (Save_Global_Descendant): Remove an unnecessary
special-case for empty lists.

3 years ago[Ada] Cleanup a statically true condition in expanded raise statement
Piotr Trojanek [Tue, 12 Jan 2021 20:16:28 +0000 (21:16 +0100)]
[Ada] Cleanup a statically true condition in expanded raise statement

gcc/ada/

* exp_ch4.adb (Apply_Accessibility_Check): Skip a statically
true condition in expanded raise statement.

3 years ago[Ada] Fix s-os_lib.adb so vectorizing compilation works
Bob Duff [Tue, 12 Jan 2021 18:25:07 +0000 (13:25 -0500)]
[Ada] Fix s-os_lib.adb so vectorizing compilation works

gcc/ada/

* libgnat/s-os_lib.adb (Missed_Drive_Letter): Simplify the code.

3 years ago[Ada] Spurious warning on useless assignment with target name
Ed Schonberg [Tue, 12 Jan 2021 15:46:26 +0000 (10:46 -0500)]
[Ada] Spurious warning on useless assignment with target name

gcc/ada/

* sem_ch5.adb (Analyze_Assignment): Do not emit the warning that
a previous value of the target object is useless if the
right-hand side of the assignment includes target names.

3 years ago[Ada] Do not use hash function for enumeration Value with trampolines
Eric Botcazou [Tue, 12 Jan 2021 15:01:15 +0000 (16:01 +0100)]
[Ada] Do not use hash function for enumeration Value with trampolines

gcc/ada/

* exp_imgv.adb: Add with/use clauses for Targparm.
(Build_Enumeration_Image_Tables): Set type of Threshold to Nat and
initialize it to Nat'Last if the type is local and the target does
not support descriptors.  Adjust Threshold_For_Size similarly.
(Expand_Value_Attribute): Minor tweaks.

3 years ago[Ada] Move Build_And_Insert_CUDA_Initialization to expansion phase
Ghjuvan Lacambre [Tue, 12 Jan 2021 12:57:59 +0000 (13:57 +0100)]
[Ada] Move Build_And_Insert_CUDA_Initialization to expansion phase

gcc/ada/

* exp_ch7.adb (Expand_N_Package_Body): Add CUDA init call.
* sem_ch7.adb (Analyze_Package_Body_Helper): Remove CUDA init
call.

3 years ago[Ada] Don't emit style errors when parens are required
Ghjuvan Lacambre [Mon, 11 Jan 2021 15:26:45 +0000 (16:26 +0100)]
[Ada] Don't emit style errors when parens are required

gcc/ada/

* par-ch5.adb (P_Condition): Check if expression is declare
expression.