Piotr Trojanek [Tue, 18 Jan 2022 00:08:53 +0000 (01:08 +0100)]
[Ada] Remove extra space around binary operators
Style cleanups. Violation initially spotted while reading the code for
UI_Expon; other occurrences found with grep (and examined manually,
because sometimes the extra space is needed for a code layout).
gcc/ada/
* bindgen.adb, errout.adb, exp_unst.adb, gnatchop.adb,
libgnat/a-ngcefu.adb, libgnat/a-strunb.adb,
libgnat/a-stwiun.adb, libgnat/a-stzunb.adb,
libgnat/a-wtedit.adb, libgnat/g-debpoo.adb, osint.adb,
sigtramp-vxworks.c, uintp.adb: Remove extra whitespace around +,
-, *, / and **.
Piotr Trojanek [Mon, 17 Jan 2022 12:37:00 +0000 (13:37 +0100)]
[Ada] Remove CodePeer annotations for pragma Loop_Variant
Pragma Loop_Variant is now expanded into a null statement in CodePeer
mode. Remove annotation related to false positives in runtime units.
gcc/ada/
* libgnat/s-expmod.adb: Remove CodePeer annotation for pragma
Loop_Variant.
Piotr Trojanek [Fri, 14 Jan 2022 17:43:53 +0000 (18:43 +0100)]
[Ada] Prevent inlining-for-proof for calls inside ELSIF condition
In GNATprove we don't want inlining-for-proof to expand subprogram
bodies into actions attached to nodes. These actions are attached either
to expressions or to statements.
For expressions, we prevented inlining by Is_Potentially_Unevaluated.
For statements, we prevented inlining by In_While_Loop_Condition, but
forgot about actions attached to ELSIF condition.
There are no other expression or statements nodes where actions could be
attached, so this fix is exhaustive.
gcc/ada/
* sem_util.ads (In_Statement_Condition_With_Actions): Renamed
from In_While_Loop_Condition; move to fit the alphabetic order.
* sem_util.adb (In_Statement_Condition_With_Actions): Detect
Elsif condition; stop search on other statements; prevent search
from going too far; move to fit the alphabetic order.
* sem_res.adb (Resolve_Call): Adapt caller.
Piotr Trojanek [Fri, 14 Jan 2022 15:09:27 +0000 (16:09 +0100)]
[Ada] Remove redundant guards for empty list
Routine Has_Excluded_Declaration iterates over declarations with
First/Present/Next, which is safe when declarations are No_List.
Cleanup related to excessive inlining-for-proof by GNATprove.
gcc/ada/
* inline.adb (Build_Body_To_Inline): Remove redundant guards.
* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Likewise.
Eric Botcazou [Fri, 14 Jan 2022 21:36:13 +0000 (22:36 +0100)]
[Ada] Fix missing error on actual for In/Out parameter
The compiler was failing to give an error on the result of a call to the
Input attribute passed as actual for an In/Out parameter.
gcc/ada/
* sem_util.adb (Is_OK_Variable_For_Out_Formal): Remove test on
Comes_From_Source in the condition dealing with the expression
of an N_Unchecked_Type_Conversion node.
Piotr Trojanek [Thu, 13 Jan 2022 21:29:01 +0000 (22:29 +0100)]
[Ada] Fix indentation of "Start of processing for ..." labels
The "Start of processing for ..." labels should be aligned with the
BEGIN that follows. Violations found with:
$ grep -Pzo "( *) \-\- Start of processing for \w+\n\n\1begin" *.adb
and corrected manually, because some of them had to be entirely removed.
Also, remove trailing semicolons found while guessing the grep pattern.
gcc/ada/
* exp_aggr.adb, exp_ch3.adb, exp_util.adb, freeze.adb,
gnatfind.adb, gnatlink.adb, gnatxref.adb, gprep.adb,
libgnat/a-cfhama.adb, libgnat/g-alleve.adb, sem_ch12.adb,
sem_ch13.adb, xr_tabls.adb: Fix style labels.
Justin Squirek [Mon, 3 Jan 2022 08:26:44 +0000 (08:26 +0000)]
[Ada] Improve error messages to include full package name
This patch improves error messages in the compiler so that missing
'with' error messages show the complete package name instead of a
limited number of selectors.
gcc/ada/
* err_vars.ads: Add new error message names and nodes.
* erroutc.adb (Set_Msg_Insertion_Name,
Set_Msg_Insertion_Name_Literal): Likewise.
* errout.adb (Set_Msg_Insertion_Node): Likewise.
* errout.ads: Likewise.
* exp_disp.adb (Check_Premature_Freezing): Modify setting of
Error_Msg_Node_2 to occur directly before Error_Msg call where
applicable.
* sem_ch8.adb (Error_Missing_With_Of_Known_Unit): Added to
handle the printing of full package names of known units.
(Undefined, Find_Expanded_Name): Replace error printing with
call to Error_Missing_With_Of_Known_Unit.
Yannick Moy [Thu, 13 Jan 2022 16:35:24 +0000 (17:35 +0100)]
[Ada] Set Error_Msg_Warn before use of << insertion
Calls to Error_Msg procedures with a message using the < or <<
insertions need to set appropriately Error_Msg_Warn. This was not done
in one call, which would lead to spurious errors when changing the
implementation of a runtime unit. This fixes it so that changes can be
applied.
gcc/ada/
* exp_ch4.adb (Expand_Allocator_Expression): Set Error_Msg_Warn
correctly.
Steve Baird [Wed, 15 Dec 2021 23:13:39 +0000 (15:13 -0800)]
[Ada] Properly handle unprefixed references to components
In some cases, the compiler would incorrectly reject unprefixed uses of
component names in an aspect specification for the composite type.
Correct this error.
gcc/ada/
* sem_ch13.adb (Replace_Type_Ref): In the case of an identifier
that names a component of the type, simplify the test to decide
whether to build a prefix for it (the prefix denotes the current
instance of the enclosing type): if the identifier doesn't
already have a prefix, then give it one. This isn't quite right
in the corner case of a quantified expression or some other such
expression that declares an object with the same name as a
component, but it is still an improvement.
Ed Schonberg [Wed, 12 Jan 2022 11:04:58 +0000 (12:04 +0100)]
[Ada] Fix package installation for private array type of private element
The problem comes from the construction of Stream operations, which
happens at the point a tagged type is frozen. Streams need to see the
full view of types, so that for example the Read attribute for an array
can be expanded into a loop over the Read attribute for the component
type. Now if during that expansion we have a private type we may need
to retrieve the full view of the type to find its structure. And the
corresponding tree must be compiled in the context of the package that
defines the type, which might not be the current package. The problem
arises when both array and component types are private, then the
described mechanism is invoked twice.
gcc/ada/
* exp_attr.adb (Compile_Stream_Body_In_Scope): Do not install
package if array type and element type come from the same
package, and the original array type is private.
Eric Botcazou [Fri, 7 Jan 2022 23:48:58 +0000 (00:48 +0100)]
[Ada] Fix internal error on declaration of derived discriminated record type
When the parent type has a variant part and the derived type is also
discriminated but statically selects a variant, the initialization
routine of the derived type may attempt to access components of other
variants that are no longer present.
gcc/ada/
* exp_ch4.adb (Handle_Changed_Representation): Simplify and fix
thinko in the loop building the constraints for discriminants.
* exp_ch5.adb (Make_Component_List_Assign): Try also to extract
discriminant values for a derived type.
Ed Schonberg [Mon, 3 Jan 2022 14:29:09 +0000 (15:29 +0100)]
[Ada] Fix visibility inside declare_expression
The first implementation just created a scope for the analysis of the
declarations and the expression, so that visibility would just work as
it does for all other constructs. However this led to an annoying bug
when one of the declarations or the expression itself creates a
transient scope: there may be a confusion on scope exit between those
two scopes. As a result visibility is handled by explicit traversal of
the expression and replacement of occurrences of the local variables,
see Replace_Local_Ref in Resolve_Declare_Expression (sem_res.adb). The
current code does not take into account that there may be references to
a local object in a subsequent declaration (not just in the expression).
gcc/ada/
* sem_res.adb (Resolve_Declare_Expression): Traverse the
expression to replace references to local variables that occur
within declarations of the declare_expression; fix typos in
comments.
Ed Schonberg [Tue, 14 Dec 2021 14:44:16 +0000 (15:44 +0100)]
[Ada] Fix check for looking for user defined literals
Recall that Has_Possible_Literal_Aspects only comes in if a given node
does not have any visible interpretation. If one operand is a literal we
assume that there may be a user-defined literal defined for some type to
be determined during the downward pass of resolution, but that depends
on the existence of some user-defined function or operator that can take
that literal as an actual. If analysis did not find such, the call is
illegal. I think that the following must be added to Operator_Check to
recover the proper error.
Note that this breaks current partial implementation of user-defined
literals.
gcc/ada/
* sem_ch4.adb (Operator_Check): Fix condition.
Piotr Trojanek [Wed, 12 Jan 2022 09:44:28 +0000 (10:44 +0100)]
[Ada] Refine description of SPARK with static Boolean expressions
A number of SPARK pragmas controlled by an optional Boolean expression
require those expressions to be static. This is now clarified in the
GNAT RM.
gcc/ada/
* doc/gnat_rm/implementation_defined_pragmas.rst
(Abstract_State, Async_Readers, Async_Writers,
Constant_After_Elaboration, Effective_Reads, Effective_Writes,
Extensions_Visible, Ghost, No_Caching, Volatile_Function): Only
static Boolean expressions are allowed.
* gnat_rm.texi: Regenerate.
Piotr Trojanek [Mon, 10 Jan 2022 23:23:21 +0000 (00:23 +0100)]
[Ada] Allow Big_Integer in loop and subprogram variants
In SPARK loop and subprogram variants we now allow expressions of any
discrete type and of Ada.Numerics.Big_Numbers.Big_Integers.Big_Integer
type.
gcc/ada/
* exp_prag.adb (Expand_Pragma_Loop_Variant,
Expand_Pragma_Subprogram_Variant): Adapt call via
Process_Variant to Make_Variant_Comparison.
* exp_util.adb (Make_Variant_Comparison): Compare Big_Integer
expressions with a function call and not an operator.
* exp_util.ads (Make_Variant_Comparison): Add type parameter,
which is needed because the Curr_Val and Old_Val expressions
might not be yet decorated.
* rtsfind.ads: (RTU_Id): Add support for Big_Integers and
Big_Integers_Ghost.
(RE_Id): Add support for Big_Integer and its ghost variant.
(RE_Unit_Table): Add mapping from Big_Integer to Big_Integers;
same for the ghost variants.
* rtsfind.adb (Get_Unit_Name): Add support for Big_Numbers.
* sem_prag.adb (Analyze_Pragma): Allow Big_Integer in pragma
Loop_Variant.
(Analyze_Variant): Allow Big_Integer in pragma
Subprogram_Variant.
Piotr Trojanek [Mon, 10 Jan 2022 23:28:00 +0000 (00:28 +0100)]
[Ada] Add utility to preanalyze assert expression without forcing its type
In SPARK loop and subprogram variants we now allow expressions of any
discrete type or of Ada.Numerics.Big_Numbers.Big_Integers.Big_Integer
type. This requires a variant of Preanalyze_Assert_Expression that
doesn't force the expression to be of a particular type, similar to the
existing variant of Analyze_And_Resolve.
gcc/ada/
* sem_ch3.ads, sem_ch3.adb (Preanalyze_Assert_Expression): Add a
variant that doesn't force preanalysis to yield a specific type.
Eric Botcazou [Mon, 3 Jan 2022 10:32:48 +0000 (11:32 +0100)]
[Ada] Revamp type resolution for comparison and equality operators
The main goal was to make it symmetrical, but this also moves error handling
entirely to the second phase of type resolution.
gcc/ada/
* einfo.ads (Access Kinds): Reorder and beef up.
* sem.adb (Analyze): Call Analyze_Comparison_Equality_Op for all
comparison and equality operators.
* sem_ch4.ads (Analyze_Comparison_Op): Delete.
(Analyze_Equality_Op): Likewise.
(Analyze_Comparison_Equality_Op): Declare.
(Ambiguous_Operands): Likewise.
* sem_ch4.adb (Ambiguous_Operands): Remove declaration.
(Defined_In_Scope): Delete.
(Find_Comparison_Types): Merge into...
(Find_Equality_Types): Merge into...
(Find_Comparison_Equality_Types): ...this. Make fully symmetrical.
(Analyze_Arithmetic_Op): Minor consistency tweaks.
(Analyze_Comparison_Op): Merge into...
(Analyze_Equality_Op): Merge into...
(Analyze_Comparison_Equality_Op): ...this. Make fully symmetrical.
(Analyze_Logical_Op): Minor consistency tweaks.
(Analyze_Membership_Op): Make fully symmetrical.
(Analyze_One_Call): Minor comment tweak.
(Analyze_Operator_Call): Call Find_Comparison_Equality_Types.
(Analyze_User_Defined_Binary_Op): Make fully symmetrical.
(Check_Arithmetic_Pair.Specific_Type): Delete.
(Diagnose_Call): Add special handling for "+" operator.
(Operator_Check): Call Analyze_Comparison_Equality_Op.
* sem_ch8.adb (Has_Implicit_Operator): Add Is_Type guard for boolean
operators, use Valid_Comparison_Arg and Valid_Equality_Arg for resp.
comparison and equality operators.
* sem_res.adb (Check_For_Visible_Operator): Call Is_Visible_Operator
(Make_Call_Into_Operator): Use Preserve_Comes_From_Source.
(Resolve_Actuals): Deal specifically with Any_Type actuals for user-
defined comparison and equality operators.
(Resolve_Call): Minor tweaks.
(Resolve_Comparison_Op): Tidy up and give error for ambiguity.
(Resolve_Equality_Op): Likewise, as well as other errors.
(Rewrite_Renamed_Operator): Simplify.
* sem_type.ads (Is_Invisible_Operator): Delete.
(Is_Visible_Operator): Declare.
(Has_Compatible_Type): Remove For_Comparison parameter.
(Specific_Type): Declare.
(Valid_Equality_Arg): Likewise.
* sem_type.adb (Specific_Type): Remove declaration.
(Add_One_Interp): Call Is_Visible_Operator for the visibility test.
(Remove_Conversions): Rename into...
(Remove_Conversions_And_Abstract_Operations): ...this. Do not apply
numeric-type treatment to Any_Type. Expand the special handling for
abstract interpretations to second operand. Remove obsolete code.
(Disambiguate): Adjust to above renaming. Tweak to hidden case and
call Remove_Conversions_And_Abstract_Operations for operators too.
(Entity_Matches_Spec): Minor tweak.
(Find_Unique_Type): Simplify and deal with user-defined literals.
(Has_Compatible_Type): Remove For_Comparison parameter and adjust.
Call the Is_User_Defined_Literal predicate and remove call to
the Is_Invisible_Operator predicate.
(Is_Invisible_Operator): Delete.
(Is_Visible_Operator): New function.
(Operator_Matches_Spec): Use Valid_Equality_Arg predicate.
(Specific_Type): Tidy up, make fully symmetrical and deal with
private views the same way as Covers.
(Valid_Comparison_Arg): Return true for Any_Composite/Any_String.
(Valid_Equality_Arg): New function.
* sem_util.ads (Is_User_Defined_Literal): Declare.
* sem_util.adb (Is_User_Defined_Literal): New function.
Bob Duff [Mon, 10 Jan 2022 15:29:40 +0000 (10:29 -0500)]
[Ada] Use "aspect" instead of "pragma" in warnings
For warnings related to the Unreferenced, Unmodified, and Unused
aspects, refer to the "aspect", not the "pragma". Note that the aspect
can be set by an aspect_specification or a pragma, so the term "aspect"
is correct even in the pragma case. However, messages in sem_prag.adb
use Fix_Error, so they refer to "aspect" or "pragma". It's not clear
that we really ought to refer to "pragma", now that those are obsolete,
but de call Fix_Error for uniformity. We do not attempt to make
Fix_Error available outside sem_prag.adb -- too much trouble for
something that perhaps ought to be removed.
gcc/ada/
* lib-xref.adb, sem_util.adb: Change wording of warning messages
to use "aspect".
* sem_prag.adb: Use Fix_Error to change wording of warnings.
* doc/gnat_rm/implementation_defined_pragmas.rst: Minor: fix
cut&paste error.
* gnat_rm.texi: Regenerate.
Doug Rupp [Mon, 20 Dec 2021 22:25:30 +0000 (14:25 -0800)]
[Ada] vx21.07: stack-checking on ppc
On VxWorks >= 7.2 and 653, signal processing code is expected to clear
the TCB exception count field when returning control back to user code.
This change arranges to do so. It is believed that this is only an
issue in Kernel mode, and not RTP because there is no exception count
field in RTP mode and no failures have been observed.
gcc/ada/
* init.c [vxworks] (CLEAR_EXCEPTION_COUNT): New macro.
(__gnat_clear_exception_count): Remove.
(__gnat_map_signal): Call CLEAR_EXCEPTION_COUNT().
Fedor Rybin [Tue, 11 Jan 2022 09:04:37 +0000 (12:04 +0300)]
[Ada] Remove gnattest section from gnat user guide
gcc/ada/
* doc/gnat_ugn/gnat_utility_programs.rst: Remove gnattest
section.
Piotr Trojanek [Mon, 10 Jan 2022 20:08:04 +0000 (21:08 +0100)]
[Ada] Remove repeated analysis of attribute prefixes
At the beginning of Analyze_Attribute routine we analyze the attribute
prefix. There is no need to repeat this analysis in branches for
individual attributes.
Code cleanup related to various Analyze/Resolve routines.
gcc/ada/
* sem_attr.adb (Analyze_Attribute): Remove calls to Analyze for
attributes Identity, Priority, Ref, Restriction_Set, To_Address
and for tasking-related attributes Callable, Terminated and
Storage_Size.
Piotr Trojanek [Mon, 10 Jan 2022 19:59:57 +0000 (20:59 +0100)]
[Ada] Remove redundant call to Set_Etype for attribute Bit_Order
Node created by a call to New_Occurrence_Of (RTE (...), ...) has its
Etype set. There is no need to follow it with a call to Set_Etype.
Cleanup of various Analyze/Resolve routines.
gcc/ada/
* sem_attr.adb (Analyze_Attribute): Don't call Set_Etype for
Bit_Order attribute.
Piotr Trojanek [Mon, 10 Jan 2022 13:21:17 +0000 (14:21 +0100)]
[Ada] Remove doubly-negated tests for empty lists
Replace "not Is_Non_Empty_List (...)" with "Is_Empty_List (...)".
Code cleanup; semantics is unaffected.
gcc/ada/
* exp_ch5.adb (Update_Choice_Index): Simplify condition.
* sem_ch8.adb (Attribute_Renaming): Likewise.
Dmitriy Anisimkov [Tue, 21 Dec 2021 07:49:40 +0000 (13:49 +0600)]
[Ada] Remove unused parameter from __gnat_kill
Remove close parameter from __gnat_kill because it is not used in
implementation.
gcc/ada/
* adaint.c (__gnat_kill): Remove close parameter.
(__gnat_killprocesstree): Do not provide close parameter on call
to __gnat_kill.
* libgnat/g-expect.adb (Kill): Remove Close parameter.
(Close): Do not provide Close parameter on call to Kill.
(Send_Signal): Do not provide Close parameter on call to Kill.
* libgnat/s-os_lib.adb (Kill): Do not provide close parameter on
call to __gnat_kill.
Dmitriy Anisimkov [Tue, 21 Dec 2021 06:01:32 +0000 (12:01 +0600)]
[Ada] Stabilize exit code on close process
Call Kill before close input handler in Close routine. Otherwise close
input handler can terminate process before Kill and exit code became
unpredictable.
gcc/ada/
* libgnat/g-expect.adb (Close): Call Kill before Close_Input.
Alex Coplan [Mon, 9 May 2022 08:42:24 +0000 (09:42 +0100)]
Enable match.pd dumping with -fdump-tree-original
I noticed that, while the C/C++ frontends invoke the GENERIC match.pd
simplifications to do early folding, the debug output from
generic-match.cc does not appear in the -fdump-tree-original output,
even with -fdump-tree-original-folding or -fdump-tree-original-all. This
patch fixes that.
For example, before the patch, for the following code:
int a[2];
void bar ();
void f()
{
if ((unsigned long)(a + 1) == 0)
bar ();
}
on AArch64 at -O0, -fdump-tree-original-all would give:
;; Function f (null)
;; enabled by -tree-original
{
if (0)
{
bar ();
}
}
After the patch, we get:
Applying pattern match.pd:3774, generic-match.cc:24535
Matching expression match.pd:146, generic-match.cc:23
Applying pattern match.pd:5638, generic-match.cc:13388
;; Function f (null)
;; enabled by -tree-original
{
if (0)
{
bar ();
}
}
The reason we don't get the match.pd output as it stands, is that the
original dump is treated specially in c-opts.cc: it gets its own state
which is independent from that used by other dump files in the compiler.
Like most of the compiler, the generated generic-match.cc has code of
the form:
if (dump_file && (dump_flags & TDF_FOLDING))
fprintf (dump_file, ...);
But, as it stands, -fdump-tree-original has its own FILE * and flags in
c-opts.cc (original_dump_{file,flags}) and never touches the global
dump_{file,flags} (managed by dumpfile.{h,cc}). This patch adjusts the
code in c-opts.cc to use the main dump infrastructure used by the rest
of the compiler, instead of treating the original dump specially.
We take the opportunity to make a small refactor: the code in
c-gimplify.cc:c_genericize can, with this change, use the global dump
infrastructure to get the original dump file and flags instead of using
the bespoke get_dump_info function implemented in c-opts.cc. With this
change, we remove the only use of get_dump_info, so this can be removed.
Note that we also fix a leak of the original dump file in
c_common_parse_file. I originally thought it might be possible to
achieve this with only one static call to dump_finish () (by simply
moving it earlier in the loop), but unfortunately the dump file is
required to be open while c_parse_final_cleanups runs, as we (e.g.)
perform some template instantiations here for C++, which need to appear
in the original dump file.
We adjust cgraph_node::get_create to avoid introducing noise in the
original dump file: without this, these "Introduced new external node"
lines start appearing in the original dump files, which breaks tests
that do a scan-tree-dump-times on the original dump looking for a
certain function name.
gcc/c-family/ChangeLog:
* c-common.h (get_dump_info): Delete.
* c-gimplify.cc (c_genericize): Get TDI_original dump file info
from the global dump_manager instead of the (now obsolete)
get_dump_info.
* c-opts.cc (original_dump_file): Delete.
(original_dump_flags): Delete.
(c_common_parse_file): Switch to using global dump_manager to
manage the original dump file; fix leak of dump file.
(get_dump_info): Delete.
gcc/ChangeLog:
* cgraph.cc (cgraph_node::get_create): Don't dump if the current
symtab state is PARSING.
Martin Liska [Thu, 3 Feb 2022 09:58:18 +0000 (10:58 +0100)]
Come up with {,UN}LIKELY macros.
gcc/c/ChangeLog:
* c-parser.cc (c_parser_conditional_expression): Use {,UN}LIKELY
macros.
(c_parser_binary_expression): Likewise.
gcc/cp/ChangeLog:
* cp-gimplify.cc (cp_genericize_r): Use {,UN}LIKELY
macros.
* parser.cc (cp_finalize_omp_declare_simd): Likewise.
(cp_finalize_oacc_routine): Likewise.
gcc/ChangeLog:
* system.h (LIKELY): Define.
(UNLIKELY): Likewise.
* domwalk.cc (sort_bbs_postorder): Use {,UN}LIKELY
macros.
* dse.cc (set_position_unneeded): Likewise.
(set_all_positions_unneeded): Likewise.
(any_positions_needed_p): Likewise.
(all_positions_needed_p): Likewise.
* expmed.cc (flip_storage_order): Likewise.
* genmatch.cc (dt_simplify::gen_1): Likewise.
* ggc-common.cc (gt_pch_save): Likewise.
* print-rtl.cc: Likewise.
* rtl-iter.h (T>::array_type::~array_type): Likewise.
(T>::next): Likewise.
* rtl-ssa/internals.inl: Likewise.
* rtl-ssa/member-fns.inl: Likewise.
* rtlanal.cc (T>::add_subrtxes_to_queue): Likewise.
(rtx_properties::try_to_add_dest): Likewise.
* rtlanal.h (growing_rtx_properties::repeat): Likewise.
(vec_rtx_properties_base::~vec_rtx_properties_base): Likewise.
* simplify-rtx.cc (simplify_replace_fn_rtx): Likewise.
* sort.cc (likely): Likewise.
(mergesort): Likewise.
* wide-int.h (wi::eq_p): Likewise.
(wi::ltu_p): Likewise.
(wi::cmpu): Likewise.
(wi::bit_and): Likewise.
(wi::bit_and_not): Likewise.
(wi::bit_or): Likewise.
(wi::bit_or_not): Likewise.
(wi::bit_xor): Likewise.
(wi::add): Likewise.
(wi::sub): Likewise.
Kito Cheng [Mon, 9 May 2022 03:44:30 +0000 (11:44 +0800)]
RISC-V: Fix wrong expansion for arch-canonicalize
rv64gcv should exapnd into:
rv64imafdcv_zicsr_zifencei_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b
but we exapnd fd twice for now:
rv64imafdfdcv_zicsr_zifencei_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b
gcc/ChangeLog:
* config/riscv/arch-canonicalize: Handle g correctly.
GCC Administrator [Mon, 9 May 2022 00:16:19 +0000 (00:16 +0000)]
Daily bump.
GCC Administrator [Sun, 8 May 2022 00:16:20 +0000 (00:16 +0000)]
Daily bump.
Marek Polacek [Thu, 31 Mar 2022 22:31:39 +0000 (18:31 -0400)]
c, c++: attribute format on a ctor with a vbase [PR101833, PR47634]
Attribute format takes three arguments: archetype, string-index, and
first-to-check. The last two specify the position in the function
parameter list. r63030 clarified that "Since non-static C++ methods have
an implicit this argument, the arguments of such methods should be counted
from two, not one, when giving values for string-index and first-to-check."
Therefore one has to write
struct D {
D(const char *, ...) __attribute__((format(printf, 2, 3)));
};
However -- and this is the problem in this PR -- ctors with virtual
bases also get two additional parameters: the in-charge parameter and
the VTT parameter (added in maybe_retrofit_in_chrg). In fact we'll end up
with two clones of the ctor: an in-charge and a not-in-charge version (see
build_cdtor_clones). That means that the argument position the user
specified in the attribute argument will refer to different arguments,
depending on which constructor we're currently dealing with. This can
cause a range of problems: wrong errors, confusing warnings, or crashes.
This patch corrects that; for C we don't have to do anything, and in C++
we can use num_artificial_parms_for. It would be wrong to rewrite the
attributes the user supplied, so I've changed POS to be passed by
reference so that we don't have to change all the call sites of
positional_argument and we still get the default_conversion adjustment.
Attribute format_arg is not affected, because it requires that the
function returns "const char *" which will never be the case for cdtors.
PR c++/101833
PR c++/47634
gcc/c-family/ChangeLog:
* c-attribs.cc (positional_argument): Pass POS by reference. Deal
with FN being either a function declaration or function type. Use
maybe_adjust_arg_pos_for_attribute.
* c-common.cc (check_function_arguments): Maybe pass FNDECL down to
check_function_format.
* c-common.h (maybe_adjust_arg_pos_for_attribute): Declare.
(positional_argument): Adjust.
* c-format.cc (get_constant): Rename to ...
(validate_constant): ... this. Take EXPR by reference. Return bool
instead of tree.
(handle_format_arg_attribute): Don't overwrite FORMAT_NUM_EXPR by the
return value of validate_constant.
(decode_format_attr): Don't overwrite FORMAT_NUM_EXPR and
FIRST_ARG_NUM_EXPR by the return value of validate_constant.
(check_function_format): Adjust a parameter name.
(handle_format_attribute): Maybe pass FNDECL down to decode_format_attr.
gcc/c/ChangeLog:
* c-objc-common.cc (maybe_adjust_arg_pos_for_attribute): New.
gcc/cp/ChangeLog:
* tree.cc (maybe_adjust_arg_pos_for_attribute): New.
gcc/ChangeLog:
* tree-core.h (struct attribute_spec): Update comment for HANDLER.
gcc/testsuite/ChangeLog:
* g++.dg/ext/attr-format-arg1.C: New test.
* g++.dg/ext/attr-format1.C: New test.
* g++.dg/ext/attr-format2.C: New test.
* g++.dg/ext/attr-format3.C: New test.
GCC Administrator [Sat, 7 May 2022 00:16:26 +0000 (00:16 +0000)]
Daily bump.
Ian Lance Taylor [Tue, 22 Mar 2022 17:51:21 +0000 (10:51 -0700)]
compiler: remove Array_index_expression::is_lvalue_
As of CL 77510 it is never true.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/394695
Jonathan Wakely [Fri, 6 May 2022 20:37:47 +0000 (21:37 +0100)]
libstdc++: Simplify std::normal_distribution equality operator
libstdc++-v3/ChangeLog:
* include/bits/random.tcc (operator==): Only check
normal_distribution::_M_saved_available once.
* testsuite/26_numerics/random/normal_distribution/operators/equal.cc:
Check equality after state changes.
* testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error
lineno.
Jonathan Wakely [Fri, 6 May 2022 20:19:17 +0000 (21:19 +0100)]
libstdc++: Fix deserialization for std::normal_distribution [PR105502]
This fixes a regression in std::normal_distribution deserialization that
caused the object to be left unchanged if the __state_avail value read
from the stream was false.
libstdc++-v3/ChangeLog:
PR libstdc++/105502
* include/bits/random.tcc
(operator>>(basic_istream<C,T>&, normal_distribution<R>&)):
Update state when __state_avail is false.
* testsuite/26_numerics/random/normal_distribution/operators/serialize.cc:
Check that deserialized object equals serialized one.
Jason Merrill [Fri, 18 Jun 2021 09:45:02 +0000 (05:45 -0400)]
c++: add color to function decl printing
In reading C++ diagnostics, it's often hard to find the name of the function
in the middle of the template header, return type, parameters, and template
arguments. So let's colorize it, and maybe the template argument bindings
while we're at it.
I've somewhat arbitrarily chosen bold green for the function name, and
non-bold magenta for the template arguments.
A side-effect of this is that when this happens in a quote (i.e. %qD), the
rest of the quote after the function name is no longer bold. I think that's
acceptable; returning to the bold would require maintaining a colorize stack
instead of the on/off controls we have now.
gcc/cp/ChangeLog:
* error.cc (decl_to_string): Add show_color parameter.
(subst_to_string): Likewise.
(cp_printer): Pass it.
(type_to_string): Set pp_show_color.
(dump_function_name): Use "fnname" color.
(dump_template_bindings): Use "targs" color.
(struct colorize_guard): New.
(reinit_cxx_pp): Clear pp_show_color.
gcc/ChangeLog:
* diagnostic-color.cc: Add fnname and targs color entries.
* doc/invoke.texi: Document them.
gcc/testsuite/ChangeLog:
* g++.dg/diagnostic/function-color1.C: New test.
Jason Merrill [Thu, 5 May 2022 15:45:42 +0000 (11:45 -0400)]
vec: fix iterate comment
The comment for this overload, which copies the value out of the vector,
was mostly describing the other overload, which stores a pointer into the
vector.
gcc/ChangeLog:
* vec.h (vec::iterate): Fix comment.
Jason Merrill [Tue, 12 Apr 2022 21:46:59 +0000 (17:46 -0400)]
c++: empty base constexpr adjustment [PR105245]
While looking at PR105245 in stage 4, I wanted to reorganize the code a bit,
but it seemed prudent to defer that to stage 1.
PR c++/105245
PR c++/100111
gcc/cp/ChangeLog:
* constexpr.cc (cxx_eval_store_expression): Reorganize empty base
handling.
Alexandre Oliva [Fri, 6 May 2022 18:43:42 +0000 (15:43 -0300)]
libstdc++: ppc: conditionalize vsx-only simd intrinsics
libstdc++'s bits/simd.h section for PowerPC, guarded by __ALTIVEC__,
defines various intrinsic vector types that are only available with
__VSX__: 64-bit long double, double, (un)signed long long, and 64-bit
(un)signed long.
experimental/simd/standard_abi_usable{,_2}.cc tests error out
reporting the unmet requirements when the target cpu doesn't enable
VSX. Make the reported instrinsic types conditional on __VSX__ so
that <experimental/simd> can be used on PowerPC variants that do not
support VSX.
for libstdc++-v3/ChangeLog
* include/experimental/bits/simd.h [__ALTIVEC__]: Require VSX
for double, long long, and 64-bit long intrinsic types.
[__ALTIVEC__] (__intrinsic_type): Mention 128-bit in
preexisting long double diagnostic, adjust no-VSX double
diagnostic to cover 64-bit long double as well.
Ian Lance Taylor [Tue, 3 May 2022 22:48:23 +0000 (15:48 -0700)]
compiler: error for duplicate bool map keys
For golang/go#35945
Fixes golang/go#28104
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/403954
Michael Meissner [Fri, 6 May 2022 16:39:13 +0000 (11:39 -0500)]
rs6000: Ignore fusion option flags for inlining test [PR102059]
The -mpower8-fusion and -mpower10-fusion options do not modify which
instructions we can generate, so ignore them when deciding whether we
can inline callee into caller.
2022-05-06 Michael Meissner <meissner@linux.ibm.com>
gcc/
PR target/102059
* config/rs6000/rs6000.cc (rs6000_can_inline_p): Ignore -mpower8-fusion
and -mpower10-fusion options for inlining purposes.
gcc/testsuite/
PR target/102059
* gcc.target/powerpc/pr102059-4.c: New test.
Christophe Lyon [Tue, 5 Apr 2022 09:32:17 +0000 (10:32 +0100)]
aarch64: remove useless GPF_TF_F16 iterator
This iterator is not used anymore and is a leftover from previous
cleanup (r10-5890-gabbe1ed2735517).
2022-04-28 Christophe Lyon <christophe.lyon@arm.com>
gcc/
* config/aarch64/iterators.md (GPF_TF_F16): Delete.
Marcel Vollweiler [Fri, 6 May 2022 14:28:26 +0000 (07:28 -0700)]
OpenMP, libgomp: Add new runtime routine omp_target_is_accessible.
gcc/ChangeLog:
* omp-low.cc (omp_runtime_api_call): Added target_is_accessible to
omp_runtime_apis array.
libgomp/ChangeLog:
* libgomp.map: Added omp_target_is_accessible.
* libgomp.texi: Tagged omp_target_is_accessible as supported.
* omp.h.in: Added omp_target_is_accessible.
* omp_lib.f90.in: Added interface for omp_target_is_accessible.
* omp_lib.h.in: Likewise.
* target.c (omp_target_is_accessible): Added implementation of
omp_target_is_accessible.
* testsuite/libgomp.c-c++-common/target-is-accessible-1.c: New test.
* testsuite/libgomp.fortran/target-is-accessible-1.f90: New test.
Jonathan Wakely [Fri, 6 May 2022 13:31:06 +0000 (14:31 +0100)]
libstdc++: Fix test that fails on Solaris [PR104731]
On Solaris the dirent::d_name member is a single char, causing this test
to fail with warnings about buffer overflow. Change the test to use a
union with additional space for writing a string to the d_name member.
libstdc++-v3/ChangeLog:
PR libstdc++/104731
* testsuite/27_io/filesystem/iterators/error_reporting.cc:
Use a trailing char array as storage for dirent::d_name.
Jonathan Wakely [Fri, 6 May 2022 12:23:45 +0000 (13:23 +0100)]
libstdc++: Do not include <cxxabi.h> in <stacktrace>
This avoids polluting the global namespace with the "abi" namespace
alias.
libstdc++-v3/ChangeLog:
* include/std/stacktrace: Do not include <cxxabi.h>.
(__cxa_demangle): Declare.
Jonathan Wakely [Tue, 6 Apr 2021 14:11:15 +0000 (15:11 +0100)]
libstdc++: Do not use #include inside push visibility scope [PR99871]
libstdc++-v3/ChangeLog:
PR libstdc++/99871
* include/bits/specfun.h: Use visibility attribute on namespace,
instead of pragma push/pop.
* libsupc++/compare: Likewise.
* libsupc++/exception: Likewise.
* libsupc++/exception.h: Likewise.
* libsupc++/exception_ptr.h: Likewise.
* libsupc++/initializer_list: Likewise.
* libsupc++/nested_exception.h: Likewise.
Jonathan Wakely [Thu, 28 Apr 2022 12:28:06 +0000 (13:28 +0100)]
libstdc++: Update documentation about copyright and GPL notices in tests
There is no need to require FSF copyright for tests that are just
"self-evident" ways to check the API and behaviour of the library.
This is consistent with tests for the compiler, which do not have
copyright and licence notices either.
libstdc++-v3/ChangeLog:
* doc/xml/manual/test.xml: Remove requirement for copyright and
GPL notice in tests.
* doc/html/manual/test.html: Regenerate.
Hafiz Abid Qadeer [Fri, 18 Feb 2022 21:28:08 +0000 (21:28 +0000)]
Add a restriction on allocate clause (OpenMP 5.0)
An allocate clause in target region must specify an allocator
unless the compilation unit has requires construct with
dynamic_allocators clause. Current implementation of the allocate
clause did not check for this restriction. This patch fills that
gap.
gcc/ChangeLog:
* omp-low.cc (omp_maybe_offloaded_ctx): New prototype.
(scan_sharing_clauses): Check a restriction on allocate clause.
gcc/testsuite/ChangeLog:
* c-c++-common/gomp/allocate-2.c: Add tests.
* c-c++-common/gomp/allocate-8.c: New test.
* gfortran.dg/gomp/allocate-3.f90: Add tests.
* gcc.dg/gomp/pr104517.c: Update.
Jakub Jelinek [Fri, 6 May 2022 06:44:43 +0000 (08:44 +0200)]
Update gennews for GCC 12.
2022-05-06 Jakub Jelinek <jakub@redhat.com>
* gennews (files): Add files for GCC 12.
GCC Administrator [Fri, 6 May 2022 00:16:26 +0000 (00:16 +0000)]
Daily bump.
Sandra Loosemore [Thu, 5 May 2022 21:45:29 +0000 (14:45 -0700)]
libgomp: Update docs to reflect Fortran support for non-rectangular loops
libgomp/
* libgomp.texi (OpenMP 5.0): Feature is now fully supported.
Marek Polacek [Tue, 3 May 2022 23:01:19 +0000 (19:01 -0400)]
c++: wrong error with MVP and pushdecl [PR64679]
This patch fixes the second half of 64679. Here we issue a wrong
"redefinition of 'int x'" for the following:
struct Bar {
Bar(int, int, int);
};
int x = 1;
Bar bar(int(x), int(x), int{x}); // #1
cp_parser_parameter_declaration_list does pushdecl every time it sees
a named parameter, so the second "int(x)" causes the error. That's
premature, since this turns out to be a constructor call after the
third argument!
If the first parameter is parenthesized, we can't push until we've
established we're looking at a function declaration. Therefore this
could be fixed by some kind of lookahead. I thought about introducing a
lightweight variant of cp_parser_parameter_declaration_list that would
not have any side effects and would return as soon as it figures out
whether it's looking at a declaration or expression. Since that would
require fairly nontrivial changes, I wanted something simpler.
Something like delaying the pushdecl until we've reached the ')'
following the parameter-declaration-clause. But we must push the
parameters before processing a default argument, as in:
Bar bar(int(a), int(b), int c = sizeof(a)); // valid
Moreover, this code should still be accepted
Bar f(int(i), decltype(i) j = 42);
so this patch stashes parameters into a vector when parsing tentatively
only when pushdecl-ing a parameter would result in a clash and an error
about redefinition/redeclaration. The stashed parameters are pushed at
the end of a parameter-declaration-clause if it's followed by a ')', so
that we still diagnose redefining a parameter.
PR c++/64679
gcc/cp/ChangeLog:
* parser.cc (cp_parser_parameter_declaration_clause): Maintain
a vector of parameters that haven't been pushed yet. Push them at the
end of a valid parameter-declaration-clause.
(cp_parser_parameter_declaration_list): Take a new auto_vec parameter.
Do not pushdecl while parsing tentatively when pushdecl-ing a parameter
would result in a hard error.
(cp_parser_cache_defarg): Adjust the call to
cp_parser_parameter_declaration_list.
gcc/testsuite/ChangeLog:
* g++.dg/parse/ambig11.C: New test.
* g++.dg/parse/ambig12.C: New test.
* g++.dg/parse/ambig13.C: New test.
* g++.dg/parse/ambig14.C: New test.
H.J. Lu [Thu, 5 May 2022 20:59:16 +0000 (13:59 -0700)]
libsanitizer: cherry-pick commit
b226894d475b from upstream
cherry-pick:
b226894d475b [sanitizer] [sanitizer] Correct GetTls for x32
Jonathan Wakely [Thu, 5 May 2022 08:50:53 +0000 (09:50 +0100)]
libstdc++: Fixes for tests that fail with -fno-rtti
This disables a use of dynamic_cast that is not valid for -fno-rtti and
adjusts some tests so they don't FAIL with -fno-rtti. Some tests are
skipped completely, and others just make use of typeid conditional on
the __cpp_rtti macro. A couple of tests were using typeid to verify
typedefs denote the right type, which can be done at compile-time using
templates instead.
libstdc++-v3/ChangeLog:
* include/experimental/memory_resource [!__cpp_rtti]
(__resource_adaptor_imp::do_is_equal): Do not use dynamic_cast
when RTTI is disabled.
* testsuite/17_intro/freestanding.cc: Require RTTI.
* testsuite/18_support/exception/38732.cc: Likewise.
* testsuite/18_support/exception_ptr/rethrow_exception.cc:
Likewise.
* testsuite/18_support/nested_exception/68139.cc: Likewise.
* testsuite/18_support/nested_exception/rethrow_if_nested.cc:
Likewise.
* testsuite/18_support/type_info/103240.cc: Likewise.
* testsuite/18_support/type_info/fundamental.cc: Likewise.
* testsuite/18_support/type_info/hash_code.cc: Likewise.
* testsuite/20_util/any/assign/emplace.cc: Likewise.
* testsuite/20_util/any/cons/in_place.cc: Likewise.
* testsuite/20_util/any/misc/any_cast.cc: Likewise.
* testsuite/20_util/any/observers/type.cc: Likewise.
* testsuite/20_util/function/1.cc: Likewise.
* testsuite/20_util/function/2.cc: Likewise.
* testsuite/20_util/function/3.cc: Likewise.
* testsuite/20_util/function/4.cc: Likewise.
* testsuite/20_util/function/5.cc: Likewise.
* testsuite/20_util/function/6.cc: Likewise.
* testsuite/20_util/function/7.cc: Likewise.
* testsuite/20_util/function/8.cc: Likewise.
* testsuite/20_util/polymorphic_allocator/resource.cc: Likewise.
* testsuite/20_util/shared_ptr/casts/1.cc: Likewise.
* testsuite/20_util/shared_ptr/casts/rval.cc: Likewise.
* testsuite/20_util/shared_ptr/cons/unique_ptr_deleter_ref_2.cc:
Likewise.
* testsuite/20_util/shared_ptr/misc/get_deleter.cc: Likewise.
* testsuite/20_util/typeindex/comparison_operators.cc: Likewise.
* testsuite/20_util/typeindex/comparison_operators_c++20.cc:
Likewise.
* testsuite/20_util/typeindex/hash.cc: Likewise.
* testsuite/20_util/typeindex/hash_code.cc: Likewise.
* testsuite/20_util/typeindex/name.cc: Likewise.
* testsuite/22_locale/ctype/is/string/89728_neg.cc: Likewise.
* testsuite/22_locale/global_templates/standard_facet_hierarchies.cc:
Likewise.
* testsuite/22_locale/global_templates/user_facet_hierarchies.cc:
Likewise.
* testsuite/22_locale/locale/13630.cc: Check type without using
RTTI.
* testsuite/23_containers/array/requirements/non_default_constructible.cc:
Require RTTI.
* testsuite/27_io/basic_ostream/emit/1.cc: Likewise.
* testsuite/27_io/fpos/14320-1.cc: Check type without using RTTI.
* testsuite/27_io/fpos/mbstate_t/12065.cc: Require RTTI.
* testsuite/27_io/ios_base/failure/dual_abi.cc: Likewise.
* testsuite/experimental/any/misc/any_cast.cc: Likewise.
* testsuite/experimental/any/observers/type.cc: Likewise.
* testsuite/experimental/memory_resource/resource_adaptor.cc:
Likewise.
* testsuite/lib/libstdc++.exp (check_effective_target_rtti):
Define new proc.
* testsuite/tr1/3_function_objects/function/1.cc: Likewise.
* testsuite/tr1/3_function_objects/function/2.cc: Likewise.
* testsuite/tr1/3_function_objects/function/3.cc: Likewise.
* testsuite/tr1/3_function_objects/function/4.cc: Likewise.
* testsuite/tr1/3_function_objects/function/5.cc: Likewise.
* testsuite/tr1/3_function_objects/function/6.cc: Likewise.
* testsuite/tr1/3_function_objects/function/7.cc: Likewise.
* testsuite/tr1/3_function_objects/function/8.cc: Likewise.
* testsuite/tr2/bases/value.cc: Likewise.
* testsuite/tr2/direct_bases/value.cc: Likewise.
* testsuite/util/exception/safety.h [!__cpp_rtti]: Don't print
types without RTTI.
Uros Bizjak [Thu, 5 May 2022 19:42:12 +0000 (21:42 +0200)]
[PATCH] i386: Cleanup -m32 usage in the testuite.
Use conditional compilation for ia32 target istead.
2022-05-05 Uroš Bizjak <ubizjak@gmail.com>
gcc/testsuite/ChangeLog:
* gcc.target/i386/pr103611-2.c (dg-do): Compile for target ia32.
(dg-options): Remove -m32.
* gcc.target/i386/pr105032.c (dg-do): Compile for taget ia32.
(dg-additional-options): Remove.
* gcc.target/i386/pr104732.c (dg-options): Remove -m32.
* gcc.target/i386/pr99753.c (dg-options): Ditto.
Sandra Loosemore [Thu, 5 May 2022 18:37:16 +0000 (11:37 -0700)]
Fortran: Add support for OMP non-rectangular loops.
This patch adds support for OMP 5.1 "canonical loop nest form" to the
Fortran front end, marks non-rectangular loops for processing
by the middle end, and implements missing checks in the gimplifier
for additional prohibitions on non-rectangular loops.
Note that the OMP spec also prohibits non-rectangular loops with the TILE
construct; that construct hasn't been implemented yet, so that error will
need to be filled in later.
gcc/fortran/
* gfortran.h (struct gfc_omp_clauses): Add non_rectangular bit.
* openmp.cc (is_outer_iteration_variable): New function.
(expr_is_invariant): New function.
(bound_expr_is_canonical): New function.
(resolve_omp_do): Replace existing non-rectangularity error with
check for canonical form and setting non_rectangular bit.
* trans-openmp.cc (gfc_trans_omp_do): Transfer non_rectangular
flag to generated tree structure.
gcc/
* gimplify.cc (gimplify_omp_for): Update messages for SCHEDULED
and ORDERED clause conflict errors. Add check for GRAINSIZE and
NUM_TASKS on TASKLOOP.
gcc/testsuite/
* c-c++-common/gomp/loop-6.c (f3): New function to test TASKLOOP
diagnostics.
* gfortran.dg/gomp/collapse1.f90: Update expected messages.
* gfortran.dg/gomp/pr85313.f90: Remove dg-error on non-rectangular
loops that are now accepted.
* gfortran.dg/gomp/non-rectangular-loop.f90: New file.
* gfortran.dg/gomp/canonical-loop-1.f90: New file.
* gfortran.dg/gomp/canonical-loop-2.f90: New file.
Joseph Myers [Thu, 5 May 2022 17:02:40 +0000 (17:02 +0000)]
Regenerate gcc.pot
* gcc.pot: Regenerate.
Martin Liska [Tue, 12 Apr 2022 13:06:40 +0000 (15:06 +0200)]
Remove loop-incremented dead code.
gcc/ChangeLog:
* genautomata.cc (create_composed_state): Remove dead code.
* graphite-poly.cc (print_pdrs): Likewise.
* lto-wrapper.cc (run_gcc): Likewise.
* tree-switch-conversion.cc (switch_decision_tree::balance_case_nodes):
Likewise.
Martin Liska [Tue, 29 Mar 2022 08:04:53 +0000 (10:04 +0200)]
profile: Unify identifier names for profiling
gcc/ChangeLog:
* tree-profile.cc (gimple_gen_ic_profiler): Prefix names with
PROF_*.
(gimple_gen_time_profiler): Likewise.
Martin Liska [Thu, 5 May 2022 12:44:16 +0000 (14:44 +0200)]
Remove sanity checking in stream_out_histogram_value.
gcc/ChangeLog:
* value-prof.cc (stream_out_histogram_value): Remove sanity
checking.
Richard Biener [Wed, 26 Jan 2022 14:34:54 +0000 (15:34 +0100)]
tree-optimization/104162 - CSE of &MEM[ptr].a[i] and ptr + CST
This adds the capability to value-numbering of treating complex
address expressions where the offset becomes invariant as equal
to a POINTER_PLUS_EXPR. This restores CSE that is now prevented
by early lowering of &MEM[ptr + CST] to a POINTER_PLUS_EXPR.
Unfortunately this regresses gcc.dg/asan/pr99673.c again, so
the testcase is adjusted accordingly.
2022-01-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/104162
* tree-ssa-sccvn.cc (vn_reference_lookup): Handle
&MEM[_1 + 5].a[i] like a POINTER_PLUS_EXPR if the offset
becomes invariant.
(vn_reference_insert): Likewise.
* gcc.dg/tree-ssa/ssa-fre-99.c: New testcase.
* gcc.dg/asan/pr99673.c: Adjust.
Roger Sayle [Thu, 5 May 2022 12:30:27 +0000 (08:30 -0400)]
[Committed] PR testsuite/105486: Use "signed char" in gcc.dg/pr102950.c
Although the automated regression testing scripts for powerpc64 appear
to be somewhat garbled at the moment, they've correctly identified that
my new test case for pr102950.c is failing on powerpc64, as char by
default is unsigned on this target. This patch tweaks the new testcase
by explicitly using "signed char" so that it's testing the intended EVRP
behaviour portably. Committed as obvious.
2022-05-05 Roger Sayle <roger@nextmovesoftware.com>
gcc/testsuite/ChangeLog
PR testsuite/105486
* gcc.dg/pr102950.c: Use explicit "signed char" in test case.
Martin Liska [Thu, 5 May 2022 11:25:16 +0000 (13:25 +0200)]
libsanitizer: update LOCAL_PATCHES.
libsanitizer/ChangeLog:
* LOCAL_PATCHES: Update.
Martin Liska [Thu, 5 May 2022 10:52:44 +0000 (12:52 +0200)]
libsanitizer: Apply local patches
Martin Liska [Thu, 5 May 2022 10:51:36 +0000 (12:51 +0200)]
Richard Biener [Wed, 27 Apr 2022 11:48:49 +0000 (13:48 +0200)]
Embed real_value into REAL_CST
The following removes the indirection to real_value from REAL_CST
which doesn't seem to serve any useful purpose. Any sharing can
be achieved by sharing the actual REAL_CST (which is what usually
happens when copying trees) and sharing of real_value amongst
different REAL_CST doesn't happen as far as I can see and would
only lead to further issues like mismatching type and real_value.
2022-04-27 Richard Biener <rguenther@suse.de>
* tree-core.h (tree_real_cst::real_cst_ptr): Remove pointer
to real_value field.
(tree_real_cst::value): Add real_value field.
* tree.h (TREE_REAL_CST_PTR): Adjust.
* tree.cc (build_real): Remove separate allocation.
* tree-streamer-in.cc (unpack_ts_real_cst_value_fields):
Likewise.
gcc/cp/
* module.cc (trees_in::core_vals): Remove separate allocation
for REAL_CST.
Richard Biener [Mon, 4 Apr 2022 09:29:14 +0000 (11:29 +0200)]
rewrite undefined overflow to defined in ifcombine
When we make stmts to execute unconditionally in ifcombine we have
to make sure to rewrite stmts that can invoke undefined behavior
on overflow into a form with defined overflow. That's possible
for all but signed division for which we have to avoid the transform.
2022-04-04 Richard Biener <rguenther@suse.de>
* tree-ssa-ifcombine.cc (bb_no_side_effects_p): Avoid executing
divisions with undefined overflow unconditionally.
(pass_tree_ifcombine::execute): Rewrite stmts with undefined
overflow to defined.
Richard Biener [Thu, 5 May 2022 08:41:08 +0000 (10:41 +0200)]
testsuite/105486 - adjust testcase to avoid misaligned accesses
This properly aligns data, increasing test coverage.
2022-05-05 Richard Biener <rguenther@suse.de>
PR testsuite/105486
* gcc.dg/vect/bb-slp-pr104240.c: Align all data.
Richard Biener [Thu, 5 May 2022 07:34:59 +0000 (09:34 +0200)]
tree-optimization/105484 - VEC_SET and EH
When the IL representation of VEC_SET is marked as throwing
(unnecessarily), we need to clean that when replacing it with
the .VEC_SET internal function call which cannot throw.
2022-05-05 Richard Biener <rguenther@suse.de>
PR tree-optimization/105484
* gimple-isel.cc (gimple_expand_vec_set_expr): Clean EH, return
whether the CFG changed.
(gimple_expand_vec_exprs): When the CFG changed, clean it up.
* gcc.dg/torture/pr105484.c: New testcase.
Richard Biener [Mon, 21 Feb 2022 10:05:58 +0000 (11:05 +0100)]
tree-optimization/104595 - vectorization of COND_EXPR with bool load
The following fixes an omission in bool pattern detection that
makes it fail when check_bool_pattern fails for COND_EXPR. That's
not what it should do, instead it should still pattern recog
to var != 0 even if no further adjustments to the def chain are
necessary when var is not a mask already.
2022-02-21 Richard Biener <rguenther@suse.de>
PR tree-optimization/104595
* tree-vect-patterns.cc (vect_recog_bool_pattern): For
COND_EXPR do not fail if check_bool_pattern returns false.
* gcc.dg/vect/pr104595.c: New testcase.
Kewen Lin [Thu, 5 May 2022 05:14:31 +0000 (00:14 -0500)]
MAINTAINERS: Add myself as PowerPC port co-maintainer
Add myself as PowerPC port co-maintainer and to DCO section.
ChangeLog:
* MAINTAINERS: Add myself as PowerPC port co-maintainer and to DCO
section.
GCC Administrator [Thu, 5 May 2022 00:16:29 +0000 (00:16 +0000)]
Daily bump.
H.J. Lu [Wed, 4 May 2022 22:59:49 +0000 (15:59 -0700)]
libsanitizer: cherry-pick commit
f52e365092aa from upstream
cherry-pick:
f52e365092aa [sanitizer] Use newfstatat for x32
Jason Merrill [Tue, 26 Apr 2022 22:32:51 +0000 (18:32 -0400)]
c++: alias CTAD refactoring [PR104470]
In my previous PR104470 patch I added yet another place that needs to handle
dependent member rewriting for deduction guides; this patches centralizes
rewriting into maybe_dependent_member_ref. tsubst_baselink still has its
own handling because that's simpler than teaching maybe_dependent_member_ref
about BASELINKs.
PR c++/104470
gcc/cp/ChangeLog:
* pt.cc (maybe_dependent_member_ref): Handle types.
(tsubst, tsubst_copy): Use it.
(tsubst_aggr_type, instantiate_alias_template): Don't handle
tf_dguide here.
Patrick Palka [Wed, 4 May 2022 21:08:08 +0000 (17:08 -0400)]
c++: ICE during aggr CTAD for member tmpl [PR105476]
Here we're crashing from maybe_aggr_guide ultimately because
processing_template_decl isn't set when partially instantiating the
guide's parameter list; this causes us to force completion of the
dependent type Visitor_functior<Fn>, which of course fails and results
in an unexpected error_mark_node (the instantation should always succeed).
PR c++/105476
gcc/cp/ChangeLog:
* pt.cc (maybe_aggr_guide): Set processing_template_decl when
partially instantiating the guide's parameter list.
gcc/testsuite/ChangeLog:
* g++.dg/cpp2a/class-deduction-aggr13.C: New test.
* g++.dg/cpp2a/class-deduction-aggr13a.C: New test.
Marek Polacek [Wed, 30 Mar 2022 20:59:33 +0000 (16:59 -0400)]
c-family: Tweak -Woverflow diagnostic
When g++ emits
warning: overflow in conversion from 'int' to 'char' changes value from '300' to '',''
for code like "char c = 300;" it might raise a few eyebrows. With this
warning we're not interested in the ASCII representation of the char, only
the numerical value, so convert constants of type char to int. It looks
like this conversion only needs to be done for char_type_node.
gcc/c-family/ChangeLog:
* c-warn.cc (warnings_for_convert_and_check): Convert constants of type
char to int.
gcc/testsuite/ChangeLog:
* c-c++-common/Wconversion-1.c: New test.
Marek Polacek [Fri, 29 Apr 2022 19:01:12 +0000 (15:01 -0400)]
c++: wrong parse with functors [PR64679]
Consider
struct F {
F(int) {}
F operator()(int) const { return *this; }
};
and
F(i)(0)(0);
where we're supposed to first call the constructor and then invoke
the operator() twice. However, we parse this as an init-declarator:
"(i)" looks like a perfectly valid declarator, then we see an '(' and
think it must be an initializer, so we commit and we're toast. My
fix is to look a little bit farther before deciding we've seen an
initializer.
This is only a half of c++/64679, the other part of the PR is unrelated:
there the problem is that we are calling pushdecl while parsing
tentatively (in cp_parser_parameter_declaration_list), which is bad.
PR c++/64679
gcc/cp/ChangeLog:
* parser.cc (cp_parser_init_declarator): Properly handle a series of
operator() calls, they are not part of an init-declarator.
gcc/testsuite/ChangeLog:
* g++.dg/parse/functor1.C: New test.
Jason Merrill [Mon, 21 Mar 2022 13:58:28 +0000 (09:58 -0400)]
c++: optimize reshape_init
If the index of a constructor_elt is a FIELD_DECL, the CONSTRUCTOR is
already reshaped, so we can save time and memory by returning immediately.
gcc/cp/ChangeLog:
* decl.cc (reshape_init): Shortcut already-reshaped init.
(reshape_init_class): Assert not getting one here.
Jason Merrill [Fri, 18 Jun 2021 09:45:02 +0000 (05:45 -0400)]
c++: use %D more
There's no reason to call cxx_printable_name_translate here instead of using
%D in the format string.
gcc/cp/ChangeLog:
* error.cc (cp_print_error_function): Use %qD.
(function_category): Use %qD.
Tobias Burnus [Wed, 4 May 2022 16:39:28 +0000 (18:39 +0200)]
libgomp/plugin/plugin-gcn.c: Use -foffload-options= in err msg
While -foffload=-<flag> works (never documented legacy feature),
the documented way is to use -foffload-options=.
libgomp/ChangeLog:
* plugin/plugin-gcn.c (isa_matches_agent): Suggest -foffload-options.
Joseph Myers [Wed, 4 May 2022 16:33:35 +0000 (16:33 +0000)]
Update cpplib es.po
* es.po: Update.
Tobias Burnus [Wed, 4 May 2022 16:18:44 +0000 (18:18 +0200)]
OpenMP: Fix use_device_{addr,ptr} with in-data-sharing arg
For array-descriptor vars, the descriptor is assigned to a temporary. However,
this failed when the clause's argument was in turn in a data-sharing clause
as the outer context's VALUE_EXPR wasn't used.
gcc/ChangeLog:
* omp-low.cc (lower_omp_target): Fix use_device_{addr,ptr} with list
item that is in an outer data-sharing clause.
libgomp/ChangeLog:
* testsuite/libgomp.fortran/use_device_addr-5.f90: New test.
Marek Polacek [Fri, 29 Apr 2022 21:03:41 +0000 (17:03 -0400)]
c++: parse error with >= in template argument list [PR105436]
This patch fixes an oversight whereby we treated >= as the end of
a template argument. This causes problems in C++14, because in
cp_parser_template_argument we go different ways for C++14 and C++17:
/* It must be a non-type argument. In C++17 any constant-expression is
allowed. */
if (cxx_dialect > cxx14)
goto general_expr;
so in this testcase in C++14 we get "N" as the template argument but in
C++17 it is the whole "N >= 5" expression. So in C++14 the remaining
">= 5" triggered the newly-added diagnostic.
PR c++/105436
gcc/cp/ChangeLog:
* parser.cc (cp_parser_next_token_ends_template_argument_p): Don't
return true for CPP_GREATER_EQ.
gcc/testsuite/ChangeLog:
* g++.dg/parse/template31.C: New test.
Jonathan Wakely [Wed, 27 Apr 2022 15:09:06 +0000 (16:09 +0100)]
libstdc++: Add always_inline to the simplest std::array accessors [PR104719]
libstdc++-v3/ChangeLog:
PR libstdc++/104719
* include/std/array (array::size(), array::max_size())
(array::empty(), array::data()): Add always_inline attribute.
Jonathan Wakely [Fri, 25 Mar 2022 10:28:28 +0000 (10:28 +0000)]
libstdc++: Simplify std::array accessors [PR104719]
This removes the __array_traits::_S_ref and __array_traits::_S_ptr
accessors, which only exist to make the special case of std::array<T, 0>
syntactically well-formed.
By changing the empty type used as the std::array<T, 0>::_M_elems data
member to support operator[] and conversion to a pointer, we can write
code using the natural syntax. The indirection through _S_ref and
_S_ptr is removed for the common case, and a function call is only used
for the special case of zero-size arrays.
The invalid member access for zero-sized arrays is changed to use
__builtin_trap() instead of a null dereference. This guarantees a
runtime error if it ever gets called, instead of undefined behaviour
that is likely to get optimized out as unreachable.
libstdc++-v3/ChangeLog:
PR libstdc++/104719
* include/std/array (__array_traits::_S_ref): Remove.
(__array_traits::_S_ptr): Remove.
(__array_traits<T, 0>::_Type): Define operator[] and operator T*
to provide an array-like API.
(array::_AT_Type): Remove public typeef.
(array::operator[], array::at, array::front, array::back): Use
index operator to access _M_elems instead of _S_ref.
(array::data): Use implicit conversion from _M_elems to pointer.
(swap(array&, array&)): Use __enable_if_t helper.
(get<I>): Use index operator to access _M_elems.
* testsuite/23_containers/array/tuple_interface/get_neg.cc:
Adjust dg-error line numbers.
Jason Merrill [Fri, 25 Feb 2022 14:58:47 +0000 (09:58 -0500)]
c++: Remove cdtor_label
Jakub pointed out that cdtor_label is unnecessary, we should get all the
desired semantics with a normal return.
gcc/cp/ChangeLog:
* cp-tree.h (struct language_function): Remove x_cdtor_label.
(cdtor_label, LABEL_DECL_CDTOR): Remove.
* constexpr.cc (returns): Don't check LABEL_DECL_CDTOR.
(cxx_eval_constant_expression): Don't call returns.
* decl.cc (check_goto): Don't check cdtor_label.
(start_preparsed_function): And don't set it.
(finish_constructor_body, finish_destructor_body): Remove.
(finish_function_body): Don't call them.
* typeck.cc (check_return_expr): Handle cdtor_returns_this here.
* semantics.cc (finish_return_stmt): Not here.
Richard Biener [Tue, 22 Feb 2022 15:02:27 +0000 (16:02 +0100)]
tree-optimization/104658 - avoid mixing mask & non-mask vector defs
When pattern recognition fails to sanitize all defs of a mask
producing operation and the respective def is external or constant
we end up trying to produce a VECTOR_BOOLEAN_TYPE_P constructor
which in turn ends up exposing stmts like
<signed-boolean:1> _135 = _49 ? -1 : 0;
which isn't handled well in followup SLP and generates awful code.
We do rely heavily on pattern recognition to sanitize mask vs.
data uses of bools but that fails here which means we also should
fail vectorization. That avoids ICEing because of such stmts
and it also avoids generating weird code which makes the
vectorization not profitable.
The following patch simply disallows external VECTOR_BOOLEAN_TYPE_P
defs and arranges the promote to external code to instead promote
mask uses to extern (that's just a short-cut here).
I've also looked at aarch64 and with SVE and a fixed vector length
for the gcc.target/i386/pr101636.c testcase. I see similar vectorization
(using <signed-boolean:4>) there but it's hard to decide whether the
old, the new or no vectorization is better for this. The code
generated with traditional integer masks isn't as awkward but we
still get the != 0 promotion done for each scalar element which
doesn't look like intended - this operation should be visible upfront.
That also means some cases will now become a missed optimization
that needs to be fixed by bool pattern recognition. But that can
possibly be delayed to GCC 13.
2022-02-22 Richard Biener <rguenther@suse.de>
PR tree-optimization/104658
* tree-vect-slp.cc (vect_slp_convert_to_external): Do not
create VECTOR_BOOLEAN_TYPE_P extern defs. Reset the vector
type on nodes we promote.
(vectorizable_bb_reduc_epilogue): Deal with externalized
root.
* tree-vect-stmts.cc (vect_maybe_update_slp_op_vectype): Do
not allow VECTOR_BOOLEAN_TYPE_P extern defs.
* gcc.target/i386/pr104658.c: New testcase.
Richard Biener [Wed, 4 May 2022 08:43:07 +0000 (10:43 +0200)]
tree-optimization/103116 - SLP permutes and peeling for gaps
The testcase shows that we can end up with a contiguous access across
loop iterations but by means of permutations the elements accessed
might only cover parts of a vector. In this case we end up with
GROUP_GAP == 0 but still need to avoid accessing excess elements
in the last loop iterations. Peeling for gaps is designed to cover
this but a single scalar iteration might not cover all of the excess
elements. The following ensures peeling for gaps is done in this
situation and when that isn't sufficient because we need to peel
more than one iteration (gcc.dg/vect/pr103116-2.c), fail the SLP
vectorization.
2022-05-04 Richard Biener <rguenther@suse.de>
PR tree-optimization/103116
* tree-vect-stmts.cc (get_group_load_store_type): Handle the
case we need peeling for gaps even though GROUP_GAP is zero.
* gcc.dg/vect/pr103116-1.c: New testcase.
* gcc.dg/vect/pr103116-2.c: Likewise.
Martin Liska [Wed, 4 May 2022 12:48:53 +0000 (14:48 +0200)]
Remove dead code.
gcc/ChangeLog:
* gengtype-state.cc (read_a_state_token): Remove dead code.
* ipa-profile.cc (ipa_profile_read_summary_section): Likewise.
Richard Biener [Fri, 25 Mar 2022 07:43:45 +0000 (08:43 +0100)]
Fold more vector constants early
In PR105049 we had
return VIEW_CONVERT_EXPR<U>( VEC_PERM_EXPR < {<<< Unknown tree: compound_literal_expr
V D.1984 = { 0 }; >>>, { 0 }} , {<<< Unknown tree: compound_literal_expr
V D.1985 = { 0 }; >>>, { 0 }} , { 0, 0 } > & {(short int) SAVE_EXPR <c>, (short int) SAVE_EXPR <c>});
where we gimplify the init CTORs to
_1 = {{ 0 }, { 0 }};
_2 = {{ 0 }, { 0 }};
instead of to vector constants. The following makes sure to simplify the
CTORs to VECTOR_CSTs during gimplification by re-ordering the simplification
to after CTOR flag recomputation and gimplification of the elements.
2022-03-25 Richard Biener <rguenther@suse.de>
* gimplify.cc (gimplify_init_constructor): First gimplify,
then simplify the result to a VECTOR_CST.
Jakub Jelinek [Wed, 4 May 2022 10:01:56 +0000 (12:01 +0200)]
genconditions: Add support for targets without non-trivial insn conditions
Somebody complained on IRC that when writing a new backend one can get
an error while compiling build/gencondmd.cc.
The problem is that when host compiler is g++ 3 or later (or when
bootstrapping), we compile it with g++ -std=c++11 -pedantic and
the generated insn_conditions array contains pairs
{ "cond", __builtin_constant_p (cond) ? (int) (cond) : -1 },
where cond is some non-trivial instruction condition. Now if a target
uses "" for all the conditions (admittedly unlikely for non-trivial
target), the initializer for insn_conditions[] is {} and that is
pedantically rejected because C++ doesn't support zero-sized arrays.
The following patch fixes that by adding an artificial termination
element and skips that during the walk.
2022-05-04 Jakub Jelinek <jakub@redhat.com>
* genconditions.cc (write_conditions): Append a { nullptr, -1 }
element at the end of insn_conditions.
(write_writer): Use ARRAY_SIZE (insn_conditions) - 1 instead of
ARRAY_SIZE (insn_conditions).
Martin Liska [Mon, 2 May 2022 11:58:49 +0000 (13:58 +0200)]
libsanitizer: update test that mixes fake and real stack
gcc/testsuite/ChangeLog:
* c-c++-common/asan/alloca_loop_unpoisoning.c: Do not combine
fake and real stack.
Martin Liska [Mon, 2 May 2022 11:20:06 +0000 (13:20 +0200)]
libsanitizer: Update Makefile.am files.
libsanitizer/ChangeLog:
* tsan/Makefile.am: Update Makefile.am files.
* hwasan/Makefile.am: Likewise.
* sanitizer_common/Makefile.am: Likewise.
* Makefile.in: Re-generate.
* asan/Makefile.in: Likewise.
* hwasan/Makefile.in: Likewise.
* interception/Makefile.in: Likewise.
* libbacktrace/Makefile.in: Likewise.
* lsan/Makefile.in: Likewise.
* sanitizer_common/Makefile.in: Likewise.
* tsan/Makefile.in: Likewise.
* ubsan/Makefile.in: Likewise.
H.J. Lu [Tue, 20 Jul 2021 17:46:51 +0000 (10:46 -0700)]
libsanitizer: Apply local patches
Martin Liska [Tue, 3 May 2022 10:56:26 +0000 (12:56 +0200)]
Christophe Lyon [Tue, 19 Apr 2022 15:34:04 +0000 (17:34 +0200)]
arm: Restrict support of vectors of boolean immediates (PR target/104662)
This simple patch avoids the ICE described in the PR:
internal compiler error: in simd_valid_immediate, at config/arm/arm.cc:12866
with an early exit from simd_valid_immediate if we are trying to
handle a vector of booleans and MVE is not enabled.
We still get an ICE when compiling the existing
gcc.dg/rtl/arm/mve-vxbi.c without -march=armv8.1-m.main+mve:
error: unrecognizable insn:
(insn 7 5 8 2 (set (reg:V4BI 114)
(const_vector:V4BI [
(const_int 1 [0x1])
(const_int 0 [0]) repeated x2
(const_int 1 [0x1])
])) -1
(nil))
during RTL pass: ira
but there's little we can do since the testcase explicitly creates
vectors of booleans which do need MVE.
That is the reason why I do not add a testcase.
2022-04-19 Christophe Lyon <christophe.lyon@arm.com>
PR target/104662
* config/arm/arm.cc (simd_valid_immediate): Exit when input is a
vector of booleans and MVE is not enabled.
Jakub Jelinek [Wed, 4 May 2022 08:07:36 +0000 (10:07 +0200)]
c++: Don't emit deprecated warnings or unavailable errors on lambda declarations
On the following testcase, we emit deprecated warnings or unavailable errors
even on merge declarations of those lambdas (the dg-bogus directives), while
IMHO we should emit them only when something actually calls those lambdas.
The following patch temporarily disables that diagnostics during
maybe_add_lambda_conv_op.
PR2173R1 also says that ambiguity between attribute-specifier-seq at the
end of requires-clause and attribute-specifier-seq from lambda-expression
should be resolved to attribute-specifier-seq for the latter. Do we need
to do anything about that? I mean, can a valid requires-clause end with
an attribute-specifier-seq? Say operator int [[]] is valid primary
expression, but requires operator int [[]] isn't valid, nor is
requires operator int, no?
2022-05-04 Jakub Jelinek <jakub@redhat.com>
* lambda.cc: Include decl.h.
(maybe_add_lambda_conv_op): Temporarily override deprecated_state to
UNAVAILABLE_DEPRECATED_SUPPRESS.
* g++.dg/cpp23/lambda-attr1.C: New test.
* g++.dg/cpp23/lambda-attr2.C: New test.
Martin Liska [Wed, 4 May 2022 07:57:17 +0000 (09:57 +0200)]
hwasan: support new dg-output format.
Supports change in libsanitizer where it newly reports:
READ of size 4 at 0xffffffffc3d4 tags: 02/01(00) (ptr/mem) in thread T0
So the 'tags' contains now 3 entries compared to 2 entries.
gcc/testsuite/ChangeLog:
* c-c++-common/hwasan/alloca-outside-caught.c: Update dg-output.
* c-c++-common/hwasan/heap-overflow.c: Likewise.
* c-c++-common/hwasan/hwasan-thread-access-parent.c: Likewise.
* c-c++-common/hwasan/large-aligned-1.c: Likewise.
* c-c++-common/hwasan/stack-tagging-basic-1.c: Likewise.
Richard Biener [Tue, 5 Apr 2022 13:23:54 +0000 (15:23 +0200)]
debug/105158 - improve debug stmt retaining for forwarder removal
Currently when we cannot move debug stmt from a forwarder to the
destination block we drop/reset them. But in some cases as for
the testcase we can move them to the predecessor when that has
a single successor and we can insert after the last stmt of the
block. That allows us to preserve debug info here.
2022-04-05 Richard Biener <rguenther@suse.de>
PR debug/105158
* tree-cfgcleanup.cc (move_debug_stmts_from_forwarder):
Move debug stmts to the predecessor if moving to the
destination is not possible.
(remove_forwarder_block): Adjust.
(remove_forwarder_block_with_phi): Likewise.
Martin Liska [Wed, 5 Jan 2022 09:10:19 +0000 (10:10 +0100)]
LTO plugin: modernize a bit.
include/ChangeLog:
* plugin-api.h (enum ld_plugin_tag): Do not set implicit enum
values.
lto-plugin/ChangeLog:
* lto-plugin.c (struct plugin_objfile): Use bool for offset
field.
(exec_lto_wrapper): Assign true/false to bool variables.
(process_offload_section): Likewise.
(claim_file_handler): Likewise.
(onload): Likewise.