Harald Anlauf [Sun, 18 Oct 2020 18:15:26 +0000 (20:15 +0200)]
PR libfortran/97063 - Wrong result for vector (step size is negative) * matrix
The MATMUL intrinsic provided a wrong result for rank-1 times rank-2 array
when a negative stride was used for addressing the elements of the rank-1
array, because a check on strides was erroneously placed before the check
on the rank. Interchange order of checks.
David Edelsohn [Fri, 16 Oct 2020 22:09:49 +0000 (18:09 -0400)]
testsuite: remove explicit -m32/-m64 from testcases
Two tests in the powerpc-specific testsuite explicitly add the -m32
and -m64 commandline options, which only are valid for Linux. And the
tests check for lp64 or ilp32, which is redundant. This patch removes
the unnecessary commandline options.
Harald Anlauf [Fri, 16 Oct 2020 20:17:46 +0000 (22:17 +0200)]
PR fortran/95979 - ICE in get_kind, at fortran/simplify.c:129
Simplification of the elemental intrinsic INDEX with constant array-valued
arguments failed with an ICE or did not reduce to a constant array, depending
also on the presence of the optional KIND argument. Add a further attempt of
simplification in the case of elemental intrinsics, and make sure the KIND
argument is not removed prematurely during simplification of INDEX.
gcc/fortran/ChangeLog:
PR fortran/95979
* expr.c (gfc_check_init_expr): Fix check of return code from
gfc_intrinsic_func_interface.
* intrinsic.c (gfc_intrinsic_func_interface): Add further attempt
of simplification of elemental intrinsics with array arguments.
* iresolve.c (gfc_resolve_index_func): Keep optional KIND argument
for simplification of elemental use of INDEX.
gcc/testsuite/ChangeLog:
PR fortran/95979
* gfortran.dg/index_4.f90: New test.
Nathan Sidwell [Fri, 16 Oct 2020 17:22:16 +0000 (10:22 -0700)]
c++: Fix nullptr deref [pr97460[
My changes to friend handling meant that there are now cases where a
friend doesn't get a lang-specific object. So we need to check there
is one before looking inside it.
Nathan Sidwell [Fri, 16 Oct 2020 16:22:22 +0000 (09:22 -0700)]
c++: Fix null deref at EOF [PR96258]
cp_parser_declaration peeks at 1 or 2 tokens, when I changed it not to
peek past EOF, I set the second token to NULL. But there are paths
through the function that just look at the second token. Fixed by
setting that token to EOF rather than NULL in this case.
PR c++/96258
gcc/cp/
* parser.c (cp_parser_declaration): Make token2 point to EOF if
token1 was EOF.
gcc/testsuite/
* g++.dg/parse/pr96258.C: New.
libgcc/
* config/gthr-vxworks.h: Condition the ___GTHREADS_CXX0X
section on VxWorks >= 6.
* config/gthr-vxworks-thread.c: Condition the entire
implementation on __GTHREAD_CXX0X.
libgcc/
* config/gthr-vxworks.h: Condition the __GTHREAD_HAS_COND
section on VxWorks >= 6.
* config/gthr-vxworks-cond.c: Condition the entire
implementation on __GTHREAD_HAS_COND.
Olivier Hainque [Thu, 15 Oct 2020 17:39:05 +0000 (17:39 +0000)]
Fix the vxworks crtstuff handling of kernel/rtp variations
The ports that support RTPs achieve the kernel/rtp compilation
and link distinction through the multilib mechanism.
This patch just removes the bogus explicit extraneous
materialization of this distinction in the common VxWorks
configuration files and leaves the rtp specialization all
to the multilib machinery.
2020-10-15 Olivier Hainque <hainque@adacore.com>
libgcc/
* config/t-vxcrtstuff: Remove the -kernel/-rtp specialization.
Olivier Hainque [Tue, 13 Oct 2020 09:53:30 +0000 (09:53 +0000)]
Allow self configured definition of _WRS_VXWORKS_MAJOR
This conditions the use of system headers to fetch a
_WRS_VXWORKS_MAJOR macro on the non definition of that
macro. This allows builds where a specific value is
predefined, e.g. with a self spec, useful in environments
where the system headers don't actually define that macro
(e.g. vxworks 5 or 653).
In addition, _WRS_VXWORKS_MINOR is only provided by the
system headers when really meaningful, e.g. from 6.4 to 6.9.
We just pick a conservative default to 0 for all the cases
where it is not exposed by the system headers or otherwise.
2020-10-15 Olivier Hainque <hainque@adacore.com>
gcc/
* config/vxworks/_vxworks-versions.h: Only include
version.h if _WRS_VXWORKS_MAJOR is not defined.
Provide a default _WRS_VXWORKS_MINOR (0).
arm: Fix the warning -mcpu=cortex-m55 conflicting with -march=armv8.1-m.main (pr97327).
This patch fixes (PR97327) the warning -mcpu=cortex-m55 conflicts with -march=armv8.1-m.main
for -mfloat-abi=soft by adding the isa_bit_mve_float to clearing FP bit list.
The following combination are fixed with this patch:
$ cat bug.c
int main(){
return 0;
}
Richard Biener [Wed, 14 Oct 2020 13:37:51 +0000 (15:37 +0200)]
Adjust BB vectorization SLP build heuristics
This changes SLP def gathering to not fail due to mismatched
def type but instead demote the def to external. This allows the
new testcase to be vectorized in full (with GCC 10 it is not
vectorized at all and with current trunk we vectorize only the
store). This is important since with BB vectorization being
applied to bigger pieces of code the chance that we mix
internal and external defs for an operand that should end up
treated as external (built from scalars) increases.
2020-10-16 Richard Biener <rguenther@suse.de>
* tree-vect-slp.c (vect_get_and_check_slp_defs): For BB
vectorization swap operands only if it helps, demote mismatches to
external.
With this patch:
...
foo:
vldrw.32 q3, [r0]
vstrw.u32 q0, [q3, #8]! --> (C)
vstrw.32 q3, [r0]
bx lr
...
Without this patch 2 vstrw assembly instructions (A and B) are generated for vstrwq_scatter_base_wb_s32
intrinsic where as fix generates only one vstrw assembly instruction (C).
Richard Biener [Wed, 14 Oct 2020 13:37:51 +0000 (15:37 +0200)]
Refactor vect_get_and_check_slp_defs some more
This refactors vect_get_and_check_slp_defs so that the ops and def_stmts
arrays are filled for all stmts and operands even when we signal failure.
This allows later changes for BB vectorization SLP discovery heuristics.
2020-10-16 Richard Biener <rguenther@suse.de>
* tree-vect-slp.c (vect_get_and_check_slp_defs): First analyze
all operands and fill in the def_stmts and ops entries.
(vect_def_types_match): New helper.
Bob Duff [Wed, 1 Jul 2020 20:22:46 +0000 (16:22 -0400)]
[Ada] Ada2020: parsing of qualified exprs with new agg syntax
gcc/ada/
* par-ch4.adb (P_Name): Allow Tok_Left_Bracket in two places to
call P_Qualified_Expression. We don't need to modify other
places that call P_Qualified_Expression, because a
qualified_expression is a name in Ada 2012 and higher, so P_Name
is the right place. The parser already parses aggregates with
brackets; we just need to allow that in qualified expressions.
Javier Miranda [Tue, 30 Jun 2020 18:20:09 +0000 (14:20 -0400)]
[Ada] Crash in generic renaming declaration of child unit
gcc/ada/
* sem_ch12.adb (Check_Generic_Child_Unit): When the child unit
is a renaming of a generic child unit then traverse the scope
containing the renaming declaration to locate the instance of
its parent. Otherwise the parent is not installed and the
frontend cannot process the instantiation.
Ed Schonberg [Mon, 29 Jun 2020 21:06:42 +0000 (17:06 -0400)]
[Ada] Attribute Img on derived types
gcc/ada/
* exp_imgv.adb (Expand_Image_Attribute): Use the base type
instead of the root type when type of object is private. Remove
Ada_2020 guard, because it has been checked during prior
analysis. Use Underlying_Type in all cases, as it is a no-op on
types that are not private.
Arnaud Charlet [Tue, 30 Jun 2020 07:49:34 +0000 (03:49 -0400)]
[Ada] Ada2020: AI12-0129 Make protected objects more protecting
gcc/ada/
* aspects.ads, snames.ads-tmpl: Add support for
Exclusive_Functions aspect.
* sem_ch13.adb (Analyze_Aspect_Specifications): Ditto.
* exp_ch9.adb (Build_Protected_Subprogram_Body): Take aspect
Exclusive_Functions into account.
Gary Dismukes [Tue, 30 Jun 2020 22:58:56 +0000 (18:58 -0400)]
[Ada] Legal actual type with inherited discriminants rejected in instantiation
gcc/ada/
* sem_eval.adb (Subtypes_Statically_Match): Retrieve
discriminant constraints from the two types via new function
Original_Discriminant_Constraint rather than
Discriminant_Constraint.
(Original_Discriminant_Constraint): New function to locate the
nearest explicit discriminant constraint associated with a type
that may possibly have inherited a constraint from an ancestor
type.
Chris Martin [Tue, 16 Jun 2020 09:16:06 +0000 (10:16 +0100)]
[Ada] Constants no longer synchronised if they are access-to-variable
gcc/ada/
* sem_util.ads, sem_util.adb (Is_Access_Variable): New function.
(Is_Synchronized_Object): Call new function when determining if
a constant can be regarded as synchronized.
Arnaud Charlet [Sun, 28 Jun 2020 10:24:26 +0000 (06:24 -0400)]
[Ada] Finalization of uninitialized object with build in place call
gcc/ada/
* exp_ch6.adb (Make_Build_In_Place_Call_In_Object_Declaration):
Call Set_BIP_Initialization_Call systematically.
* exp_ch7.adb (Process_Transient_In_Scope): Take
BIP_Initialization_Call into account to decide where to insert
the Hook.
Ed Schonberg [Sun, 28 Jun 2020 19:11:33 +0000 (15:11 -0400)]
[Ada] Improvements to implementation of Ada_2020 attribute Reduce
gcc/ada/
* sem_attr.adb (Min_Max): Handle the case where attribute
name (qualified by required type) appears as the reducer of a
'Reduce attribute reference.
(Resolve_Attribute) <Reduce>: Handle properly the presence of a
procedure or an attribute reference Min/Max as a reducer.
* exp_attr.adb (Expand_Attribute_Reference) <Reduce>: New
subprogram Build_Stat, to construct the combining statement
which appears in the generated loop for Reduce, and which is
either a function call when the reducer is a function or an
attribute, or a procedure call when reducer is an appropriate
procedure. BuilD_Stat is used both when the prefix of 'Reduce
is a value sequence and when it is an object
Ed Schonberg [Thu, 25 Jun 2020 20:44:27 +0000 (16:44 -0400)]
[Ada] Spurious visibility error on Declare_Expression with renames
gcc/ada/
* sem_res.adb (Resolve_Declare_Expression): Retrieve the created
block entity that is the scope of the local declarations, from
either a local object declaration or an object renaming
declaration. The block entity does not have an explicit
declaration, but appears as the scope of all locally declared
objects.
Piotr Trojanek [Thu, 25 Jun 2020 13:42:23 +0000 (15:42 +0200)]
[Ada] Cleanup related to itypes for unconstrained object declaration
gcc/ada/
* sem_ch3.adb (Analyze_Object_Declaration): Limit scope of a
local object by hiding it from local subprograms; simplify
nested if-then-if-then condition for an Ada 83 restriction.
(Array_Type_Declaration): Confirm with assertion when the else
branch is executed.
(Find_Type_Of_Object): Simplify membership test with a subtype
range.
Yannick Moy [Tue, 2 Jun 2020 16:24:16 +0000 (18:24 +0200)]
[Ada] SPARK: update for effectively volatile types and objects
gcc/ada/
* sem_prag.adb (Analyze_Global_In_Decl_Part): Update check to
reject volatile object for reading.
* sem_res.adb (Resolve_Actuals, Resolve_Entity_Name): Update
check to reject volatile object for reading.
* sem_util.adb, sem_util.ads
(Check_Nonvolatile_Function_Profile,
Has_Effectively_Volatile_Profile): Detect use of volatile object
for reading.
(Has_Enabled_Property): Accept constants as well.
(Is_Effectively_Volatile_For_Reading): New function based on
existing Is_Effectively_Volatile.
(Is_Effectively_Volatile_Object_For_Reading): Adapted from the
existing Is_Effectively_Volatile_Object, using a shared
implementation in Is_Effectively_Volatile_Object_Shared.
Gary Dismukes [Wed, 24 Jun 2020 21:22:58 +0000 (17:22 -0400)]
[Ada] GNAT-LLVM unnesting issues in elaboration code
gcc/ada/
* exp_ch7.adb (Check_Unnesting_In_Decls_Or_Stmts): In the case
of an if-statement, call Unnest_If_Statement to determine
whether there are nested subprograms in any of the statement
lists of the "if" parts that require a wrapping procedure to
handle possible up-level refeferences.
(Unnest_Block): Call Check_Unnesting_In_Handlers to do unnesting
of subprograms in exception handlers of the block statement.
(Unnest_If_Statement): New procedure to traverse the parts of an
if-statement and create wrapper procedures as needed to
encapsulate nested subprograms that may make up-level
references.
(Check_Stmts_For_Subp_Unnesting): New support procedure in
Unnest_If_Statement to traverse a statement list looking for
top-level subprogram bodies that require wrapping inside a
procedure (via Unnest_Statement_List) as well as possibly having
other statements (block, loop, if) that may themselves require
an unnesting transformation (via
Check_Unnesting_In_Decls_Or_Stmts).
(Unnest_Statement_List): New support procedure to traverse the
statements of a statement list that contains subprogram bodies
at the top level and replace the statement list with a wrapper
procedure body encapsulating the statements and a call to the
procedure.
Piotr Trojanek [Thu, 25 Jun 2020 12:37:44 +0000 (14:37 +0200)]
[Ada] Fix documentation of No_Local_Timing_Events
gcc/ada/
* doc/gnat_rm/standard_and_implementation_defined_restrictions.rst
(No_Local_Timing_Events): Package Timing_Events is a child of
Ada.Real_Time, not of Ada.
* gnat_rm.texi: Regenerate.
Eric Botcazou [Tue, 23 Jun 2020 10:49:04 +0000 (12:49 +0200)]
[Ada] Add Max_Integer_Size attribute and couple of helper functions
gcc/ada/
* doc/gnat_rm/implementation_defined_attributes.rst: Document the
new Max_Integer_Size attribute.
* gnat_rm.texi: Regenerate.
* exp_attr.adb (Get_Integer_Type): Call Small_Integer_Type_For.
(Expand_N_Attribute_Reference) <Attribute_Pred>: Replace selection
code with call to Integer_Type_For.
<Attribute_Succ>: Likewise.
<Attribute_Val>: Likewise.
<Attribute_Valid>: Likewise.
<Attribute_Max_Integer_Size>: Raise Program_Error.
* exp_ch3.adb (Expand_Freeze_Enumeration_Type): Replace selection
code with call to Integer_Type_For.
(Simple_Init_Initialize_Scalars_Type): Use Long_Long_Unsigned and
System_Max_Integer_Size to size the largest integer type.
* exp_pakd.adb (Compute_Linear_Subscript): Minor tweak.
(Create_Packed_Array_Impl_Type): Use Small_Integer_Type_For.
* exp_util.ads (Integer_Type_For): New function.
(Small_Integer_Type_For): Likewise.
* exp_util.adb (Adjust_Condition): Use Integer_Type_For.
(Component_May_Be_Bit_Aligned): Use System_Max_Integer_Size.
(Integer_Type_For): New function.
(Small_Integer_Type_For): Likewise.
(Matching_Standard_Type): Use Small_Integer_Type_For.
(Needs_Constant_Address): Replace 64 with System_Max_Integer_Size.
* freeze.adb (Set_Small_Size): Likewise.
(Size_Known): Likewise.
(Check_Suspicious_Modulus): Likewise.
(Check_Large_Modular_Array): Likewise.
(Freeze_Entity): Likewise.
* layout.adb (Layout_Type): Likewise.
* sem_aggr.adb: Add with and use clauses for Ttypes.
(Resolve_Aggregate): Replace 64 with System_Max_Integer_Size.
* sem_attr.ads (Attribute_Impl_Def): Add Attribute_Max_Integer_Size.
* sem_attr.adb (Analyze_Attribute) <Attribute_Max_Integer_Size>: New
(Eval_Attribute): Likewise.
* sem_ch13.adb (Adjust_Record_For_Reverse_Bit_Order): Change max
scalar size to System_Max_Integer_Size.
(Check_Array_Type): Replace 64 with System_Max_Integer_Size and
remove superfluous test.
(OK_Component): Likewise.
* sem_ch5.adb: Add with and use clauses for Ttypes.
(Analyze_Assignment): Replace 64 with System_Max_Integer_Size.
* snames.ads-tmpl (Name_Max_Integer_Size): New attribute name.
(Attribute_Id): Add Attribute_Max_Integer_Size.
* ttypes.ads (System_Max_Integer_Size): New constant.
Richard Biener [Thu, 15 Oct 2020 09:55:53 +0000 (11:55 +0200)]
tree-optimization/97428 - split SLP groups for loop vectorization
This enables SLP store group splitting also for loop vectorization.
For the existing testcase gcc.dg/vect/vect-complex-5.c this then
generates much better code, likewise for the PR97428 testcase.
Both of those have a splitting opportunity splitting the group
into two equal (vector-sized) halves, still the patch enables
quite arbitrary splitting since generally the interleaving scheme
results in quite awkward code for even small groups. If any
problems surface with this it's easy to restrict the splitting
to known-good cases.
2020-10-15 Richard Biener <rguenther@suse.de>
PR tree-optimization/97428
* tree-vect-slp.c (vect_analyze_slp_instance): Split store
groups also for loop vectorization.
* gcc.dg/vect/vect-complex-5.c: Expect to SLP.
* gcc.dg/vect/pr97428.c: Likewise.
Ian Lance Taylor [Thu, 15 Oct 2020 22:34:14 +0000 (15:34 -0700)]
compiler: don't export function type parameter names
When hashing a function type the parameter names are ignored.
Therefore, we should not write them into the export data.
Otherwise, minor changes in the order in which we process the
types can cause the export data to change uselessly, leading to
unnecessary rebuilds.
Nikhil Benesch [Wed, 14 Oct 2020 19:02:12 +0000 (19:02 +0000)]
runtime: use correct types in __go_ptrace shim
Make the types of the addr and data arguments in the __go_ptrace shim
match the types declared in Go and the types declared by the C ptrace
function, i.e., void*. This avoids a warning about an implicit
int-to-pointer cast on some platforms.
Jason Merrill [Thu, 15 Oct 2020 16:54:16 +0000 (12:54 -0400)]
c++: Fix [[deprecated]] and implicit operator==. [PR97358]
Trying to diagnose the problem with an implicit copy function breaks if the
function isn't actually a copy function.
gcc/cp/ChangeLog:
PR c++/95844
* decl.c (copy_fn_p): Return false for a function that is neither a
constructor nor an assignment operator.
(move_signature_fn_p): Likewise.
gcc/testsuite/ChangeLog:
PR c++/95844
* g++.dg/cpp2a/spaceship-eq10.C: New test.
Richard Biener [Thu, 15 Oct 2020 08:58:41 +0000 (10:58 +0200)]
Fix ICE in vectorizable_live_operation
This fixes the case where the insertion iterator for the live stmt
is the end of a BB by adjusting the dominance query to the definition
of the def we're substituting.
Arnaud Charlet [Tue, 23 Jun 2020 14:39:12 +0000 (10:39 -0400)]
[Ada] Spurious visibility on private with package
gcc/ada/
* sem_ch10.adb (Install_With_Clause): Fix implementation of Ada
2005 AI-262 by taking into account generic packages. Minor
reformatting.
* libgnat/a-cbhase.ads, libgnat/a-cbhase.adb: Remove use clause
on runtime unit spec.
Javier Miranda [Wed, 24 Jun 2020 19:05:14 +0000 (15:05 -0400)]
[Ada] Ada2020: AI12-0003 Specifying the standard storage pool
gcc/ada/
* sem_prag.adb (Analyze_Pragma): Adding semantic support of
Standard to Default_Storage_Pool.
* freeze.adb (Freeze_Entity): If pragma Default_Storage_Pool
applies and it is set to Standard then use the global pool as
the associated storage pool of the access type.
Steve Baird [Tue, 23 Jun 2020 23:12:36 +0000 (16:12 -0700)]
[Ada] Get finalization right when a function returns a function call
gcc/ada/
* checks.adb (Apply_Predicate_Check): Generate "infinite
recursion" warning message even if run-time predicate checking
is disabled.
* exp_ch6.adb (Expand_Simple_Function_Return): In testing
whether the returned expression is a function call, look for the
case where the call has been transformed into a dereference of
an access value that designates the result of a function call.
* sem_ch3.adb (Analyze_Object_Declaration): Legality checking
for a static expression is unaffected by assertion policy (and,
in particular, enabling/disabling of subtype predicates. To get
the right legality checking, we need to call
Check_Expression_Against_Static_Predicate for a static
expression even if predicate checking is disabled for the given
predicate-bearing subtype. On the other hand, we don't want to
call Make_Predicate_Check unless predicate checking is enabled.
* sem_ch7.adb (Uninstall_Declarations.Preserve_Full_Attributes):
Preserve the Predicates_Ignored attribute.
* sem_eval.adb (Check_Expression_Against_Static_Predicate):
Previously callers ensured that this procedure was only called
if predicate checking was enabled; that is no longer the case,
so predicates-disabled case must be handled.
* sem_prag.adb (Analyze_Pragma): Fix bug in setting
Predicates_Ignored attribute in Predicate pragma case.
Ed Schonberg [Wed, 24 Jun 2020 17:24:49 +0000 (13:24 -0400)]
[Ada] Crash on subtype of fixed-point type
gcc/ada/
* freeze.adb (Freeze_Fixed_Point_Type): Do not scale the bounds
of a declared subtype using the 'Small of the type; this is
done during resolution of the bound itself, unlike what is done
for the bounds of the base type, which are used to determine its
required size. Previous code performed this scaling twice,
leading to meaningless values for such a subtype.
Piotr Trojanek [Tue, 23 Jun 2020 17:50:18 +0000 (19:50 +0200)]
[Ada] Avoid unnecessary (re)assignments in Make_Info
gcc/ada/
* sem_ch3.adb (Array_Type_Declaration): Refine type of a local
variable.
(Make_Index): Simplify to avoid assignment with a type entity
and then backtracking by reassigning to Empty; remove excessive
whitespace.
* sem_ch9.adb (Analyze_Entry_Body): Remove extra parens.
Arnaud Charlet [Mon, 22 Jun 2020 10:18:14 +0000 (06:18 -0400)]
[Ada] Double evaluation of predicate
gcc/ada/
* sem_ch13.adb (Add_Predicates): Prevent analyzing twice the
same pragma in case an inner package references the type with a
predicate (as opposed to defining the type).