gcc/ChangeLog:
2018-09-27 Andreas Krebbel <krebbel@linux.ibm.com>
* config/s390/s390.md (PPA_TX_ABORT, PPA_OOO_BARRIER): New
constant definitions.
("tx_assist"): Replace magic number with PPA_TX_ABORT.
("*ppa"): Enable pattern also for -march=zEC12 -mno-htm.
("speculation_barrier"): New expander definition.
From-SVN: r264663
In C11, implicit conversions from integer to floating-point types
produce results with the range and precision of the corresponding
evaluation format rather than only those of the type implicitly
converted to. This patch implements that case of C11 excess precision
semantics in the case of a comparison between integer and
floating-point types, previously missed when implementing other cases
of excess precision for such implicit conversions. As with other such
fixes, this patch conservatively follows the reading of C99 where
conversions from integer to floating-point do not produce results with
excess precision and so the change is made for C11 mode only.
Bootstrapped with no regressions on x86_64-pc-linux-gnu.
gcc/c:
PR c/87390
* c-typeck.c (build_binary_op): Use excess precision for
comparisons of integers and floating-point for C11 and later.
gcc/testsuite:
PR c/87390
* gcc.target/i386/excess-precision-9.c,
gcc.target/i386/excess-precision-10.c: New tests.
From-SVN: r264656
PR target/87414
* config/i386/i386.c: Include debug.h and dwarf2out.h.
(output_indirect_thunk): Emit DW_CFA_def_cfa_offset after the
call.
From-SVN: r264651
Ensure that the address really is the correct mode for an address.
2018-09-25 Andrew Stubbs <ams@codesourcery.com>
gcc/
* builtins.c (get_builtin_sync_mem): Force address mode conversion.
From-SVN: r264650
On Alpha GNU/Linux there is no geteuid system call, there is only
getresuid. The raw geteuid system call is only used for testing, so
just skip the test if it's not available.
Reviewed-on: https://go-review.googlesource.com/137655
From-SVN: r264647
2018-09-26 Alexey Neyman <stilor@att.net>
* graphite.h: Include <isl/id.h> and <isl/space.h>; these
headers are no longer pulled in by <isl/val.h>.
From-SVN: r264644
2018-09-26 Richard Biener <rguenther@suse.de>
PR debug/87443
* dwarf2out.c (gen_lexical_block_die): Do not equate inline
or concrete instance DIE to the tree. Create abstract origin
attributes also for concrete instances.
* gcc.dg/debug/dwarf2/inline5.c: New testcase.
From-SVN: r264643
2018-09-26 Martin Jambor <mjambor@suse.cz>
PR c/87347
c/
* c-parser.c (warn_for_abs): Bail out if TYPE_ARG_TYPES is NULL. Fix
comment.
testsuite/
* gcc.dg/pr87347.c: New test.
From-SVN: r264640
When a representation item is defined by a pragma or attribute
definition clause, the entity it applies to is that of the Name of the
representation item. But when it is defined by an aspect definition, the
entity is directly denoted by the Entity attribute of the represenation
item. The circuitry that inherits representation items for derived types
or subtypes must account for these two possible cases.
2018-09-26 Thomas Quinot <quinot@adacore.com>
gcc/ada/
* sem_ch13.adb (Inherit_Aspects_At_Freeze_Point): For a
representation item that is an N_Aspect_Definition, retrieve the
entity it applies to using the Entity attribute.
gcc/testsuite/
* gnat.dg/sso13.adb: New testcase.
From-SVN: r264636
This patch fixes an issue whereby user-defined subprograms used as
generic actuals with corresponding formals containing other formal types
led to spurious ineffective use_clause warnings.
2018-09-26 Justin Squirek <squirek@adacore.com>
gcc/ada/
* sem_ch8.adb (Analyze_Subprogram_Renaming): Add extra condition
to check for unmarked subprogram references coming from
renamings.
gcc/testsuite/
* gnat.dg/warn16.adb: New testcase.
From-SVN: r264635
Issue a positive message that inlining was performed in GNATprove mode,
when corresponding debug switch -gnatd_f is set.
2018-09-26 Yannick Moy <moy@adacore.com>
gcc/ada/
* errout.ads: Update comment for insertion character '?'.
* inline.adb: Use simple insertion character '?' for GNATprove
info messages.
* sem_res.adb (Resolve_Call): Issue an info message on inlining
in GNATprove mode.
From-SVN: r264633
This patch ensures that the front-end generates constraint checks for
some operations that previously depended on gigi for the corresponding
check. The patch also resets the Do_Range_Check flag so that it never
appears in the tree presented to gigi.
2018-09-26 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* checks.adb (Apply_Type_Conversion_Checks): Do not generate a
range check on the expression of the conversion if it involves a
fixed-point type, as such conversions are handled specially
during expansion.
* exp_ch4.adb (Expand_N_Type_Conversion): In a conversion from
Fixed to Integer, use the base type of the expression to ensure
that the caller will generate the proper constraint check when
needed.
From-SVN: r264632
2018-09-26 Maroua Maalej <maalej@adacore.com>
gcc/ada/
* sem_spark.adb (Check_Loop_Statement): Fix a bug related to
loop exit environment.
(Check_Statement): fixing a bug when comparing the source and
target in an assignment statement.
From-SVN: r264631
This patch ensures that the full compilation context is captured prior
to package or subprogram instantiation/inlining and restored after the
action takes place.
2018-09-26 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* sem_ch12.adb (Instantiate_Package_Body): Capture and restore
the full compilation context.
(Instantiate_Subprogram_Body): Capture and restore the full
compilation context.
gcc/testsuite/
* gnat.dg/elab7.adb, gnat.dg/elab7_pkg1.adb,
gnat.dg/elab7_pkg1.ads, gnat.dg/elab7_pkg2.adb,
gnat.dg/elab7_pkg2.ads: New testcase.
From-SVN: r264630
Info messages about lack of inlining for analysis in GNATprove may be
confusing to users. They are now only issued when GNATprove is called
with switch --info, which it passes on to gnat2why with switch -gnatd_f.
There is no effect on compilation.
2018-09-26 Yannick Moy <moy@adacore.com>
gcc/ada/
* debug.adb: Add use for -gnatd_f switch.
* inline.adb (Cannot_Inline): Only issue info message for
failure to inline in GNATprove mode when switch -gnatd_f is
used.
From-SVN: r264629
The frontend reports an error under ZFP when performing the type
conversion of a tagged object to one of its covered interface types.
2018-09-26 Javier Miranda <miranda@adacore.com>
gcc/ada/
* exp_disp.adb (Expand_Interface_Conversion): No displacement of
the pointer needed when the type of the operand is an interface
type that maches the target type and we are compiling under
configurable runtime. Adding also documentation explaining why
this cannot be done when compiling with the full runtime.
* exp_intr.adb: Update comment.
gcc/testsuite/
* gnat.dg/interface8.adb, gnat.dg/interface8.ads: New testcase.
From-SVN: r264628
This patch fixes a spurious error involving a private extension whose
full view includes a dynamic predicate, when the parent type is itself
private at the point of the predicate check. The conversion is known to
be legal so no extra conversion checks are required.
2018-09-26 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* exp_util.adb (Make_Predicate_Call): Use OK_Convert_To when
applying a predicate check to prevent spurious errors when
private ancestors are involved.
gcc/testsuite/
* gnat.dg/predicate2-containers.ads,
gnat.dg/predicate2-project-name_values.ads,
gnat.dg/predicate2-project-registry-attribute.ads,
gnat.dg/predicate2-project-registry.ads,
gnat.dg/predicate2-project-typ-set.ads,
gnat.dg/predicate2-project-typ.ads,
gnat.dg/predicate2-project.ads,
gnat.dg/predicate2-source_reference.ads, gnat.dg/predicate2.ads,
gnat.dg/predicate2_main.adb: New testcase.
From-SVN: r264626
This patch reimplements the handling of the secondary stack when the
iteration scheme of a loop statement requires this support.
Prior to this modification, an iterator loop over a container was
assumed to require unconditional secondary stack management. This is
however not always true because of user-defined iterator types, where
routines First and Next return an iterator that does require the
secondary stack.
------------
-- Source --
------------
-- gnat.adc
pragma Restrictions (No_Secondary_Stack);
-- test.ads
package Test is
type Test_Type is private
with
Default_Initial_Condition,
Iterable => (First => First_Element,
Next => Next_Element,
Has_Element => Has_Element,
Element => Element);
type Cursor_Type is private;
function First_Element (T : Test_Type) return Cursor_Type;
function Next_Element (T : Test_Type; C : Cursor_Type) return Cursor_Type;
function Has_Element (T : Test_Type; C : Cursor_Type) return Boolean;
function Element (T : Test_Type; C : Cursor_Type) return Natural;
private
type Cursor_Type is new Natural;
type Test_Type is record
null;
end record;
function First_Element (T : Test_Type) return Cursor_Type
is (0);
function Next_Element (T : Test_Type; C : Cursor_Type) return Cursor_Type
is (0);
function Has_Element (T : Test_Type; C : Cursor_Type) return Boolean
is (False);
function Element (T : Test_Type; C : Cursor_Type) return Natural
is (0);
end Test;
-- main.adb
with Test; use Test;
procedure Main is
F : Boolean;
M : Test_Type;
begin
for Elem of M loop
null;
end loop;
F := (for all C of M => C = 1);
F := (for all C in M => True);
end Main;
-----------------
-- Compilation --
-----------------
$ gnatmake -q --RTS=zfp -nostdlib main.adb
2018-09-26 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* exp_ch4.adb (Expand_N_Allocator): Ensure that the use of the
secondary stack does not clash with restriction
No_Secondary_Stack.
* exp_ch6.adb (Expand_N_Extended_Return_Statement): Ensure that
the use of the secondary stack does not clash with restriction
No_Secondary_Stack.
* sem_ch5.adb (Analyze_Loop_Statement): Wrap the loop in a block
prior to analysis in order to either provide a local scope for
an iterator, or ensure that the secondary stack is properly
managed.
(Check_Call): Account for the case where the tree may be
unanalyzed or contain prior errors.
(Has_Call_Using_Secondary_Stack): Renamed to Has_Sec_Stack_Call.
Update all uses of the subprogram.
(Prepare_Loop_Statement): New routine.
From-SVN: r264625
This patch does not affect the behavior of Ada-only code but improves
consistency with the code generated by the C++ compiler.
2018-09-26 Javier Miranda <miranda@adacore.com>
gcc/ada/
* sem_res.adb (Resolve_Actuals): If the formal is a class-wide
type conversion then do not skip resolving and expanding the
conversion; required to displace the pointer to the object and
reference the dispatch table associated with the target
interface type.
From-SVN: r264624
This patch corrects the logic of GNAT.Dynamic_HTables.Dynamic_HTable.Put to
update the number of key-value pairs in the hash table only when the put is
adding a new pair, rather than updating the value of an existing pair.
2018-09-26 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* libgnat/g-dynhta.adb (Prepend_Or_Replace): Update the number
of key-value pairs in the hash table only when adding a brand
new pair.
gcc/testsuite/
* gnat.dg/dynhash1.adb: New testcase.
From-SVN: r264623
2018-09-26 Sergey Rybin <rybin@adacore.com>
gcc/ada/
* doc/gnat_ugn/gnat_utility_programs.rst: Add note about
processing of aggregate projects in gnatmetric and gnatstub.
From-SVN: r264622
This patch implements unit GNAT.Sets which currently offers a general purpose
membership set. The patch also streamlines GNAT.Dynamic_HTables and GNAT.Lists
to use parts of the same API, types, and exceptions as those used by GNAT.Sets.
2018-09-26 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* gcc-interface/Make-lang.in: Add unit GNAT.Sets to the list of
front end sources.
* impunit.adb: Add unit GNAT.Sets to the list of predefined
units.
* Makefile.rtl: Add unit GNAT.Sets to the list of non-tasking
units.
* libgnat/g-sets.adb: New unit.
* libgnat/g-sets.ads: New unit.
* libgnat/g-dynhta.adb (Minimum_Size): Decrease to 8 in order to
allow for small sets. Update all occurrences of Table_Locked to
Iterated.
(Ensure_Unlocked): Query the number of iterators.
(Find_Node): Use the supplied equality.
(Is_Empty): New routine.
(Lock): Update the number of iterators.
(Prepend_Or_Replace): Use the supplied equality.
(Size): Update the return type.
(Unlock): Update the number of iterators.
* libgnat/g-dynhta.ads: Update all occurrences of Table_Locked
to Iterated. Rename formal subprogram Equivalent_Keys to "=".
(Bucket_Range_Type, Pair_Count_Type): Remove types.
(Not_Created, Table_Locked, Iterator_Exhausted): Remove
exceptions.
(Hash_Table): Update to store the number of iterators rather
than locks.
(Is_Empty): New routine.
(Size): Update the return type.
* libgnat/g-lists.adb: Update all occurrences of List_Locked to
Iterated.
(Ensure_Unlocked): Query the number of iterators.
(Length): Remove.
(Lock): Update the number of iterators.
(Size): New routine.
(Unlock): Update the number of iterators.
* libgnat/g-lists.ads: Update all occurrences of List_Locked to
Iterated.
(Element_Count_Type): Remove type.
(Not_Created, Table_Locked, Iterator_Exhausted): Remove
exceptions.
(Linked_List): Update type to store the number of iterators
rather than locks.
(Length): Remove.
(Size): New routine.
* libgnat/gnat.ads (Bucket_Range_Type): New type.
(Iterated, Iterator_Exhausted, and Not_Created): New exceptions.
gcc/testsuite/
* gnat.dg/sets1.adb: New testcase.
* gnat.dg/dynhash.adb, gnat.dg/linkedlist.adb: Update testcases
to new API.
From-SVN: r264620
2018-09-26 Javier Miranda <miranda@adacore.com>
gcc/ada/
* checks.adb (Install_Null_Excluding_Check): Do not add
null-excluding checks when the tree may not be fully decorated.
This patch cascade errors.
From-SVN: r264619
The compiler was incorrectly accepting generic instantiations with
formal objects of named access-to-subprogram types associated with an
actual of an anonymous access-to-subprogram type.
Analyze_Object_Declaration tests for objects initialized anonymous
access-to-subprogram values, and wraps a conversion around the argument,
which normally will result in error checks during resolution in
Valid_Conversion, but the conversion was only created when the
initialization expression Comes_From_Source, which prevented the
conversion wrapping from happening for constant declarations resulting
from generic expansion. The test for Comes_From_Source was removed.
The following test must report the error output given further below for
the three constructs marked as errors when compiled with this command:
gcc -c -gnatj70 bad_anon_access_instance.adb
procedure Bad_Anon_Access_Instance (Anon_Acc : access procedure) is
type Ref is access procedure;
Ref_1 : Ref := Anon_Acc; -- ERROR (flagged by GNAT)
Ref_2 : constant Ref := Anon_Acc; -- ERROR (flagged by GNAT)
generic
Formal_Ref : Ref;
package Gen is
end Gen;
package Inst
is new Gen (Formal_Ref => Anon_Acc); -- ERROR (but not flagged by GNAT)
begin
null;
end Bad_Anon_Access_Instance;
-------------
Error output:
-------------
bad_anon_access_instance.adb:4:19: illegal attempt to store anonymous
access to subprogram, value has
deeper accessibility than any
master (RM 3.10.2 (13)), use named
access type for "Anon_Acc" instead
of access parameter
bad_anon_access_instance.adb:6:28: illegal attempt to store anonymous
access to subprogram, value has
deeper accessibility than any
master (RM 3.10.2 (13)), use named
access type for "Anon_Acc" instead
of access parameter
bad_anon_access_instance.adb:14:32: illegal attempt to store
anonymous access to subprogram,
value has deeper accessibility
than any master (RM 3.10.2 (13)),
use named access type for
"Anon_Acc" instead of access
parameter
2018-09-26 Gary Dismukes <dismukes@adacore.com>
gcc/ada/
* sem_ch3.adb (Analyze_Object_Declaration): Remove test for
Comes_From_Source, which prevented implicit conversions from
being applied to anonymous access-to-subprogram formals in
constant declartions that arise from instance associations for
generic formal objects. Add RM and AARM references to comment.
From-SVN: r264618
This patch introduces the upper part of the Ada front-end support for a first
set of OpenACC directives (Acc_Kernels, Acc_Loop, Acc_Parallel, Acc_Data) and
their clauses.
The pragmas syntax is documented, pragmas are recognized and checked for
syntactic correctness, keyed on -fopenacc. A couple of new flags are defined
on loop statements in the GNAT tree.
2018-09-26 Olivier Hainque <hainque@adacore.com>
gcc/ada/
* opt.ads (OpenAcc_Enabled): New flag. False by default. True
when OpenACC pragmas are requested to be honored, when -fopenacc
is found on the command line.
* back_end.adb (Scan_Compiler_Arguments): Set OpenACC_Enabled if
-fopenacc is seen on the command line.
* sinfo.adb, sinfo.ads (Is_OpenAcc_Environment): New
flag/predicate on Loop statements which embed an Acc_Kernels,
Acc_Parallel or Acc_Data pragma.
(Is_OpenAcc_Loop): New flag/predicate on Loop statements which
embed an Acc_Loop pragma.
(Set_Is_OpenAcc_Environment, Set_Is_OpenAcc_Loop): Setters for
the new flags.
* par-prag.adb (Prag): Handle Acc_Data, Acc_Loop, Acc_Parallel
and Acc_Kernels pragmas. Nothing to do here, all handled by
sem_prag.
* sem_prag.adb (Acc_First, Acc_Next,
Validate_Acc_Condition_Clause, Validate_Acc_Data_Clause,
Validate_Acc_Int_Expr_Clause, Validate_Acc_Int_Expr_List_Clause,
Validate_Acc_Loop_Collapse, Validate_Acc_Loop_Gang,
Validate_Acc_Loop_Vector, Validate_Acc_Loop_Worker,
Validate_Acc_Name_Reduction, Validate_Acc_Size_Expressions): New
helper for Analyze_Pragma, to handle OpenACC pragmas.
(Analyze_Pragma): Handle Acc_Data, Acc_Loop, Acc_Parallel and
Acc_Kernels pragmas.
* sem_ch5.adb (Disable_Constant): Unset Is_True_Constant on
variable entity, action for ...
(Disable_Constants): Helper for Analyze_Loop_Statement, to ...
(Analyze_Loop_Statement): Disable True_Constant on variables
referenced within an OpenACC environment.
* snames.ads-tmpl: Declare Name_Ids for the OpenACC directives
and clauses we can handle. Remove an exraneous whitespace before
columns, preventing line length overflow in the generated spec
with Ids now reaching beyond 999.
* doc/gnat_rm/implementation_defined_pragmas.rst: Document
pragma Acc_Parallel, Acc_Loop, Acc_Kernels and Acc_Data.
* gnat_rm.texi: Regenerate.
From-SVN: r264617
This patch fixes a missing error on a type extension with limited
components, when the parent type is a derived limited interface. This
may allow the unit to improperly compile, but may lead to bind-time
errors when compiling a client of that unit.
Compiling p.adb must yield:
keys.ads:8:06: extension of nonlimited type cannot have limited components
keys.ads:8:06: limitedness is not inherited from limited interface
keys.ads:8:06: add "limited" to type indication
----
with Keys;
procedure P is
begin
null;
end;
----
with GNAT.Semaphores;
package Keys is
type Ref0 is limited interface;
type Ref2 is limited interface and Ref0;
type Object is new Ref2 with record
Lock : aliased GNAT.Semaphores.Binary_Semaphore
(True, GNAT.Semaphores.Default_Ceiling);
end record;
end;
2018-09-26 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch3.adb (Is_Onown_Limited): A derived type whose parent P
is a derived limited record is not itself limited if P is a
derived limited interface.
From-SVN: r264616
This fixes a small discrepancy in the handling of renamed subprograms
declared in a package body, between those originally a regular
subprogram and those an instance of a generic subprogram, the latter
being slightly hindered.
The difference comes from the setting of the Is_Public flag, which was
more conservative in the latter case because instantiations of generic
subprograms are done in compiler-generated local packages.
It is eliminated by allowing Has_Referencer to recurse into nested
packages, but only if they are themselves not instances of generic
packages.
The compiler must now fully inline Doit_I into Doit at -O2 in:
package P is
generic procedure Doit_G;
procedure Doit;
end P;
package body P is
N : Natural := 0;
procedure Doit_G is
begin
N := 1;
end Doit_G;
procedure Doit_I is new Doit_G;
procedure Doit renames Doit_I;
end P;
2018-09-26 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* sem_ch7.adb (Has_Referencer): Remove Top_Level parameter and
add In_Nested_Instance and
Has_Outer_Referencer_Of_Non_Subprograms parameters. Rename
Has_Non_Subprograms_Referencer variable into
Has_Referencer_Of_Non_Subprograms and initialize it with the new
third parameter. Adjust recursive calls and to the renaming.
Replace test on Top_Level with test on In_Nested_Instance to
decide whether to clear the Is_Public flag on entities.
(Hide_Public_Entities): Adjust call to Has_Referencer.
From-SVN: r264615
This adjusts and exposes a couple of functions of the front-end used for the
generation of interface thunks so as to make them callable from gigi. This
also propagates the debug info setting from the targets to the thunks so as
to make stepping into primitives work better in the debugger.
2018-09-26 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* exp_disp.adb (Expand_Interface_Conversion): Use Present test.
(Expand_Interface_Thunk): Propagate debug info setting from
target.
* exp_util.ads (Find_Interface_Tag): Adjust comment.
* exp_util.adb (Find_Interface_Tag): Remove assertions of
success.
* sem_util.adb (Is_Variable_Size_Record): Only look at
components and robustify the implementation.
* fe.h (Find_Interface_Tag): Declare.
(Is_Variable_Size_Record): Likewise.
From-SVN: r264614
2018-09-26 Thomas Quinot <quinot@adacore.com>
gcc/ada/
* exp_util.adb (Make_CW_Equivalent_Type): Propagate bit order
and scalar storage order from root type to classwide equivalent
type, to prevent rejection of the equivalent type by the
freezing circuitry.
gcc/testsuite/
* gnat.dg/sso12.adb: New testcase.
From-SVN: r264613
This patch fixes an issue whereby using a call to an expression function
as the domain of iteration for a loop would trigger a crash due to the
function not being frozen appropriately.
2018-09-26 Justin Squirek <squirek@adacore.com>
gcc/ada/
* sem_ch5.adb (Analyze_Iterator_Specification): Add conditional
to freeze called functions within iterator specifications during
full analysis.
(Preanalyze_Range): Minor typo fix.
gcc/testsuite/
* gnat.dg/expr_func8.adb: New testcase.
From-SVN: r264612
The semantics of the return statement includes an implicit conversion of
the value to the return type of the funcction. This conversion, as
elsewhere, entails a predicate check if the return type has a predicate
aspect.
We do not apply the check to a case expression because in the context of
a return statement it will be expanded into a series of return
statements, each of which will receive a predicate check.
2018-09-26 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch6.adb (Analyze_Function_Return): If the return type has
a dynamic_predicate, apply a Predicate_Check to the expression,
given that it is implicitly converted to the return type.
Exclude case expressions from the check, because in this context
the expression is expanded into individual return statements.
gcc/testsuite/
* gnat.dg/predicate3.adb, gnat.dg/predicate3_pkg.ads: New
testcase.
From-SVN: r264611
2018-09-26 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Task_Type>: In
-gnatct mode, process the discriminants only for a definition.
From-SVN: r264610