Commit graph

164199 commits

Author SHA1 Message Date
Elisa Barboni
1899cb6844 [Ada] SPARK: minor error message enhancement
2018-09-26  Elisa Barboni  <barboni@adacore.com>

gcc/ada/

	* sem_prag.adb (Check_Refined_Global_Item): Improve error
	message.

From-SVN: r264637
2018-09-26 09:20:10 +00:00
Thomas Quinot
def15641da [Ada] Fix inheritance of representation items defined as aspects
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
2018-09-26 09:20:05 +00:00
Justin Squirek
0ebf09ed04 [Ada] Spurious ineffective use_clause warning
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
2018-09-26 09:19:53 +00:00
Arnaud Charlet
cec0185c7e [Ada] Store -G xxx switches
2018-09-26  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* back_end.adb (Scan_Compiler_Arguments): Store -G xxx switches.

From-SVN: r264634
2018-09-26 09:19:47 +00:00
Yannick Moy
940cf4955f [Ada] Issue info message on inlined subprograms in GNATprove mode
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
2018-09-26 09:19:43 +00:00
Ed Schonberg
241848fd7a [Ada] Missing front-end code for constraint checks on fixed point exprs
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 09:19:38 +00:00
Maroua Maalej
2d9a8c0ba1 [Ada] SPARK: fix a bug related to loop exit environment
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
2018-09-26 09:19:33 +00:00
Hristian Kirtchev
1a409f80df [Ada] Spurious elaboration issue due to inlining
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
2018-09-26 09:19:28 +00:00
Yannick Moy
a30a69c122 [Ada] Do not issue by default info messages for inlining in GNATprove
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
2018-09-26 09:19:12 +00:00
Javier Miranda
2d9c4206c9 [Ada] Spurious error on interface conversion under ZFP
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
2018-09-26 09:19:04 +00:00
Hristian Kirtchev
9d9518668b [Ada] Add a No_Return annotation to ease static analysis
2018-09-26  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

	* sem_ch5.adb (Wrap_Loop_Statement): Annotate as No_Return.

From-SVN: r264627
2018-09-26 09:18:58 +00:00
Ed Schonberg
6cd1ee98ea [Ada] Spurious error on private extension with predicate
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
2018-09-26 09:18:52 +00:00
Hristian Kirtchev
abbfd69841 [Ada] Spurious dependency on secondary stack
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
2018-09-26 09:18:35 +00:00
Javier Miranda
c886a94613 [Ada] Mimic the C++ ABI when passing class-wide conversion actuals
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
2018-09-26 09:18:29 +00:00
Hristian Kirtchev
4f95defaa9 [Ada] Pair miscount in Dynamic_HTable.Put
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 09:18:23 +00:00
Sergey Rybin
3e4ade66c6 [Ada] Add notes about processing of aggregate projects
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
2018-09-26 09:18:16 +00:00
Hristian Kirtchev
dd81163fe8 [Ada] Minor reformattings
2018-09-26  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

	* contracts.adb, exp_unst.adb, exp_util.adb, gnat1drv.adb,
	opt.ads, par-prag.adb, sem_ch3.adb, sem_ch5.adb, sem_prag.adb,
	sinfo.ads, snames.ads-tmpl: Minor reformatting.

From-SVN: r264621
2018-09-26 09:18:09 +00:00
Hristian Kirtchev
f8bc3bcb5f [Ada] New unit GNAT.Sets
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 09:18:02 +00:00
Javier Miranda
fcf1dd74bc [Ada] ICE on mix of tagged and limited interfaces
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
2018-09-26 09:17:56 +00:00
Gary Dismukes
7fea7b5747 [Ada] Illegal formal objects associated with anonymous acc-to-subp args
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
2018-09-26 09:17:51 +00:00
Olivier Hainque
95f2be2944 [Ada] Front-end support for OpenACC pragmas
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
2018-09-26 09:17:46 +00:00
Ed Schonberg
8e53268102 [Ada] Missing error on non-limited derived type with limited component
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
2018-09-26 09:17:41 +00:00
Eric Botcazou
56c3e620aa [Ada] Inlining of renamed subprogram instances in package body
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
2018-09-26 09:17:36 +00:00
Eric Botcazou
d58008d23d [Ada] Preparation for new description of interface thunks
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 09:17:31 +00:00
Thomas Quinot
52ba224d88 [Ada] Propagate bit order and SSO from root to classwide equivalent type
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
2018-09-26 09:17:26 +00:00
Justin Squirek
b45a9ff305 [Ada] Crash on expression functions within quantified expressions
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
2018-09-26 09:17:21 +00:00
Ed Schonberg
bcbe14db19 [Ada] Missing predicate check on return value
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 09:17:16 +00:00
Eric Botcazou
4453a8221c [Ada] ICE on array of task type with -gnatct
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
2018-09-26 09:17:10 +00:00
Eric Botcazou
81d85d4bae [Ada] Fix assertion failure on record subtype with -gnatRj
The JSON output of the -gnatR machinery was choking on record subtypes
and the change fixes this oversight.

The following package must now compile properly with -gnatRj:

package P is

  type Rec (D : Integer) is record
      C : Integer;

      case D is
         when 1 =>
            S : String (1 .. 20);
         when 2 =>
            B : Boolean;
         when others =>
            Ch1 : Character;
            F   : Float;
            Ch2 : Character;
      end case;

   end record;

   subtype Rec1 is Rec (1);

end P;

2018-09-26  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* repinfo.adb (List_Record_Layout): Be prepared for JSON output.
	(List_Record_Info): Use the flat representation for record
	subtypes in the JSON format.

From-SVN: r264609
2018-09-26 09:17:05 +00:00
Justin Squirek
05a84157e9 [Ada] Regression in partial compilation of RCI units
This patch fixes an issue whereby the compilation of partial sources
(packages without bodies that require them) would not occur when said
sources were remote call interfaces. This is required because such
interfaces may have bodies that only exist on the server side or vice
versa

2018-09-26  Justin Squirek  <squirek@adacore.com>

gcc/ada/

	* lib-writ.adb, lib-writ.ads (Write_With_Lines): Add
	documentation and an extra conditional check for RCI units so
	that generated ali files will list the spec only instead of a
	body when a body is not found.

From-SVN: r264608
2018-09-26 09:16:59 +00:00
Eric Botcazou
738b83cd32 [Ada] Set Current_Error_Node directly
This changes gigi to set Current_Error_Node directly, which should
result in a more robust error handling.

2018-09-26  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* gcc-interface/gigi.h (error_gnat_node): Delete.
	* gcc-interface/trans.c (error_gnat_node): Likewise.
	(gigi): Replace it with Current_Error_Node.
	(gnat_to_gnu): Likewise.
	* gcc-interface/utils.c (rest_of_subprog_body_compilation):
	Likewise.
	* gcc-interface/misc.c (internal_error_function): Do not set it.

From-SVN: r264607
2018-09-26 09:16:54 +00:00
Eric Botcazou
3b9d159401 [Ada] Wrong handling of address clause for limited record type
2018-09-26  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Adjust
	code retrieving the address when a clause has already been
	processed.
	* gcc-interface/trans.c (gnat_to_gnu)
	<N_Attribute_Definition_Clause>: For an object with a Freeze
	node, build a meaningful expression.

gcc/testsuite/

	* gnat.dg/addr12.adb, gnat.dg/addr12_a.adb,
	gnat.dg/addr12_a.ads, gnat.dg/addr12_b.adb,
	gnat.dg/addr12_b.ads, gnat.dg/addr12_c.ads: New testcase.

From-SVN: r264606
2018-09-26 09:16:49 +00:00
Arnaud Charlet
1ac984f595 [Ada] Introduce -gnatd_A to set Opt.Disable_ALI_File
This will allow us to remove the import of flag_compare_debug in
lib-writ.adb in a second stage.

2018-09-26  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* gnat1drv.adb (Adjust_Global_Switches): -gnatd_A sets
	Opt.Disable_ALI_File.
	* debug.adb: Update debug flags documentation.

From-SVN: r264605
2018-09-26 09:16:44 +00:00
Ed Schonberg
6d7d342a39 [Ada] Disable special handling for preconditions specified by pragmas
2018-09-26  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* contracts.adb (Analyze_Entry_Or_Subprogram_Contract): The
	analysis of preconditions specified by pragmas (rather than
	aspects) is not delayed, and therefore expressions functions
	that are completions do not need special handling during
	expansion.

From-SVN: r264604
2018-09-26 09:16:39 +00:00
Ed Schonberg
ef8f9700fa [Ada] Unnesting: fix handling of up level refs for entries
2018-09-26  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* exp_unst.adb: Fix handling of up level references for entries.

From-SVN: r264603
2018-09-26 09:16:33 +00:00
Ed Schonberg
33d2551767 [Ada] Fix ICE related to type freezing
2018-09-26  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* contracts.adb (Expand_Subprogram_Contract,
	Process_Preconditions_For): Apply Freeze_Expr_Types to the
	expression for a precondition of an expression function that is
	a completion, when the completion appears in the private part
	and the declaration it completes is in the visible part of the
	same package.
	* freeze.adb (Freeze_Expr_Types): Do not establish the scope of
	the operation if it is already installed, as will be the case
	when called to analyze the contract oc the subprogram (which
	happens when generating code inside the subprogram body).

From-SVN: r264602
2018-09-26 09:16:28 +00:00
Maroua Maalej
f0f2d1fc03 [Ada] SPARK: update borrowing effects for IN parameters
2018-09-26  Maroua Maalej  <maalej@adacore.com>

gcc/ada/

	* sem_spark.adb (Check_Param_In, Setup_Parameter_Or_Global):
	Change the operation associated to assigning to an IN parameter.
	In SPARK, IN access-to-variable is an observe operation for a
	function, and borrow operation for a procedure.

From-SVN: r264601
2018-09-26 09:16:23 +00:00
Arnaud Charlet
98f57e4ca3 [Ada] Vxlink: minor reformatting
2018-09-26  Arnaud Charlet  <charlet@adacore.com>

gcc/ada

	* vxlink.adb: Minor reformatting.

From-SVN: r264600
2018-09-26 09:16:18 +00:00
Gary Dismukes
e5d1632351 [Ada] Fix miscellaneous typos
2018-09-26  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

	* exp_ch9.adb, layout.adb, sem_attr.adb, sem_res.adb: Fix
	miscellaneous typos.

From-SVN: r264599
2018-09-26 09:15:48 +00:00
Matthew Malcomson
5e14418b07 A few places in the arm and aarch64 backends check whether an atomic operation needs acquire or release semantics.
A few places in the arm and aarch64 backends check whether an atomic
operation needs acquire or release semantics.
This is generally done with a check like

(is_mm_relaxed (model)
  || is_mm_consume (model)
  || is_mm_release (model))

In this patch we introduce two helper functions to make things a little
tidier.

There are a few places in the arm/ backend that check whether an
operation needs memory model semantics with an idiom that can now be
replaced with the new aarch_mm_needs_* functions, so we make that
replacement.

There is also some backslash removal to make things a little tidier.

Full bootstrap and regression test plus cross-compilation regression tests done
on arm-none-linux-gnueabihf.
Ok for trunk?

gcc/ChangeLog:

2018-09-20  Matthew Malcomson  <matthew.malcomson@arm.com>

	* config/arm/arm.c (arm_split_compare_and_swap, arm_split_atomic_op):
	Use new helper functions.
	* config/arm/sync.md (atomic_load<mode>, atomic_store<mode>):
	Use new helper functions.
	* config/arm/aarch-common-protos.h (aarch_mm_needs_acquire,
	aarch_mm_needs_release): New declarations.
	* config/arm/aarch-common.c (aarch_mm_needs_acquire,
	aarch_mm_needs_release): New.

From-SVN: r264598
2018-09-26 09:13:18 +00:00
Jerome Lambourg
539866048e [Ada] Vxlink: kill a CodePeer warning
2018-09-26  Jerome Lambourg  <lambourg@adacore.com>

gcc/ada/

	* vxlink.adb: Kill a CodePeer warning.

From-SVN: r264597
2018-09-26 09:13:03 +00:00
Paolo Carlini
9464ed971f re PR c++/67656 ([concepts] matched variadics in expression constraint report as unmatched)
2018-09-26  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/67656
	* g++.dg/concepts/pr67656.C: New.

From-SVN: r264596
2018-09-26 09:08:24 +00:00
Eric Botcazou
f29cfc6b15 arm.c (arm_reorg): Skip Thumb reorg pass for thunks.
* config/arm/arm.c (arm_reorg): Skip Thumb reorg pass for thunks.
	(arm32_output_mi_thunk): Deal with long calls.

From-SVN: r264595
2018-09-26 07:36:45 +00:00
Richard Biener
392047f92a re PR debug/87428 ("Missed" inline instances cause bogus DWARF to be emitted)
2018-09-26  Richard Biener  <rguenther@suse.de>

	PR debug/87428
	PR debug/87362
	* tree-inline.c (expand_call_inline): When the location
	of the call is UNKNOWN_LOCATION use DECL_SOURCE_LOCATION
	or BUILTINS_LOCATION for the BLOCK_SOURCE_LOCATION of
	the inserted BLOCK to make inlined_function_outer_scope_p
	recognize it.
	* dwarf2out.c (add_call_src_coords_attributes): Do not add
	coords for reserved locations.

From-SVN: r264594
2018-09-26 07:05:01 +00:00
Ian Lance Taylor
201054a7f0 runtime, os: fix the build on Solaris
Reviewed-on: https://go-review.googlesource.com/137535

From-SVN: r264593
2018-09-26 03:29:07 +00:00
GCC Administrator
a1f9402ebd Daily bump.
From-SVN: r264592
2018-09-26 00:16:57 +00:00
Segher Boessenkool
0bbadf8bc3 rs6000: Use set_attr_alternative in some places
Some code is much neater if it uses set_attr_alternative than if it
does everything by hand.  Change some patterns to use this shorthand.


	* config/rs6000/rs6000.md (*movcc_internal1): Use set_attr_alternative.
	(*call_indirect_nonlocal_sysv<mode>): Ditto.
	(*call_value_indirect_nonlocal_sysv<mode>): Ditto.
	(*sibcall_nonlocal_sysv<mode>): Ditto.
	(*sibcall_value_nonlocal_sysv<mode>): Ditto.
	(<bd>_<mode>): Ditto.
	(<bd>tf_<mode>): Ditto.

From-SVN: r264588
2018-09-26 01:42:28 +02:00
Segher Boessenkool
07a38de7ce rs6000: Simplify "switch (which_alternative)" patterns
A few of the rs6000 patterns use C code as output control string, where
that code is just a "switch (which_alternative)" with all alternatives
returning a constant string or just the result of a function call as
template.
Write such cases as just a list of templates, with the few pieces that
are C code preceded by "*".


	* config/rs6000/altivec.md (*altivec_mov<mode>): Write the output
	control string as a list of templates instead of as C code.
	(*altivec_movti): Ditto.
	* config/rs6000/darwin.md (movdf_low_di): Ditto.

From-SVN: r264587
2018-09-26 01:31:22 +02:00
Jim Wilson
ad117173a0 RISC-V: Fix weak symbols with medany and explicit relocs.
gcc/
	* config/riscv/riscv.c (riscv_split_symbol): Mark auipc label as weak
	when target symbol is weak.

	gcc/testsuite/
	* gcc.target/riscv/weak-1.c: New.

From-SVN: r264586
2018-09-25 15:52:38 -07:00
Jeff Law
c7813484bc re PR c/87387 (trunk/gcc/builtins.c:585:7: warning: -Wself-assign problem)
PR c/87387
        * builtins.c (unterminated_array): Simplify.
	* expr.c (string_constant): Handle SSA_NAME.  Add more exceptions
	where pointer arithmetic is safe.

	* gcc.dg/warn-stpcpy-no-nul.c: Drop unnecessary xfails.
	* gcc.dg/warn-stplen-no-nul.c: Likewise.

From-SVN: r264585
2018-09-25 16:17:45 -06:00