platform/upstream/gcc.git
3 years agolibstdc++: Suppress -Wstringop-overread warning in test
Jonathan Wakely [Fri, 18 Jun 2021 10:08:19 +0000 (11:08 +0100)]
libstdc++: Suppress -Wstringop-overread warning in test

When compiled with -m32 -O2 -D_GLIBCXX_USE_CXX11_ABI=0 we get a warning
for 21_strings/basic_string/cons/char/1.cc:

bits/char_traits.h:409:56: warning: ‘void* __builtin_memcpy(void*, const void*, unsigned int)’ reading 1073741821 bytes from a region of size 19 [-Wstringop-overread]

The warning is legitimate, even if that line cannot be reached because
we throw std::length_error before getting there. Since the invalid
length is deliberate (and mentioned in a comment) just suppress the
warning, so that the test can verify we get the exception.

Also remove an unused typedef that produces another warning.

libstdc++-v3/ChangeLog:

* testsuite/21_strings/basic_string/cons/char/1.cc: Use
diagnostic pragma to suppress -Wstringop-overread error.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
3 years agostor-layout: Don't create DECL_BIT_FIELD_REPRESENTATIVE for QUAL_UNION_TYPE [PR101062]
Jakub Jelinek [Fri, 18 Jun 2021 09:20:40 +0000 (11:20 +0200)]
stor-layout: Don't create DECL_BIT_FIELD_REPRESENTATIVE for QUAL_UNION_TYPE [PR101062]

> The following patch does create them, but treats all such bitfields as if
> they were in a structure where the particular bitfield is the only field.

While the patch passed bootstrap/regtest on the trunk, when trying to
backport it to 11 branch the bootstrap failed with
atree.ads:3844:34: size for "Node_Record" too small
errors.  Turns out the error is not about size being too small, but actually
about size being non-constant, and comes from:
 /* In a FIELD_DECL of a RECORD_TYPE, this is a pointer to the storage
    representative FIELD_DECL.  */
 #define DECL_BIT_FIELD_REPRESENTATIVE(NODE) \
   (FIELD_DECL_CHECK (NODE)->field_decl.qualifier)

 /* For a FIELD_DECL in a QUAL_UNION_TYPE, records the expression, which
    if nonzero, indicates that the field occupies the type.  */
  #define DECL_QUALIFIER(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.qualifier)
so by setting up DECL_BIT_FIELD_REPRESENTATIVE in QUAL_UNION_TYPE we
actually set or modify DECL_QUALIFIER and then construct size as COND_EXPRs
with those bit field representatives (e.g. with array type) as conditions
which doesn't fold into constant.

The following patch fixes it by not creating DECL_BIT_FIELD_REPRESENTATIVEs
for QUAL_UNION_TYPE as there is nowhere to store them,

Shall we change tree.h to document that DECL_BIT_FIELD_REPRESENTATIVE
is valid also on UNION_TYPE?
I see:
tree-ssa-alias.c-  if (TREE_CODE (type1) == RECORD_TYPE
tree-ssa-alias.c:      && DECL_BIT_FIELD_REPRESENTATIVE (field1))
tree-ssa-alias.c:    field1 = DECL_BIT_FIELD_REPRESENTATIVE (field1);
tree-ssa-alias.c-  if (TREE_CODE (type2) == RECORD_TYPE
tree-ssa-alias.c:      && DECL_BIT_FIELD_REPRESENTATIVE (field2))
tree-ssa-alias.c:    field2 = DECL_BIT_FIELD_REPRESENTATIVE (field2);
Shall we change that to || == UNION_TYPE or do we assume all fields
are overlapping in a UNION_TYPE already?
At other spots (asan, ubsan, expr.c) it is unclear what will happen
if they see a QUAL_UNION_TYPE with a DECL_QUALIFIER (or does the Ada FE
lower that somehow)?

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

PR middle-end/101062
* stor-layout.c (finish_bitfield_layout): Don't add bitfield
representatives in QUAL_UNION_TYPE.

3 years ago[Ada] Additional error checking on index constraints with fixed-lower-bound ranges
Gary Dismukes [Tue, 23 Mar 2021 23:03:23 +0000 (19:03 -0400)]
[Ada] Additional error checking on index constraints with fixed-lower-bound ranges

gcc/ada/

* sem_ch3.adb (Constrain_Array): Add error checking for
fixed-lower-bound and constrained index ranges applied
inappropriately on subtypes of unconstrained and
fixed-lower-bound array types.
(Constrain_Index): Correct and refine comment related to
fixed-lower-bound index ranges.

3 years ago[Ada] Minor comment cleanups
Bob Duff [Tue, 23 Mar 2021 20:00:03 +0000 (16:00 -0400)]
[Ada] Minor comment cleanups

gcc/ada/

* gen_il-gen.adb: Improve comments.
* snames.ads-tmpl (Convention_Id): Remove "--  Plenty of space
for expansion", because that's irrelevant now that we are no
longer laying out node fields by hand.

3 years ago[Ada] Fix detection of overlapping slices indexed by characters
Piotr Trojanek [Tue, 23 Mar 2021 00:11:57 +0000 (01:11 +0100)]
[Ada] Fix detection of overlapping slices indexed by characters

gcc/ada/

* sem_util.adb (Denotes_Same_Object): Handle character literals
just like integer literals.

3 years ago[Ada] Fix detection of overlapping actuals with renamings
Piotr Trojanek [Tue, 23 Mar 2021 00:00:50 +0000 (01:00 +0100)]
[Ada] Fix detection of overlapping actuals with renamings

gcc/ada/

* sem_util.adb (Denotes_Same_Object): Explicitly test for node
kinds being the same; deal with renamings one-by-one; adjust
numbers in references to the Ada RM.

3 years ago[Ada] Make "gcc -gnatDGL" handle unterminated last lines properly
Bob Duff [Mon, 22 Mar 2021 20:22:49 +0000 (16:22 -0400)]
[Ada] Make "gcc -gnatDGL" handle unterminated last lines properly

gcc/ada/

* sprint.adb (Write_Source_Line): Check for EOF in
Line_Terminator loop.  Note that when a source file is read in,
an EOF character is added to the end.

3 years ago[Ada] Reuse Package_Specification in Is_Incomplete_Or_Private_Type
Piotr Trojanek [Mon, 22 Mar 2021 14:38:34 +0000 (15:38 +0100)]
[Ada] Reuse Package_Specification in Is_Incomplete_Or_Private_Type

gcc/ada/

* sem_aux.adb (Package_Specification): Add assertions to confirm
the kind of the of parameter and returned node.
* sem_ch12.adb (Remove_Parent): Reorder conditions; this change
appears to be semantically neutral, but is enough to avoid the
problematic call to Package_Specification.
* sem_util.adb (Is_Incomplete_Or_Private_Type): Replace loop
with a call to Package_Specification.

3 years ago[Ada] Avoid passing Enum_Lit'Size to the back end
Bob Duff [Mon, 22 Mar 2021 11:39:40 +0000 (07:39 -0400)]
[Ada] Avoid passing Enum_Lit'Size to the back end

gcc/ada/

* sem_attr.adb (Eval_Attribute): For Enum_Lit'Size, use
Enum_Type'Object_Size.

3 years ago[Ada] Fix inaccuracies in signal handler trampoline for aarch64-vxworks
Olivier Hainque [Sat, 20 Mar 2021 21:10:49 +0000 (21:10 +0000)]
[Ada] Fix inaccuracies in signal handler trampoline for aarch64-vxworks

gcc/ada/

* sigtramp-vxworks-target.inc (__aarch64__): Sync
REGNO_PC_OFFSET with the back-end DWARF_ALT_FRAME_RETURN_COLUMN.
In CFI_COMMON_REGS, leave r18 alone, VxWorks private.

3 years ago[Ada] Ada2020: AI12-0195 overriding class-wide pre/post conditions
Javier Miranda [Fri, 19 Mar 2021 20:01:40 +0000 (16:01 -0400)]
[Ada] Ada2020: AI12-0195 overriding class-wide pre/post conditions

gcc/ada/

* contracts.adb (Process_Spec_Postconditions): Add missing
support for aliased subprograms and handle wrappers of
class-wide pre/post conditions.
(Process_Inherited_Preconditions): Add missing support for
aliased subprograms and handle wrappers of class-wide pre/post
conditions.
* einfo.ads (Class_Wide_Clone): Fix typo.
(Is_Class_Wide_Clone): Removed since it is not referenced.
(Is_Wrapper): Documenting new flag.
(LSP_Subprogram): Documenting new attribute.
* exp_ch3.adb (Make_Controlling_Function_Wrappers): Decorate
wrapper as Is_Wrapper and adjust call to
Override_Dispatching_Operation.
* freeze.adb (Build_Inherited_Condition_Pragmas): Fix typo in
documentation.
(Check_Inherited_Conditions): Handle LSP wrappers; ensure
correct decoration of LSP wrappers.
* gen_il-fields.ads (Is_Class_Wide_Clone): Removed.
(Is_Wrapper): Added.
(LSP_Subprogram): Added.
* gen_il-gen-gen_entities.adb (Is_Class_Wide_Clone): Removed.
(Is_Wrapper): Added.
(LSP_Subprogram): Added.
* gen_il-internals.adb (Image): Adding uppercase image of
LSP_Subprogram.
* sem_ch6.adb (New_Overloaded_Entity): Fix decoration of LSP
wrappers.
* sem_disp.ads (Override_Dispatching_Operation): Remove
parameter Is_Wrapper; no longer needed.
* sem_disp.adb (Check_Dispatching_Operation): Adjust assertion.
(Override_Dispatching_Operation): Remove parameter Is_Wrapper;
no longer needed.
* treepr.adb (Image): Adding uppercase image of LSP_Subprogram.

3 years ago[Ada] Premature freezing of types
Arnaud Charlet [Fri, 19 Mar 2021 07:54:38 +0000 (03:54 -0400)]
[Ada] Premature freezing of types

gcc/ada/

* exp_ch4.adb (Expand_N_Quantified_Expression): Ensure the type
of the name of a "for of" loop is frozen.
* exp_disp.adb (Check_Premature_Freezing): Complete condition to
take into account a private type completed by another private
type now that the freezing rule are better implemented.
* freeze.adb (Freeze_Entity.Freeze_Profile): Do not perform an
early freeze on types if not in the proper scope. Special case
expression functions that requires access to the dispatch table.
(Should_Freeze_Type): New.
* sem_ch13.adb (Resolve_Aspect_Expressions): Prevent assert
failure in case of an invalid tree (previous errors detected).
* sem_res.adb (Resolve): Remove kludge related to entities
causing incorrect premature freezing.
* sem_util.adb (Ensure_Minimum_Decoration): Add protection
against non base types.

3 years ago[Ada] Missing check for assigning too-large array to fixed-lower-bound object
Gary Dismukes [Fri, 19 Mar 2021 23:28:38 +0000 (19:28 -0400)]
[Ada] Missing check for assigning too-large array to fixed-lower-bound object

gcc/ada/

* sem_ch3.adb (Constrain_Index): Set the High_Bound of a
fixed-lower-bound subtype's range to T (the subtype of the FLB
index being constrained) rather than Base_Type (T).

3 years ago[Ada] Remove AAMP from compiler sources
Bob Duff [Thu, 18 Mar 2021 22:46:16 +0000 (18:46 -0400)]
[Ada] Remove AAMP from compiler sources

gcc/ada/

* ada_get_targ.adb, aspects.ads, checks.adb, cstand.adb,
einfo.ads, exp_attr.adb, freeze.adb, get_targ.adb,
libgnat/a-textio.ads, libgnat/g-memdum.ads,
libgnat/s-scaval__128.adb, libgnat/s-scaval.adb, make.adb,
osint.ads, par-prag.adb, sem_ch13.adb, sem_prag.adb,
sem_prag.ads, set_targ.adb, set_targ.ads, snames.ads-tmpl,
targparm.ads, types.ads: Remove AAMP-specific code.
* switch.ads: Minor reformatting.
* gen_il-fields.ads, gen_il-gen.adb,
gen_il-gen-gen_entities.adb, gen_il-types.ads, einfo-utils.adb,
einfo-utils.ads: Package Types now contains "type Float_Rep_Kind
is (IEEE_Binary);", which used to also have an enumeral AAMP.
Gen_IL can't handle fields of this type, which would be zero
sized. Therefore, we move the Float_Rep field into Einfo.Utils
as a synthesized attribute. (We do not delete the field
altogether, in case we want new floating-point representations
in the future.)
* doc/gnat_rm/implementation_defined_pragmas.rst,
doc/gnat_rm/implementation_defined_aspects.rst,
doc/gnat_ugn/building_executable_programs_with_gnat.rst,
doc/gnat_ugn/the_gnat_compilation_model.rst: Remove
AAMP-specific documentation.
* gnat_rm.texi, gnat_ugn.texi: Regenerate.

3 years ago[Ada] Error issued on string literal assigned to fixed-lower-bound array
Gary Dismukes [Fri, 19 Mar 2021 00:23:04 +0000 (20:23 -0400)]
[Ada] Error issued on string literal assigned to fixed-lower-bound array

gcc/ada/

* exp_util.adb (Expand_Sliding_Conversion): Move test of
Is_Fixed_Lower_Bound_Subtype to an assertion. Exclude string
literals from sliding expansion.

3 years ago[Ada] Warn about overlapping actuals in all versions of Ada
Piotr Trojanek [Wed, 17 Mar 2021 12:36:50 +0000 (13:36 +0100)]
[Ada] Warn about overlapping actuals in all versions of Ada

gcc/ada/

* sem_warn.adb (Warn_On_Overlapping_Actuals): Cleanup conditions
related to Ada_Version.

3 years ago[Ada] Reuse First_Actual in Address_Value
Piotr Trojanek [Wed, 17 Mar 2021 16:21:48 +0000 (17:21 +0100)]
[Ada] Reuse First_Actual in Address_Value

gcc/ada/

* sem_util.adb (Address_Value): Simplify.

3 years ago[Ada] Correct A'First (N) where N is an object name
Bob Duff [Wed, 17 Mar 2021 16:14:12 +0000 (12:14 -0400)]
[Ada] Correct A'First (N) where N is an object name

gcc/ada/

* sem_attr.adb (Check_Array_Or_Scalar_Type): Use Expr_Value
instead of Intval, because the latter only exists in literals.
Remove Set_Etype on E1; setting the type is done elsewhere.

3 years ago[Ada] Fix asymmetries in detection of overlapping actuals
Piotr Trojanek [Tue, 16 Mar 2021 17:38:53 +0000 (18:38 +0100)]
[Ada] Fix asymmetries in detection of overlapping actuals

gcc/ada/

* sem_warn.adb (Warn_On_Overlapping_Actuals): Examine types of
both formal parameters; refactor a complex detection of
by-reference types.

3 years ago[Ada] Fix handling of gnat check/test commands
Arnaud Charlet [Wed, 17 Mar 2021 07:59:23 +0000 (03:59 -0400)]
[Ada] Fix handling of gnat check/test commands

gcc/ada/

* gnatcmd.adb: Fix handling of check and test commands.

3 years ago[Ada] Add documentation for the array fixed-lower-bound feature
Gary Dismukes [Mon, 15 Mar 2021 23:27:34 +0000 (19:27 -0400)]
[Ada] Add documentation for the array fixed-lower-bound feature

gcc/ada/

* doc/gnat_rm/implementation_defined_pragmas.rst: Add
documentation for the array fixed-lower-bound feature.
* gnat_rm.texi: Regenerate.

3 years ago[Ada] New debug switch to disable large static aggregates
Bob Duff [Tue, 16 Mar 2021 19:45:48 +0000 (15:45 -0400)]
[Ada] New debug switch to disable large static aggregates

gcc/ada/

* debug.adb: Document switch.
* exp_aggr.adb: If -gnatd_g was given, then do not bump the
limit to 500_000.

3 years ago[Ada] Warn on 'in out' param containing access in private type
Bob Duff [Tue, 16 Mar 2021 18:56:09 +0000 (14:56 -0400)]
[Ada] Warn on 'in out' param containing access in private type

gcc/ada/

* sem_util.ads, sem_util.adb (Has_Access_Values): Remove
Include_Internal parameter that was added in previous change.
* sem_warn.adb (Warnings_Off_E1): Back out E_Out_Parameter ==>
Formal_Kind change made previously. Check Is_Private_Type to
avoid warnings on private types. Misc cleanup.
* sem_attr.adb (Attribute_Has_Access_Values): Remove
Include_Internal parameter.

3 years ago[Ada] Remove dead code for overlapping actuals in prefix notation
Piotr Trojanek [Mon, 15 Mar 2021 13:53:29 +0000 (14:53 +0100)]
[Ada] Remove dead code for overlapping actuals in prefix notation

gcc/ada/

* sem_warn.adb (Warn_On_Overlapping_Actuals): Remove dead branch
for overlapping actuals in prefix notation.

3 years ago[Ada] Do not clear Is_True_Constant flag on imported constants
Eric Botcazou [Tue, 16 Mar 2021 09:24:39 +0000 (10:24 +0100)]
[Ada] Do not clear Is_True_Constant flag on imported constants

gcc/ada/

* sem_prag.adb (Process_Import_Or_Interface): Do not
artificially record a possible modification for a constant.

3 years ago[Ada] Code cleanups in exp_ch6.adb
Arnaud Charlet [Sun, 14 Mar 2021 17:32:59 +0000 (13:32 -0400)]
[Ada] Code cleanups in exp_ch6.adb

gcc/ada/

* exp_ch6.adb (Expand_Call_Helper): Code cleanups.

3 years ago[Ada] Update comments related to TBD
Arnaud Charlet [Mon, 15 Mar 2021 10:01:38 +0000 (11:01 +0100)]
[Ada] Update comments related to TBD

gcc/ada/

* exp_aggr.adb, exp_dist.adb, exp_unst.adb, sa_messages.ads,
sem_ch13.adb, sem_ch3.adb, sem_ch5.adb, sem_eval.adb,
sem_util.adb, sem_util.ads, sinfo.ads: Update comments.

3 years ago[Ada] Implement basic support for -fdiagnostics-format=json
Ghjuvan Lacambre [Wed, 27 Jan 2021 08:53:26 +0000 (09:53 +0100)]
[Ada] Implement basic support for -fdiagnostics-format=json

gcc/ada/

* back_end.adb (Scan_Back_End_Switches): Set Opt.JSON_Output to
True if -fdiagnostics-format=json option is found.
* back_end.ads (Scan_Compiler_Arguments): Mention
Opt.JSON_Output.
* errout.adb (Output_JSON_Message): New procedure.
(Output_Messages): If Opt.JSON_Output is True, print messages
with new Output_JSON_Message procedure.
* opt.ads: Declare JSON_Output variable.
* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
Mention new -fdiagnostics-format option.
* gnat_ugn.texi: Regenerate.

3 years ago[Ada] Relax null exclusion mismatch check in Relaxed_RM_Semantics mode
Arnaud Charlet [Mon, 15 Mar 2021 07:45:35 +0000 (03:45 -0400)]
[Ada] Relax null exclusion mismatch check in Relaxed_RM_Semantics mode

gcc/ada/

* sem_ch6.adb (Null_Exclusions_Match): Relax null exclusion
mismatch check when Relaxed_RM_Semantics is set.

3 years ago[Ada] Replace Opt.Extensions_Allowed by Ada_Version
Arnaud Charlet [Sun, 14 Mar 2021 19:49:39 +0000 (15:49 -0400)]
[Ada] Replace Opt.Extensions_Allowed by Ada_Version

gcc/ada/

* fe.h, opt.adb, opt.ads, par-prag.adb, sem_prag.adb,
switch-c.adb (Extensions_Allowed): Replace by a function.
(Ada_Version_Type): Add new value Ada_With_Extensions, to
replace setting of Extensions_Allowed.  Update setting of
Extensions_Allowed.

3 years ago[Ada] GNAT.Compiler_Version and LTO
Arnaud Charlet [Fri, 12 Mar 2021 12:57:03 +0000 (07:57 -0500)]
[Ada] GNAT.Compiler_Version and LTO

gcc/ada/

* bindgen.adb (Gen_Output_File_Ada): Generate a new constant
GNAT_Version_Address.
* libgnat/g-comver.adb (GNAT_Version_Address): New;
(GNAT_Version): Use GNAT_Version_Address to disable LTO warning.

3 years ago[Ada] Ada2020: Special handling of types derived from runtime
Javier Miranda [Sat, 13 Mar 2021 19:47:59 +0000 (14:47 -0500)]
[Ada] Ada2020: Special handling of types derived from runtime

gcc/ada/

* einfo.ads (Is_Ada_2022_Only): Adding documentation.
* gen_il-fields.ads (Is_Ada_2022_Only): New flag.
* gen_il-gen-gen_entities.adb (Is_Ada_2022_Only): New flag.
* itypes.adb (Create_Null_Excluding_Itype): Inherit
Is_Ada_2022_Only.
* sem_ch3.adb (Check_Abstract_Overriding): Skip reporting error
on Ada 2022 only subprograms that require overriding if we are
not in Ada 2022 mode.
(Derive_Subprogram): Inherit Is_Ada_2022_Only.
* sem_ch6.adb (Check_Overriding_Indicator): Inherit
Is_Ada_2022_Only.
(New_Overloaded_Entity): Inherit Is_Ada_2022_Only.
* sem_ch7.adb (Declare_Inherited_Private_Subprograms): Inherit
Is_Ada_2022_Only.
(Preserve_Full_Attributes): Inherit Is_Ada_2022_Only.
* sem_disp.adb (Find_Hidden_Overridden_Primitive): Inherit
Is_Ada_2022_Only.
(Override_Dispatching_Operation): Inherit Is_Ada_2022_Only.
* sem_prag.adb (Analyze_Pragma): Allow form with argument for
Ada 2022.
* sem_type.adb: (Disambiguate): Deal with Is_Ada_2022_Only
* lib-xref.adb (Generate_Reference): Error on static and
dispatching calls to Ada 2022 subprograms that require
overriding if we are not in Ada 2022 mode; warn on other
references to Ada 2022 entities when not in Ada 2022 mode.
* sem_ch13.adb (Inherit_Aspects_At_Freeze_Point): Inherit
Ada_2020_Only.
* libgnat/a-cdlili.ads (Empty): Adding pragma Ada_2022.
* libgnat/a-cidlli.ads (Empty): Adding pragma Ada_2022.
* libgnat/a-ciorma.ads (Empty): Adding pragma Ada_2022.
* libgnat/a-cobove.ads (Empty): Adding pragma Ada_2022.
* libgnat/a-coorma.ads (Empty): Adding pragma Ada_2022.
(New_Vector): Adding pragma Ada_2022.
(Insert_Vector): Adding pragma Ada_2022.
(Prepend_Vector): Adding pragma Ada_2022.
(Append_Vector): Adding pragma Ada_2022.

3 years agoAdd statistics counting to PHI-OPT
Andrew Pinski [Thu, 10 Jun 2021 09:22:12 +0000 (02:22 -0700)]
Add statistics counting to PHI-OPT

This should have been done before I started to work on connecting
PHI-OPT to match-and-simplify to see quickly if we miss anything
but it is better late than never.
Anyways there was no statistics counting in PHI-OPT before so adding
it is the right thing to do.

OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.

gcc/ChangeLog:

* tree-ssa-phiopt.c (replace_phi_edge_with_variable):
Add counting of how many times it is done.
(factor_out_conditional_conversion): Likewise.
(match_simplify_replacement): Likewise.
(value_replacement): Likewise.
(spaceship_replacement): Likewise.
(cond_store_replacement): Likewise.
(cond_if_else_store_replacement_1): Likewise.
(hoist_adjacent_loads): Likewise.

3 years agoDisallow pointer and offset types on some gimple
Andrew Pinski [Sun, 6 Jun 2021 02:03:06 +0000 (19:03 -0700)]
Disallow pointer and offset types on some gimple

While debugging PR 100925, I found that the gimple verifiers
don't reject NEGATE on pointer or offset type.
This patch adds the check on some unary and binary gimple which
should not have operated on pointer/offset types.

OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.

Thanks,
Andrew Pinski

gcc/ChangeLog:

* tree-cfg.c (verify_gimple_assign_unary): Reject point and offset
types on NEGATE_EXPR, ABS_EXPR, BIT_NOT_EXPR, PAREN_EXPR and CNONJ_EXPR.
(verify_gimple_assign_binary): Reject point and offset types on
MULT_EXPR, MULT_HIGHPART_EXPR, TRUNC_DIV_EXPR, CEIL_DIV_EXPR,
FLOOR_DIV_EXPR, ROUND_DIV_EXPR, TRUNC_MOD_EXPR, CEIL_MOD_EXPR,
FLOOR_MOD_EXPR, ROUND_MOD_EXPR, RDIV_EXPR, and EXACT_DIV_EXPR.

3 years agolibstdc++: Move ranges algos used by <ranges> into ranges_util.h
Patrick Palka [Fri, 18 Jun 2021 02:44:41 +0000 (22:44 -0400)]
libstdc++: Move ranges algos used by <ranges> into ranges_util.h

The <ranges> header defines simplified copies of some ranges algorithms
in order to avoid including the entirety of ranges_algo.h.  A subsequent
patch is going to want to use ranges::search in <ranges> as well, and
that algorithm is more complicated compared to the other copied ones.

So rather than additionally copying ranges::search into <ranges>, this
patch splits out all the ranges algos used by <ranges> (including
ranges::search) from ranges_algo.h to ranges_util.h, and deletes the
simplified copies in <ranges>.  This seems like the best place to
put these algorithms, as ranges_util.h is currently included only from
<ranges> and ranges_algo.h.

libstdc++-v3/ChangeLog:

* include/bits/ranges_algo.h (__find_fn, find, __find_if_fn)
(find_if, __find_if_not_fn, find_if_not, _in_in_result)
(__mismatch_fn, mismatch, __search_fn, search): Move to ...
* include/bits/ranges_util.h: ... here.
* include/std/ranges (__detail::find, __detail::find_if)
(__detail::find_if_not, __detail::mismatch): Remove.
(filter_view): Use ranges::find_if instead.
(drop_while_view): Use ranges::find_if_not instead.
(split_view): Use ranges::find and ranges::mismatch instead.

3 years agolibstdc++: Implement P2325 changes to default-constructibility of views
Patrick Palka [Fri, 18 Jun 2021 02:29:03 +0000 (22:29 -0400)]
libstdc++: Implement P2325 changes to default-constructibility of views

This implements the wording changes of P2325R3 "Views should not be
required to be default constructible".  Changes are relatively
straightforward, besides perhaps those to __box (which now stands
for copyable-box instead of semiregular-box) and __non_propagating_cache.

For __box, this patch implements the recommended practice to also avoid
std::optional when the boxed type is nothrow_move/copy_constructible.

For __non_propagating_cache, now that it's used by split_view::_M_current,
we need to add assignment from a value of the underlying type to the
subset of the std::optional API implemented for the cache (needed by
split_view::begin()).  Hence the new __non_propagating_cache::operator=
overload.

In passing, this fixes the undesirable list-init in the constructors of
the partial specialization of __box as reported in PR100475 comment #7.

libstdc++-v3/ChangeLog:

* include/bits/iterator_concepts.h (weakly_incrementable): Remove
default_initializable requirement.
* include/bits/ranges_base.h (ranges::view): Likewise.
* include/bits/ranges_util.h (subrange): Constrain the default
ctor.
* include/bits/stl_iterator.h (back_insert_iterator): Remove the
default ctor.
(front_insert_iterator): Likewise.
(insert_iterator): Likewise.  Remove NSDMIs.
(common_iterator): Constrain the default ctor.
(counted_iterator): Likewise.
* include/bits/stream_iterator.h (ostream_iterator): Remove the
default ctor.
* include/std/ranges (__detail::__box::operator=): Handle
self-assignment in the primary template.
(__detail::__box): In the partial specialization: adjust
constraints as per P2325.  Add specialized operator= for the
case when the wrapped type is not copyable.  Constrain the
default ctor.  Avoid list-initialization.
(single_view): Constraint the default ctor.
(iota_view): Relax semiregular constraint to copyable.
Constrain the default ctor.
(iota_view::_Iterator): Constraint the default ctor.
(basic_istream_view): Remove the default ctor.  Remove NSDMIs.
Remove redundant checks for empty _M_stream.
(basic_istream_view::_Iterator): Likewise.
(ref_view): Remove the default ctor.  Remove NSDMIs.
(ref_view::_Iterator): Constrain the default ctor.
(__detail::__non_propagating_cache::operator=): Define overload
for assigning from a value of the underlying type.
(filter_view): Likewise.
(filter_view::_Iterator): Likewise.
(transform_view): Likewise.
(transform_view::_Iterator): Likewise.
(take_view): Likewise.
(take_view::_Iterator): Likewise.
(take_while_view): Likewise.
(take_while_view::_Iterator): Likewise.
(drop_while_view): Likewise.
(drop_while_view::_Iterator): Likewise.
(join_view): Likewise.
(split_view::_OuterIter::__current): Adjust after changing the
type of _M_current.
(split_view::_M_current): Wrap it in a __non_propagating_cache.
(split_view::split_view): Constrain the default ctor.
(common_view): Constrain the default ctor.
(reverse_view): Likewise.
(elements_view): Likewise.
* include/std/span (enable_view<span<_ElementType, _Extent>>):
Define this partial specialization to true unconditionally.
* include/std/version (__cpp_lib_ranges): Adjust value.
* testsuite/24_iterators/back_insert_iterator/constexpr.cc:
Don't attempt to default construct a back_insert_iterator.
* testsuite/24_iterators/front_insert_iterator/constexpr.cc:
Don't attempt to default construct a front_insert_iterator.
* testsuite/24_iterators/insert_iterator/constexpr.cc:
Don't attempt to default construct an insert_iterator.
* testsuite/24_iterators/ostream_iterator/requirements/constexpr.cc:
Remove this test for default constructibility of ostream_iterator.
* testsuite/std/ranges/97600.cc: Don't attempt to default
construct a basic_istream_view.
* testsuite/std/ranges/adaptors/detail/semiregular_box.cc:
Rename to ...
* testsuite/std/ranges/adaptors/detail/copyable_box.cc: ... this.
(test02): Adjust now that __box is copyable-box not
semiregular-box.
(test03): New test.
* testsuite/std/ranges/p2325.cc: New test.
* testsuite/std/ranges/single_view.cc (test06): New test.
* testsuite/std/ranges/view.cc: Adjust now that view doesn't
require default_initializable.

3 years agoAdd IEEE 128-bit min/max support on PowerPC.
Michael Meissner [Fri, 18 Jun 2021 02:05:16 +0000 (22:05 -0400)]
Add IEEE 128-bit min/max support on PowerPC.

This patch adds the support for the IEEE 128-bit floating point C minimum and
maximum instructions.  The next patch will add the support for using the
compare and set mask instruction to implement conditional moves.

This patch does not try to re-use the code used for SF/DF min/max
support.  It defines a separate insn for the IEEE 128-bit support.  It
uses the code iterator <minmax> to simplify adding both operations.

GCC will not convert ternary operations into using min/max instructions
provided in this patch unless the user uses -Ofast.  The next patch that adds
conditional move instructions will enable the ternary conversion in many cases.

gcc/
2021-06-17  Michael Meissner  <meissner@linux.ibm.com>

* config/rs6000/rs6000.c (rs6000_emit_minmax): Add support for ISA
3.1 IEEE 128-bit floating point xsmaxcqp/xsmincqp instructions.
* config/rs6000/rs6000.md (s<minmax><mode>3, IEEE128 iterator):
New insns.

gcc/testsuite/
2021-06-17  Michael Meissner  <meissner@linux.ibm.com>

* gcc.target/powerpc/float128-minmax-2.c: New test.

3 years agoDaily bump.
GCC Administrator [Fri, 18 Jun 2021 00:16:58 +0000 (00:16 +0000)]
Daily bump.

3 years agolibstdc++: Simplify constexpr checks in std::char_traits [PR 91488]
Jonathan Wakely [Thu, 17 Jun 2021 13:11:22 +0000 (14:11 +0100)]
libstdc++: Simplify constexpr checks in std::char_traits [PR 91488]

This removes the helper functions added by r8-1294 to detect whether the
char_traits member functions can be evaluated at compile time. Instead,
we can just use __builtin_constant_evaluated directly, which is well
supported by non-GCC compilers by now.

As a result, there is a chance that those members will no longer be
usable in constant expressions when using old versions of non-GCC
compilers. Make the relevant feature test macros depend on the
availability of __builtin_constant_evaluated, so they are defined only
when the feature is actualyl available.

The new testcase from the PR is added to the libitm testsuite, because
that's where we can be sure it's OK to use the -fgnu-tm option.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/91488

libstdc++-v3/ChangeLog:

* include/bits/basic_string.h (__cpp_lib_constexpr_string): Only
define when is_constant_evaluated is available.
* include/bits/char_traits.h (__cpp_lib_constexpr_char_traits):
Likewise.
(__constant_string_p, __constant_array_p): Remove.
(char_traits): Use is_constant_evaluated directly.
* include/std/version (__cpp_lib_constexpr_char_traits)
(__cpp_lib_constexpr_string): Only define when
is_constant_evaluated is available.

libitm/ChangeLog:

* testsuite/libitm.c++/libstdc++-pr91488.C: New test.

3 years agoc++: deleted after first declaration [PR101106]
Jason Merrill [Thu, 17 Jun 2021 19:31:15 +0000 (15:31 -0400)]
c++: deleted after first declaration [PR101106]

An explicitly deleted function must be deleted on its first declaration.  We
were diagnosing this error only with -Wpedantic, but always giving the
"previous declaration" note.  This patch removes the -Wpedantic dependency
and also makes the note depend on the previous diagnostic.

PR c++/101106

gcc/cp/ChangeLog:

* decl.c (duplicate_decls): Make 'deleted after first declaration'
pedwarn on by default.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/deleted15.C: New test.

3 years agomklog: add subject line skeleton
Jason Merrill [Wed, 16 Jun 2021 20:46:38 +0000 (16:46 -0400)]
mklog: add subject line skeleton

In the recent gcc-commit-mklog thread on gcc@ it occurred to me that the
command could also fill in part of the subject line.  If the first PR is
foo/1234, and the commit does not yet have a subject line, this will add

foo: [PR1234]

contrib/ChangeLog:

* mklog.py: Add an initial component: [PRnnnnn] line when
we have a PR.

3 years agoAdd needed earlyclobber to fusion patterns
Aaron Sawdey [Wed, 16 Jun 2021 15:58:08 +0000 (10:58 -0500)]
Add needed earlyclobber to fusion patterns

The add-logical and add-add fusion patterns all have constraint
alternatives "=0,1,&r,r" for the output (3). The inputs 0 and 1
are used in the first fusion instruction and then either may be
reused as a temp for the output of the first insn which is
input to the second. However, if input 2 is the same as 0 or 1,
it gets clobbered unexpectedly. So the first 2 alts need to be
"=&0,&1,&r,r" instead to indicate that in alts 0 and 1, the
register used for 3 is earlyclobber, hence can't be the same as
input 2.

This was actually encountered in the backport of the add-logical
fusion patch to gcc-11. Some code in go hit this case:

   <runtime.fillAligned+520>:        andc r30,r30,r9
r30 now (~(x|((x&c)+c)))&(~c) --> this is new x
   <runtime.fillAligned+524>:        b <runtime.fillAligned+288>
   <runtime.fillAligned+288>:        addi r31,r31,-1
r31 now m-1
   <runtime.fillAligned+292>:        srd r31,r30,r31
r31 now x>>(m-1)
   <runtime.fillAligned+296>:        subf r30,r31,r30
r30 now x-(x>>(m-1))
   <runtime.fillAligned+300>:        or r30,r30,r30   # mdoom
nop
   <runtime.fillAligned+304>:        not     r3,r30
r3 now ~(x-(x>>(m-1))) -- WHOOPS

The or r30,r30,r30 was meant to be or-ing in the earlier value
of r30 which was overwritten by the output of the subf.

gcc/ChangeLog

* config/rs6000/genfusion.pl (gen_logical_addsubf): Add
earlyclobber to alts 0/1.
(gen_addadd): Add earlyclobber to alts 0/1.
* config/rs6000/fusion.md: Regenerate file.

3 years agofix get-loop_hot_path with gcc 4.8.5
Trevor Saunders [Thu, 17 Jun 2021 15:10:15 +0000 (11:10 -0400)]
fix get-loop_hot_path with gcc 4.8.5

gcc/ChangeLog:

* cfgloopanal.c (get_loop_hot_path): Make path an auto_vec.

3 years ago[Ada] Crash on overriding of an abstract primitive on an incomplete type
Arnaud Charlet [Mon, 8 Mar 2021 12:11:32 +0000 (07:11 -0500)]
[Ada] Crash on overriding of an abstract primitive on an incomplete type

gcc/ada/

* sem_ch3.adb (Check_Ops_From_Incomplete_Type): Protect against
no Primitive_Operations.

3 years ago[Ada] Fix operations on Unbounded_String...
Vadim Godunko [Wed, 10 Mar 2021 11:27:20 +0000 (14:27 +0300)]
[Ada] Fix operations on Unbounded_String...

gcc/ada/

* libgnat/a-strunb__shared.ads (Allocate): Additional parameter
to provide additional amount of space to be allocated.
* libgnat/a-strunb__shared.adb (Aligned_Max_Length): Limit
length to Natural'Last when requested length is larger than it.
(Allocate): Merge two slightly different implementations into
one.

3 years ago[Ada] Implementation of Inox feature of fixed lower bounds on array types/subtypes
Gary Dismukes [Fri, 5 Mar 2021 07:20:09 +0000 (02:20 -0500)]
[Ada] Implementation of Inox feature of fixed lower bounds on array types/subtypes

gcc/ada/

* checks.adb (Discrete_Range_Cond): For an index subtype that
has a fixed lower bound, require that the range's lower bound
match that of the subtype.
(Selected_Range_Checks): Warn about the case where a static
lower bound does not equal an index subtype's fixed lower bound.
* einfo.ads (Is_Fixed_Lower_Bound_Array_Subtype,
Is_Fixed_Lower_Bound_Index_Subtype): Document new entity flag.
* exp_ch4.adb (Expand_N_Type_Conversion): If the operand is of
an unconstrained array subtype with fixed lower bound, then
Expand_Sliding_Conversion is applied to the operand.
* exp_ch6.adb (Expand_Simple_Function_Return): If the result
subtype is an unconstrained array subtype with fixed lower
bound, then Expand_Sliding_Conversion is applied to the return
object.
* exp_util.ads (Expand_Sliding_Conversion): New procedure for
applying a sliding subtype conversion to an array object of a
fixed-lower-bound subtype when needed.
* exp_util.adb: Add with_clause for Freeze.
(Expand_Sliding_Conversion): New procedure for applying a
sliding subtype conversion to an array object of a
fixed-lower-bound subtype when needed.  It traverses the indexes
of the unconstrained array type/subtype to create a target
constrained subtype and rewrites the array object to be a
conversion to that subtype, when there's at least one index
whose lower bound does not statically match the fixed-lower
bound of the target subtype.
* gen_il-fields.ads (type Opt_Field_Enum): Add literals
Is_Fixed_Lower_Bound_Array_Subtype and
Is_Fixed_Lower_Bound_Index_Subtype for new flags on type
entities.
* gen_il-gen-gen_entities.adb: Add calls to
Create_Semantic_Field for the new fixed-lower-bound flags on
type entities.
* par-ch3.adb (P_Array_Type_Definition): Add handling for
parsing of fixed-lower-bound index ranges in unconstrained array
types. Report an error if such an index is encountered and GNAT
language extensions are not enabled.
(P_Index_Subtype_Def_With_Fixed_Lower_Bound): Support procedure
for parsing unconstrained index ranges.
(P_Index_Or_Discriminant_Constraint): Add handling for parsing
of index constraints that specify ranges with fixed lower
bounds. Report an error if such an index is encountered and GNAT
language extensions are not enabled.
* sem_ch3.adb (Analyze_Object_Declaration): If the object's
nominal subtype is an array subtype with fixed lower bound, then
Expand_Sliding_Conversion is applied to the object.
(Array_Type_Declaration): Mark the array type and the subtypes
of any indexes that specify a fixed lower bound as being
fixed-lower-bound subtypes, and set the High_bound of the range
of such an index to the upper bound of the named subtype.
(Constrain_Array): For an array subtype with one or more index
ranges specifying a fixed lower bound, set Is_Constrained to
False and set the array subtype's
Is_Fixed_Lower_Bound_Array_Subtype flag to True.
(Constrain_Index): Mark the subtypes of an index that specifies
a fixed lower bound as being a fixed-lower-bound index subtype,
and set the High_bound of the range of such an index to the
upper bound of the base type of the array type's corresponding
index.
* sem_res.adb (Resolve_Actuals): If a formal is of an
unconstrained array subtype with fixed lower bound, then
Expand_Sliding_Conversion is applied to the actual.
* sem_util.adb (Build_Actual_Subtype): If the actual subtype
corresponds to an unconstrained array subtype having any indexes
with fixed lower bounds, then set the lower bounds of any such
indexes of the actual subtype to the appropriate fixed lower
bound of the formal subtype (rather than taking it from the
formal itself).
* sprint.adb (Sprint_Node_Actual, case N_Range): If a range's
Etype has a fixed lower bound, then print "<>" rather than the
High_Bound of the range.

3 years ago[Ada] Warn on 'in out' param containing access in predefined private type
Bob Duff [Thu, 11 Mar 2021 22:20:41 +0000 (17:20 -0500)]
[Ada] Warn on 'in out' param containing access in predefined private type

gcc/ada/

* sem_util.adb, sem_util.ads (Has_Access_Values): New formal
Include_Internal to indicate whether internal types should be
included.
* sem_warn.adb (Check_References): Change E_Out_Parameter to
Formal_Kind, to match the comment about Spec_Entity.  Pass
Include_Internal => False to Has_Access_Values, so that we warn
on types with access values that happen to be in internal types,
such as Unbounded_String.
* sem_attr.adb (Attribute_Has_Access_Values): Pass
Include_Internal => True to Has_Access_Values, to preserve
existing behavior.
* libgnat/g-rewdat.adb (Do_Output): Change B from 'in out' to
'in', to avoid warning enabled by the change to sem_warn.adb.
* libgnat/s-objrea.adb (Check_Read_Offset): Change S from 'in
out' to 'in', to avoid warning enabled by the change to
sem_warn.adb.

3 years ago[Ada] Casing on composite values
Steve Baird [Thu, 25 Feb 2021 23:38:05 +0000 (15:38 -0800)]
[Ada] Casing on composite values

gcc/ada/

* exp_ch5.adb
(Expand_N_Case_Statement.Expand_General_Case_Statement): New
subprogram.
(Expand_N_Case_Statement): If extensions are allowed and the
case selector is not of a discrete type, then call
Expand_General_Case_Statement to generate expansion instead of
flagging the non-discrete selector as an error.
* sem_case.ads (Is_Case_Choice_Pattern): New Boolean-valued
function for testing whether a given expression occurs as part
of a case choice pattern.
* sem_case.adb (Composite_Case_Ops): New package providing
support routines for the new form of case statements. This
includes a nested package, Composite_Case_Ops.Value_Sets, which
encapsulates the "representative values" implementation of
composite value sets.
(Check_Choices.Check_Case_Pattern_Choices): New procedure for
semantic checking of non-discrete case choices. This includes
the checks pertaining to coverage and overlapping.
(Check_Choices.Check_Composite_Case_Selector): New procedure for
semantic checking of non-discrete case selectors.
(Check_Choices): If extensions are allowed then a non-discrete
selector type no longer implies that an error must have been
flagged earlier.  Instead of simply returning, call
Check_Composite_Case_Selector and Check_Case_Pattern_Choices.
(Is_Case_Choice_Pattern): Body of new function declared in
sem_case.ads .
* sem_ch5.adb (Analyze_Case_Statement): If extensions are
allowed, then we can't use RM 5.4's "The selecting_expression is
expected to be of any discrete type" name resolution rule.
Handle the case where the type of the selecting expression is
not discrete, as well as the new ambiguous-name-resolution error
cases made possible by this change.
* sem_res.adb (Resolve_Entity_Name): It is ok to treat the name
of a type or subtype as an expression if it is part of a case
choice pattern, as in "(Field1 => Positive, Field2 => <>)".
* exp_aggr.adb (Expand_Record_Aggregate): Do not expand case
choice aggregates.
* gen_il-fields.ads: Define two new node attributes,
Binding_Chars and Multidefined_Bindings.
* gen_il-gen-gen_nodes.adb: The new Multidefined_Bindings
attribute is Boolean-valued and may be set on
N_Case_Statement_Alternative nodes. The new Binding_Chars
attribute is Name_Id-valued and may be set on
N_Component_Association nodes.
* par-ch4.adb (P_Record_Or_Array_Component_Association): When
parsing a component association, check for both new syntax forms
used to specify a bound value in a case-choice aggregate.  In
the case of a box value, an identifier may occur within the box,
as in "Foo => <Abc>" instead of "Foo => <>". In the more general
case, an expression (or a box) may be followed by "is
<identifier>", as in
"Foo => Bar is Abc" instead of just "Foo => Bar".
* sem_aggr.adb (Resolve_Record_Aggregate): Do not transform box
component values in a case-choice aggregate.
* sinfo.ads: Provide comments for the new attributes added in
gen_il-fields.ads.
* doc/gnat_rm/implementation_defined_pragmas.rst: Describe this
new feature in documentation for pragma Extensions_Allowed.
* gnat_rm.texi: Regenerate.

3 years ago[Ada] Missing finalization on nested expression with action
Arnaud Charlet [Thu, 11 Mar 2021 16:00:04 +0000 (11:00 -0500)]
[Ada] Missing finalization on nested expression with action

gcc/ada/

* exp_ch4.adb (Expand_N_Expression_With_Actions.Process_Action):
Do not abandon processing on a nested N_Expression_With_Actions
or N_Loop_Statement, otherwise we may miss some transient
declarations.

3 years ago[Ada] Crash on a nested aggregate containing controlled objects
Arnaud Charlet [Fri, 5 Mar 2021 15:11:57 +0000 (10:11 -0500)]
[Ada] Crash on a nested aggregate containing controlled objects

gcc/ada/

* exp_util.adb (Find_Hook_Context): Do not stop on an aggregate
node.

3 years ago[Ada] Fix detection of valid renamings for overlapping checks
Piotr Trojanek [Wed, 10 Mar 2021 22:40:13 +0000 (23:40 +0100)]
[Ada] Fix detection of valid renamings for overlapping checks

gcc/ada/

* sem_util.adb (Is_Valid_Renaming): Check not only indexed
components, but slices too.

3 years ago[Ada] Don't check No_Wide_Characters restriction for illegal types
Piotr Trojanek [Wed, 10 Mar 2021 17:06:21 +0000 (18:06 +0100)]
[Ada] Don't check No_Wide_Characters restriction for illegal types

gcc/ada/

* sem_ch3.adb (Analyze_Private_Extension_Declaration): Check
No_Wide_Characters restriction after rejecting illegal parent
types.
(Derived_Type_Declaration): Likewise.
(Find_Type_Of_Subtype_Indic): Remove check for
No_Wide_Characters restriction, which was done too early.

3 years ago[Ada] Remove dubious wrapper of a recursive function
Piotr Trojanek [Wed, 10 Mar 2021 22:20:58 +0000 (23:20 +0100)]
[Ada] Remove dubious wrapper of a recursive function

gcc/ada/

* sem_util.adb (Is_Valid_Renaming): Body moved from its nested
routine.

3 years ago[Ada] Error in instance on incomplete actual passed to formal incomplete type
Gary Dismukes [Wed, 10 Mar 2021 23:35:58 +0000 (18:35 -0500)]
[Ada] Error in instance on incomplete actual passed to formal incomplete type

gcc/ada/

* sem_ch12.adb (Instantiate_Type): If the actual type for an
incomplete formal type is also incomplete, but has a Full_View,
use the Full_View of the actual type rather than the incomplete
view.

3 years ago[Ada] Fix punctuation in documentation of warnings for aliasing actuals
Piotr Trojanek [Wed, 10 Mar 2021 13:44:11 +0000 (14:44 +0100)]
[Ada] Fix punctuation in documentation of warnings for aliasing actuals

gcc/ada/

* doc/gnat_ugn/building_executable_programs_with_gnat.rst
(-gnatw.I): Remove double period at the end of sentence.
* gnat_ugn.texi: Regenerate.

3 years ago[Ada] Fix detection of slices that denote the same object
Piotr Trojanek [Tue, 9 Mar 2021 21:22:19 +0000 (22:22 +0100)]
[Ada] Fix detection of slices that denote the same object

gcc/ada/

* sem_util.adb (Denotes_Same_Object): Call Get_Index_Bounds with
the range of a slice object, not its type.

3 years ago[Ada] Check all pairs of actuals for overlapping
Piotr Trojanek [Wed, 10 Mar 2021 08:26:18 +0000 (09:26 +0100)]
[Ada] Check all pairs of actuals for overlapping

gcc/ada/

* sem_warn.adb (Warn_On_Overlapping_Actuals): Fix style;
refactor repeated calls to Nkind; remove early RETURN.

3 years ago[Ada] Fix handling of generic types in check for overlapping actuals
Piotr Trojanek [Wed, 10 Mar 2021 09:38:57 +0000 (10:38 +0100)]
[Ada] Fix handling of generic types in check for overlapping actuals

gcc/ada/

* sem_warn.adb (Warn_On_Overlapping_Actuals): Ignore formal of
generic types, but keep examining other parameters.

3 years ago[Ada] Remove dead code for overlapping actuals and prefix notation
Piotr Trojanek [Wed, 10 Mar 2021 08:45:11 +0000 (09:45 +0100)]
[Ada] Remove dead code for overlapping actuals and prefix notation

gcc/ada/

* sem_warn.adb (Warn_On_Overlapping_Actuals): Remove dead code.

3 years ago[Ada] Cleanup redundant conditions in checks for overlapping actuals
Piotr Trojanek [Tue, 9 Mar 2021 21:35:22 +0000 (22:35 +0100)]
[Ada] Cleanup redundant conditions in checks for overlapping actuals

gcc/ada/

* sem_warn.adb (Warn_On_Overlapping_Actuals): Remove repeated
code.

3 years ago[Ada] Use source casing in messages for aliasing checks
Piotr Trojanek [Tue, 9 Mar 2021 16:36:15 +0000 (17:36 +0100)]
[Ada] Use source casing in messages for aliasing checks

gcc/ada/

* checks.adb (Overlap_Check): Replace Set_Casing with
Adjust_Name_Case and adapt surrounding code as needed.

3 years ago[Ada] Move runtime units for Put_Image attribute to libgnarl
Arnaud Charlet [Sun, 7 Mar 2021 17:35:43 +0000 (12:35 -0500)]
[Ada] Move runtime units for Put_Image attribute to libgnarl

gcc/ada/

* libgnat/s-putaim.ads, libgnat/s-putaim.adb: Move...
* libgnarl/s-putaim.ads, libgnarl/s-putaim.adb: ... here.

3 years ago[Ada] Provide new function Uintp.UI_To_Unsigned_64
Arnaud Charlet [Mon, 8 Mar 2021 12:13:43 +0000 (07:13 -0500)]
[Ada] Provide new function Uintp.UI_To_Unsigned_64

gcc/ada/

* uintp.ads, uintp.adb (UI_To_Unsigned_64): New.

3 years ago[Ada] Clarify error for unsupported ELIMINATED overflow mode
Piotr Trojanek [Mon, 8 Mar 2021 10:30:17 +0000 (11:30 +0100)]
[Ada] Clarify error for unsupported ELIMINATED overflow mode

gcc/ada/

* sem_prag.adb (Get_Overflow_Mode): Reword error message.
* switch-c.adb (Get_Overflow_Mode): Likewise.

3 years ago[Ada] Look at Others_Discrete_Choices for N_Others_Choice
Richard Kenner [Fri, 5 Mar 2021 22:28:52 +0000 (17:28 -0500)]
[Ada] Look at Others_Discrete_Choices for N_Others_Choice

gcc/ada/

* exp_util.adb (Expand_Static_Predicates_In_Choices): Handle
Others_Discrete_Choices in N_Others_Choice.

3 years ago[Ada] Minor comment cleanup
Arnaud Charlet [Fri, 5 Mar 2021 15:28:58 +0000 (10:28 -0500)]
[Ada] Minor comment cleanup

gcc/ada/

* atree.adb: Remove redundant comment with spec.
* sem_warn.adb: Fix typo in comment.

3 years ago[Ada] Do not systematically suppress checks on atree.adb
Arnaud Charlet [Sun, 28 Feb 2021 13:24:59 +0000 (08:24 -0500)]
[Ada] Do not systematically suppress checks on atree.adb

gcc/ada/

* atree.adb: Do not suppress checks.

3 years ago[Ada] Removal of technical debt
Justin Squirek [Sun, 28 Feb 2021 02:57:32 +0000 (21:57 -0500)]
[Ada] Removal of technical debt

gcc/ada/

* exp_ch3.adb (Check_Missing_Others): Add comment.
(Build_Initialization_Call): Remove inaccurate accessibility
comment.
* sem_ch12.adb (Analyze_Generic_Subprogram_Declaration): Remove
test for Ada2012.
(Analyze_Package_Instantiation): Remove speculative comment.
(Inline_Instance_Body): Add comments for loops.
(Build_Subprogram_Renaming): Remove comment about fix being
partial and "ugly."
(Instantiate_Subprogram_Body): Remove comment referencing DEC
related internal issue.
(Subtypes_Match): Add comment and simplify anonymous access
test.
(Is_Global): Add test for when E is an expanded name, and
calculate the scope accordingly.
* sem_ch6.adb (Analyze_Function_Return): Update comment
regarding accessibility, and add check for
Warn_On_Ada_2012_Compatibility.
(Mask_Type_Refs): Add comments.
(Analyze_Subprogram_Declaration): Remove mysterious suppression
of elaboration checks.
* sem_ch7.adb (Preserve_Full_Attributes): Preserve Is_Atomic
value.
* sem_ch8.adb (Most_Descendant_Use_Clause): Remove comment.
(Note_Redundant_Use): Fix calls to Find_First_Use to be
Find_Most_Prev.
(Get_Object_Name): Modify error message to be more descriptive.
(Known_But_Visible): Remove mysterious special case for
GNAT_Mode.
(Find_First_Use): Removed.
(Find_Most_Prev): Renamed from Find_First_Use.
* sem_prag.adb (Check_Static_Constraint): Add comments to
routine.

3 years ago[Ada] Display Entity in debugging printouts
Bob Duff [Thu, 4 Mar 2021 21:27:05 +0000 (16:27 -0500)]
[Ada] Display Entity in debugging printouts

gcc/ada/

* treepr.adb (Print_Node): Display the Entity or Associated_Node
fields if appropriate.
* sinfo-utils.ads (F_Associated_Node, F_Entity): Remove. These
are no longer needed.

3 years ago[Ada] Apply aliasing checks only to names and not to objects as actuals
Piotr Trojanek [Mon, 1 Mar 2021 15:23:38 +0000 (16:23 +0100)]
[Ada] Apply aliasing checks only to names and not to objects as actuals

gcc/ada/

* checks.adb (Apply_Parameter_Aliasing_Checks): Replace calls to
Is_Object_Reference with calls to Is_Name_Reference; remove
asymmetric condition that only detected an aggregate as the
first actual (aggregate objects were just a special case of an
object reference that was not a name).

3 years ago[Ada] Fix varsize node name conflict
Bob Duff [Wed, 3 Mar 2021 21:12:54 +0000 (16:12 -0500)]
[Ada] Fix varsize node name conflict

gcc/ada/

* gen_il-gen.adb, gen_il-internals.ads: Generate field
enumeration literals with "F_" prefix.  Update all generated
references accordingly.
* atree.adb, einfo-utils.adb, sem_ch3.adb, sem_ch5.adb,
sem_ch6.adb, sem_ch8.adb, sinfo-cn.adb, sinfo-utils.adb,
sinfo-utils.ads, treepr.adb: Add "F_" prefix to all uses of the
field enumeration literals.

3 years ago[Ada] AI12-0411 Add "bool" to Interfaces.C
Arnaud Charlet [Wed, 3 Mar 2021 15:14:43 +0000 (10:14 -0500)]
[Ada] AI12-0411 Add "bool" to Interfaces.C

gcc/ada/

* libgnat/i-c.ads, libgnat/i-cexten.ads,
libgnat/i-cexten__128.ads: bool renamed C_bool.

3 years ago[Ada] Reject allocators in contexts restricted by SPARK
Piotr Trojanek [Wed, 3 Mar 2021 22:18:01 +0000 (23:18 +0100)]
[Ada] Reject allocators in contexts restricted by SPARK

gcc/ada/

* sem_ch4.adb (Analyze_Allocator): Reject allocators in
restricted contexts.

3 years agoFix spacing and typos in comments.
Andrew MacLeod [Thu, 17 Jun 2021 13:07:19 +0000 (09:07 -0400)]
Fix spacing and typos in comments.

* gimple-range-cache.cc: Comment cleanups.
* gimple-range-gori.cc: Comment cleanups.
* gimple-range.cc: Comment/spacing cleanups
* value-range.h: Comment cleanups.

3 years agolibstdc++: Non-triv-copyable extra args aren't simple [PR100940]
Patrick Palka [Thu, 17 Jun 2021 13:46:07 +0000 (09:46 -0400)]
libstdc++: Non-triv-copyable extra args aren't simple [PR100940]

This force-enables perfect forwarding call wrapper semantics whenever
the extra arguments of a partially applied range adaptor aren't all
trivially copyable, so as to avoid incurring unnecessary copies of
potentially expensive-to-copy objects (such as std::function objects)
when invoking the adaptor.

PR libstdc++/100940

libstdc++-v3/ChangeLog:

* include/std/ranges (__adaptor::_Partial): For the "simple"
forwarding partial specializations, also require that
the extra arguments are trivially copyable.
* testsuite/std/ranges/adaptors/100577.cc (test04): New test.

3 years agolibstdc++: Refine range adaptors' "simple extra args" mechanism [PR100940]
Patrick Palka [Thu, 17 Jun 2021 13:46:04 +0000 (09:46 -0400)]
libstdc++: Refine range adaptors' "simple extra args" mechanism [PR100940]

The _S_has_simple_extra_args mechanism is used to simplify forwarding
of range adaptor's extra arguments when perfect forwarding call wrapper
semantics isn't required for correctness, on a per-adaptor basis.
Both views::take and views::drop are flagged as such, but it turns out
perfect forwarding semantics are needed for these adaptors in some
contrived cases, e.g. when their extra argument is a move-only class
that's implicitly convertible to an integral type.

To fix this, we could just clear the flag for views::take/drop as with
views::split, but that'd come at the cost of acceptable diagnostics
for ill-formed uses of these adaptors (see PR100577).

This patch instead allows adaptors to parameterize their
_S_has_simple_extra_args flag according the types of the captured extra
arguments, so that we could conditionally disable perfect forwarding
semantics only when the types of the extra arguments permit it.  We
then use this finer-grained mechanism to safely disable perfect
forwarding semantics for views::take/drop when the extra argument is
integer-like, rather than incorrectly always disabling it.  Similarly,
for views::split, rather than always enabling perfect forwarding
semantics we now safely disable it when the extra argument is a scalar
or a view, and recover good diagnostics for these common cases.

PR libstdc++/100940

libstdc++-v3/ChangeLog:

* include/std/ranges (__adaptor::_RangeAdaptor): Document the
template form of _S_has_simple_extra_args.
(__adaptor::__adaptor_has_simple_extra_args): Add _Args template
parameter pack.  Try to treat _S_has_simple_extra_args as a
variable template parameterized by _Args.
(__adaptor::_Partial): Pass _Arg/_Args to the constraint
__adaptor_has_simple_extra_args.
(views::_Take::_S_has_simple_extra_args): Templatize according
to the type of the extra argument.
(views::_Drop::_S_has_simple_extra_args): Likewise.
(views::_Split::_S_has_simple_extra_args): Define.
* testsuite/std/ranges/adaptors/100577.cc (test01, test02):
Adjust after changes to _S_has_simple_extra_args mechanism.
(test03): Define.

3 years agolibgomp: Structure element mapping for OpenMP 5.0
Chung-Lin Tang [Thu, 17 Jun 2021 13:33:32 +0000 (21:33 +0800)]
libgomp: Structure element mapping for OpenMP 5.0

This patch implement OpenMP 5.0 requirements of incrementing/decrementing
the reference count of a mapped structure at most once (across all elements)
on a construct.

This is implemented by pulling in libgomp/hashtab.h and using htab_t as a
pointer set. Structure element list siblings also have pointers-to-refcounts
linked together, to naturally achieve uniform increment/decrement without
repeating.

There are still some questions on whether using such a htab_t based set is
faster/slower than using a sorted pointer array based implementation. This
is to be researched on later.

libgomp/ChangeLog:

* hashtab.h (htab_clear): New function with initialization code
factored out from...
(htab_create): ...here, adjust to use htab_clear function.

* libgomp.h (REFCOUNT_SPECIAL): New symbol to denote range of
special refcount values, add comments.
(REFCOUNT_INFINITY): Adjust definition to use REFCOUNT_SPECIAL.
(REFCOUNT_LINK): Likewise.
(REFCOUNT_STRUCTELEM): New special refcount range for structure
element siblings.
(REFCOUNT_STRUCTELEM_P): Macro for testing for structure element
sibling maps.
(REFCOUNT_STRUCTELEM_FLAG_FIRST): Flag to indicate first sibling.
(REFCOUNT_STRUCTELEM_FLAG_LAST):  Flag to indicate last sibling.
(REFCOUNT_STRUCTELEM_FIRST_P): Macro to test _FIRST flag.
(REFCOUNT_STRUCTELEM_LAST_P): Macro to test _LAST flag.
(struct splay_tree_key_s): Add structelem_refcount and
structelem_refcount_ptr fields into a union with dynamic_refcount.
Add comments.
(gomp_map_vars): Delete declaration.
(gomp_map_vars_async): Likewise.
(gomp_unmap_vars): Likewise.
(gomp_unmap_vars_async): Likewise.
(goacc_map_vars): New declaration.
(goacc_unmap_vars): Likewise.

* oacc-mem.c (acc_map_data): Adjust to use goacc_map_vars.
(goacc_enter_datum): Likewise.
(goacc_enter_data_internal): Likewise.
* oacc-parallel.c (GOACC_parallel_keyed): Adjust to use goacc_map_vars
and goacc_unmap_vars.
(GOACC_data_start): Adjust to use goacc_map_vars.
(GOACC_data_end): Adjust to use goacc_unmap_vars.

* target.c (hash_entry_type): New typedef.
(htab_alloc): New function hook for hashtab.h.
(htab_free): Likewise.
(htab_hash): Likewise.
(htab_eq): Likewise.
(hashtab.h): Add file include.
(gomp_increment_refcount): New function.
(gomp_decrement_refcount): Likewise.
(gomp_map_vars_existing): Add refcount_set parameter, adjust to use
gomp_increment_refcount.
(gomp_map_fields_existing): Add refcount_set parameter, adjust calls
to gomp_map_vars_existing.

(gomp_map_vars_internal): Add refcount_set parameter, add local openmp_p
variable to guard OpenMP specific paths, adjust calls to
gomp_map_vars_existing, add structure element sibling splay_tree_key
sequence creation code, adjust Fortran map case to avoid increment
under OpenMP.
(gomp_map_vars): Adjust to static, add refcount_set parameter, manage
local refcount_set if caller passed in NULL, adjust call to
gomp_map_vars_internal.
(gomp_map_vars_async): Adjust and rename into...
(goacc_map_vars): ...this new function, adjust call to
gomp_map_vars_internal.

(gomp_remove_splay_tree_key): New function with code factored out from
gomp_remove_var_internal.
(gomp_remove_var_internal): Add code to handle removing multiple
splay_tree_key sequence for structure elements, adjust code to use
gomp_remove_splay_tree_key for splay-tree key removal.
(gomp_unmap_vars_internal): Add refcount_set parameter, adjust to use
gomp_decrement_refcount.
(gomp_unmap_vars): Adjust to static, add refcount_set parameter, manage
local refcount_set if caller passed in NULL, adjust call to
gomp_unmap_vars_internal.
(gomp_unmap_vars_async): Adjust and rename into...
(goacc_unmap_vars): ...this new function, adjust call to
gomp_unmap_vars_internal.
(GOMP_target): Manage refcount_set and adjust calls to gomp_map_vars and
gomp_unmap_vars.
(GOMP_target_ext): Likewise.
(gomp_target_data_fallback): Adjust call to gomp_map_vars.
(GOMP_target_data): Likewise.
(GOMP_target_data_ext): Likewise.
(GOMP_target_end_data): Adjust call to gomp_unmap_vars.
(gomp_exit_data): Add refcount_set parameter, adjust to use
gomp_decrement_refcount, adjust to queue splay-tree keys for removal
after main loop.
(GOMP_target_enter_exit_data): Manage refcount_set and adjust calls to
gomp_map_vars and gomp_exit_data.
(gomp_target_task_fn): Likewise.

* testsuite/libgomp.c-c++-common/refcount-1.c: New testcase.
* testsuite/libgomp.c-c++-common/struct-elem-1.c: New testcase.
* testsuite/libgomp.c-c++-common/struct-elem-2.c: New testcase.
* testsuite/libgomp.c-c++-common/struct-elem-3.c: New testcase.
* testsuite/libgomp.c-c++-common/struct-elem-4.c: New testcase.
* testsuite/libgomp.c-c++-common/struct-elem-5.c: New testcase.

3 years agoAdd a target calls hook: TARGET_PUSH_ARGUMENT
H.J. Lu [Fri, 21 May 2021 18:56:55 +0000 (11:56 -0700)]
Add a target calls hook: TARGET_PUSH_ARGUMENT

1. Replace PUSH_ARGS with a target calls hook, TARGET_PUSH_ARGUMENT, which
takes an integer argument.  When it returns true, push instructions will
be used to pass outgoing arguments.  If the argument is nonzero, it is
the number of bytes to push and indicates the PUSH instruction usage is
optional so that the backend can decide if PUSH instructions should be
generated.  Otherwise, the argument is zero.
2. Implement x86 target hook which returns false when the number of bytes
to push is no less than 16 (8 for 32-bit targets) if vector load and store
can be used.
3. Remove target PUSH_ARGS definitions which return 0 as it is the same
as the default.
4. Define TARGET_PUSH_ARGUMENT of cr16 and m32c to always return true.

gcc/

PR target/100704
* calls.c (expand_call): Replace PUSH_ARGS with
targetm.calls.push_argument (0).
(emit_library_call_value_1): Likewise.
* defaults.h (PUSH_ARGS): Removed.
(PUSH_ARGS_REVERSED): Replace PUSH_ARGS with
targetm.calls.push_argument (0).
* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
(emit_push_insn): Pass the number bytes to push to
targetm.calls.push_argument and pass 0 if ARGS_ADDR is 0.
* hooks.c (hook_bool_uint_true): New.
* hooks.h (hook_bool_uint_true): Likewise.
* rtlanal.c (nonzero_bits1): Replace PUSH_ARGS with
targetm.calls.push_argument (0).
* target.def (push_argument): Add a targetm.calls hook.
* targhooks.c (default_push_argument): New.
* targhooks.h (default_push_argument): Likewise.
* config/bpf/bpf.h (PUSH_ARGS): Removed.
* config/cr16/cr16.c (TARGET_PUSH_ARGUMENT): New.
* config/cr16/cr16.h (PUSH_ARGS): Removed.
* config/i386/i386.c (ix86_push_argument): New.
(TARGET_PUSH_ARGUMENT): Likewise.
* config/i386/i386.h (PUSH_ARGS): Removed.
* config/m32c/m32c.c (TARGET_PUSH_ARGUMENT): New.
* config/m32c/m32c.h (PUSH_ARGS): Removed.
* config/nios2/nios2.h (PUSH_ARGS): Likewise.
* config/pru/pru.h (PUSH_ARGS): Likewise.
* doc/tm.texi.in: Remove PUSH_ARGS documentation.  Add
TARGET_PUSH_ARGUMENT hook.
* doc/tm.texi: Regenerated.

gcc/testsuite/

PR target/100704
* gcc.target/i386/pr100704-1.c: New test.
* gcc.target/i386/pr100704-2.c: Likewise.
* gcc.target/i386/pr100704-3.c: Likewise.

3 years agoi386: Add variable vec_set for 64bit vectors [PR97194]
Uros Bizjak [Thu, 17 Jun 2021 13:19:12 +0000 (15:19 +0200)]
i386: Add variable vec_set for 64bit vectors [PR97194]

To generate sane code a SSE4.1 variable PBLENDV instruction is needed.

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

gcc/
PR target/97194
* config/i386/i386-expand.c (expand_vector_set_var):
Handle V2FS mode remapping.  Pass TARGET_MMX_WITH_SSE to
ix86_expand_vector_init_duplicate.
(ix86_expand_vector_init_duplicate): Emit insv_1 for
QImode for !TARGET_PARTIAL_REG_STALL.
* config/i386/predicates.md (vec_setm_mmx_operand): New predicate.
* config/i386/mmx.md (vec_setv2sf): Use vec_setm_mmx_operand
as operand 2 predicate.  Call ix86_expand_vector_set_var
for non-constant index operand.
(vec_setv2si): Ditto.
(vec_setv4hi): Ditto.
(vec_setv8qi): ditto.

gcc/testsuite/

PR target/97194
* gcc.target/i386/sse4_1-vec-set-1.c: New test.
* gcc.target/i386/sse4_1-vec-set-2.c: ditto.

3 years agoCleanup clz and ctz code in range_of_builtin_call.
Aldy Hernandez [Thu, 13 May 2021 17:47:41 +0000 (13:47 -0400)]
Cleanup clz and ctz code in range_of_builtin_call.

These are various cleanups to the clz/ctz code.

First, ranges from range_of_expr are always numeric so we
should adjust.  Also, the checks for non-zero were assuming the argument
was unsigned, which in the PR's testcase is clearly not.  I've cleaned
this up, so that it works either way.

I've also removed the following annoying idiom:

-         int newmini = prec - 1 - wi::floor_log2 (r.upper_bound ());
-         if (newmini == prec)

This is really a check for r.upper_bound() == 0, as floor_log2(0)
returns -1.  It's confusing.

Tested on x86-64 Linux.

gcc/ChangeLog:

PR tree-optimization/100790
* gimple-range.cc (range_of_builtin_call): Cleanup clz and ctz
code.

gcc/testsuite/ChangeLog:

* gcc.dg/pr100790.c: New test.

3 years agodocs: Use -O1 as a canonical value for -O option
Martin Liska [Thu, 17 Jun 2021 09:48:59 +0000 (11:48 +0200)]
docs: Use -O1 as a canonical value for -O option

gcc/ChangeLog:

* doc/invoke.texi: Use consistently -O1 instead of -O.

3 years agogcov: update documentation entry about string format
Martin Liska [Thu, 17 Jun 2021 09:39:11 +0000 (11:39 +0200)]
gcov: update documentation entry about string format

gcc/ChangeLog:

* gcov-io.h: Update documentation entry about string format.

3 years agoIBM Z: Fix vector intrinsics vec_double and vec_floate
Marius Hillenbrand [Wed, 16 Jun 2021 16:26:48 +0000 (18:26 +0200)]
IBM Z: Fix vector intrinsics vec_double and vec_floate

Fix the mapping of vec_double and vec_floate to builtins.

gcc/ChangeLog:

PR target/100871
* config/s390/vecintrin.h (vec_doublee): Fix to use
  __builtin_s390_vflls.
(vec_floate): Fix to use __builtin_s390_vflrd.

gcc/testsuite/ChangeLog:

* gcc.target/s390/zvector/vec-doublee.c: New test.
* gcc.target/s390/zvector/vec-floate.c: New test.

3 years agoreturn auto_vec from more dominance functions
Trevor Saunders [Sat, 12 Jun 2021 23:36:38 +0000 (19:36 -0400)]
return auto_vec from more dominance functions

This ensures the vector gets cleaned up by the caller when appropriate.

Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org>
gcc/ChangeLog:

* dominance.c (get_dominated_to_depth): Return auto_vec<basic_block>.
* dominance.h (get_dominated_to_depth): Likewise.
(get_all_dominated_blocks): Likewise.
* cfgcleanup.c (delete_unreachable_blocks): Adjust.
* gcse.c (hoist_code): Likewise.
* tree-cfg.c (remove_edge_and_dominated_blocks): Likewise.
* tree-parloops.c (oacc_entry_exit_ok): Likewise.
* tree-ssa-dce.c (eliminate_unnecessary_stmts): Likewise.
* tree-ssa-phiprop.c (pass_phiprop::execute): Likewise.

3 years agomake get_domminated_by_region return a auto_vec
Trevor Saunders [Sat, 12 Jun 2021 18:18:05 +0000 (14:18 -0400)]
make get_domminated_by_region return a auto_vec

This makes it clear the caller owns the vector, and ensures it is cleaned up.

Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org>
gcc/ChangeLog:

* dominance.c (get_dominated_by_region): Return auto_vec<basic_block>.
* dominance.h (get_dominated_by_region): Likewise.
* tree-cfg.c (gimple_duplicate_sese_region): Adjust.
(gimple_duplicate_sese_tail): Likewise.
(move_sese_region_to_fn): Likewise.

3 years agoreturn auto_vec from get_dominated_by
Trevor Saunders [Tue, 8 Jun 2021 03:36:15 +0000 (23:36 -0400)]
return auto_vec from get_dominated_by

Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org>
gcc/ChangeLog:

* dominance.c (get_dominated_by): Return auto_vec<basic_block>.
* dominance.h (get_dominated_by): Likewise.
* auto-profile.c (afdo_find_equiv_class): Adjust.
* cfgloopmanip.c (duplicate_loop_to_header_edge): Likewise.
* loop-unroll.c (unroll_loop_runtime_iterations): Likewise.
* tree-cfg.c (test_linear_chain): Likewise.
(test_diamond): Likewise.

3 years agoreturn auto_vec from get_loop_hot_path
Trevor Saunders [Mon, 7 Jun 2021 00:13:38 +0000 (20:13 -0400)]
return auto_vec from get_loop_hot_path

This ensures callers take ownership of the returned vector.

Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org>
gcc/ChangeLog:

* cfgloop.h (get_loop_hot_path): Return auto_vec<basic_block>.
* cfgloopanal.c (get_loop_hot_path): Likewise.
* tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Likewise.

3 years agoreturn auto_vec from cgraph_node::collect_callers
Trevor Saunders [Sun, 6 Jun 2021 20:30:29 +0000 (16:30 -0400)]
return auto_vec from cgraph_node::collect_callers

This ensures the callers of collect_callers () take ownership of the vector and
free it when appropriate.

Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org>
gcc/ChangeLog:

* cgraph.c (cgraph_node::collect_callers): Return
auto_vec<cgraph_edge *>.
* cgraph.h (cgraph_node::collect_callers): Likewise.
* ipa-cp.c (create_specialized_node): Adjust.
(decide_about_value): Likewise.
(decide_whether_version_node): Likewise.
* ipa-sra.c (process_isra_node_results): Likewise.

3 years agoauto_vec copy/move improvements
Trevor Saunders [Mon, 7 Jun 2021 00:05:53 +0000 (20:05 -0400)]
auto_vec copy/move improvements

- Unfortunately using_auto_storage () needs to handle m_vec being null.
- Handle self move of an auto_vec to itself.
- Make sure auto_vec defines the classes move constructor and assignment
  operator, as well as ones taking vec<T>, so the compiler does not generate
them for us.  Per https://en.cppreference.com/w/cpp/language/move_constructor
the ones taking vec<T> do not count as the classes move constructor or
assignment operator, but we want them as well to assign a plain vec to a
auto_vec.
- Explicitly delete auto_vec's copy constructor and assignment operator.  This
  prevents unintentional expenssive coppies of the vector and makes it clear
when coppies are needed that that is what is intended.  When it is necessary to
copy a vector copy () can be used.

Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org>
gcc/ChangeLog:

* vec.h (vl_ptr>::using_auto_storage): Handle null m_vec.
(auto_vec<T, 0>::auto_vec): Define move constructor, and delete copy
constructor.
(auto_vec<T, 0>::operator=): Define move assignment and delete copy
assignment.

3 years agoAdd debugging helpers for ranger.
Aldy Hernandez [Mon, 14 Jun 2021 09:39:33 +0000 (11:39 +0200)]
Add debugging helpers for ranger.

These are debugging aids for help in debugging ranger based passes.

gcc/ChangeLog:

* gimple-range.cc (debug_seed_ranger): New.
(dump_ranger): New.
(debug_ranger): New.

3 years agoVectorization of BB reductions
Richard Biener [Tue, 8 Jun 2021 13:10:45 +0000 (15:10 +0200)]
Vectorization of BB reductions

This adds a simple reduction vectorization capability to the
non-loop vectorizer.  Simple meaning it lacks any of the fancy
ways to generate the reduction epilogue but only supports
those we can handle via a direct internal function reducing
a vector to a scalar.  One of the main reasons is to avoid
massive refactoring at this point but also that more complex
epilogue operations are hardly profitable.

Mixed sign reductions are for now fend off and I'm not finally
settled with whether we want an explicit SLP node for the
reduction epilogue operation.  Handling mixed signs could be
done by multiplying with a { 1, -1, .. } vector.  Fend off
are also reductions with non-internal operands (constants
or register parameters for example).

Costing is done by accounting the original scalar participating
stmts for the scalar cost and log2 permutes and operations for
the vectorized epilogue.

--

SPEC CPU 2017 FP with rate workload measurements show (picked
fastest runs of three) regressions for 507.cactuBSSN_r (1.5%),
508.namd_r (2.5%), 511.povray_r (2.5%), 526.blender_r (0.5) and
527.cam4_r (2.5%) and improvements for 510.parest_r (5%) and
538.imagick_r (1.5%).  This is with -Ofast -march=znver2 on a Zen2.

Statistics on CPU 2017 shows that the overwhelming number of seeds
we find are reductions of two lanes (well - that's basically every
associative operation).  That means we put a quite high pressure
on the SLP discovery process this way.

In total we find 583218 seeds we put to SLP discovery out of which
66205 pass that and only 6185 of those make it through
code generation checks. 796 of those are discarded because the reduction
is part of a larger SLP instance.  4195 of the remaining
are deemed not profitable to vectorize and 1194 are finally
vectorized.  That's a poor 0.2% rate.

Of the 583218 seeds 486826 (83%) have two lanes, 60912 have three (10%),
28181 four (5%), 4808 five, 909 six and there are instances up to 120
lanes.

There's a set of 54086 candidate seeds we reject because
they contain a constant or invariant (not implemented yet) but still
have two or more lanes that could be put to SLP discovery.

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

PR tree-optimization/54400
* tree-vectorizer.h (enum slp_instance_kind): Add
slp_inst_kind_bb_reduc.
(reduction_fn_for_scalar_code): Declare.
* tree-vect-data-refs.c (vect_slp_analyze_instance_dependence):
Check SLP_INSTANCE_KIND instead of looking at the
representative.
(vect_slp_analyze_instance_alignment): Likewise.
* tree-vect-loop.c (reduction_fn_for_scalar_code): Export.
* tree-vect-slp.c (vect_slp_linearize_chain): Split out
chain linearization from vect_build_slp_tree_2 and generalize
for the use of BB reduction vectorization.
(vect_build_slp_tree_2): Adjust accordingly.
(vect_optimize_slp): Elide permutes at the root of BB reduction
instances.
(vectorizable_bb_reduc_epilogue): New function.
(vect_slp_prune_covered_roots): Likewise.
(vect_slp_analyze_operations): Use them.
(vect_slp_check_for_constructors): Recognize associatable
chains for BB reduction vectorization.
(vectorize_slp_instance_root_stmt): Generate code for the
BB reduction epilogue.

* gcc.dg/vect/bb-slp-pr54400.c: New testcase.

3 years agoAdd amacleod and aldyh as *vrp and ranger maintainers.
Aldy Hernandez [Thu, 17 Jun 2021 07:49:43 +0000 (09:49 +0200)]
Add amacleod and aldyh as *vrp and ranger maintainers.

ChangeLog:

* MAINTAINERS (Various Maintainers): Add Andrew and myself
as *vrp and ranger maintainers.

3 years ago[Ada] Use runtime from base compiler during stage1 (continued)
Arnaud Charlet [Wed, 16 Jun 2021 07:55:17 +0000 (03:55 -0400)]
[Ada] Use runtime from base compiler during stage1 (continued)

gcc/ada/

* gcc-interface/Make-lang.in: Use libgnat.so if libgnat.a cannot
be found.

3 years agoc++: Tweak PR101029 fix
Jason Merrill [Wed, 16 Jun 2021 21:42:15 +0000 (17:42 -0400)]
c++: Tweak PR101029 fix

The case of an initializer with side effects for a zero-length array seems
extremely unlikely, but we should still return the right type in that case.

PR c++/101029

gcc/cp/ChangeLog:

* init.c (build_vec_init): Preserve the type of base.

3 years agoDaily bump.
GCC Administrator [Thu, 17 Jun 2021 00:16:54 +0000 (00:16 +0000)]
Daily bump.

3 years agoAdd recomputation to outgoing_edge_range.
Andrew MacLeod [Wed, 16 Jun 2021 22:08:03 +0000 (18:08 -0400)]
Add recomputation to outgoing_edge_range.

The gori engine can calculate outgoing ranges for exported values.  This
change allows 1st degree recomputation.  If a name is not exported from a
block, but one of the ssa_names used directly in computing it is, then
we can recompute the ssa_name on the edge using the edge values for its
operands.

* gimple-range-gori.cc (gori_compute::has_edge_range_p): Check with
may_recompute_p.
(gori_compute::may_recompute_p): New.
(gori_compute::outgoing_edge_range_p): Perform recomputations.
* gimple-range-gori.h (class gori_compute): Add prototype.

3 years agoRange_on_edge in ranger_cache should return true for all ranges.
Andrew MacLeod [Wed, 16 Jun 2021 15:14:36 +0000 (11:14 -0400)]
Range_on_edge in ranger_cache should return true for all ranges.

Range_on_edge was implemented in the cache to always return a range, but
only returned true when the edge actally changed the range.
Return true with any range that can be calculated.

* gimple-range-cache.cc (ranger_cache::range_on_edge): Always return
true when a range can be calculated.
* gimple-range.cc (gimple_ranger::dump_bb): Check has_edge_range_p.

3 years agoCorrect documented option defaults.
Martin Sebor [Wed, 16 Jun 2021 22:49:56 +0000 (16:49 -0600)]
Correct documented option defaults.

gcc/ChangeLog:

* doc/invoke.texi (-Wmismatched-dealloc, -Wmismatched-new-delete):
Correct documented defaults.

3 years agoc++: static memfn from non-dependent base [PR101078]
Jason Merrill [Wed, 16 Jun 2021 20:09:59 +0000 (16:09 -0400)]
c++: static memfn from non-dependent base [PR101078]

After my patch for PR91706, or before that with the qualified call,
tsubst_baselink returned a BASELINK with BASELINK_BINFO indicating a base of
a still-dependent derived class.  We need to look up the relevant base binfo
in the substituted class.

PR c++/101078
PR c++/91706

gcc/cp/ChangeLog:

* pt.c (tsubst_baselink): Update binfos in non-dependent case.

gcc/testsuite/ChangeLog:

* g++.dg/template/access39.C: New test.

3 years agoFortran - ICE in gfc_check_do_variable, at fortran/parse.c:4446
Harald Anlauf [Wed, 16 Jun 2021 20:04:22 +0000 (22:04 +0200)]
Fortran - ICE in gfc_check_do_variable, at fortran/parse.c:4446

Avoid NULL pointer dereferences during error recovery.

gcc/fortran/ChangeLog:

PR fortran/95501
PR fortran/95502
* expr.c (gfc_check_pointer_assign): Avoid NULL pointer
dereference.
* match.c (gfc_match_pointer_assignment): Likewise.
* parse.c (gfc_check_do_variable): Avoid comparison with NULL
symtree.

gcc/testsuite/ChangeLog:

PR fortran/95501
PR fortran/95502
* gfortran.dg/pr95502.f90: New test.