Commit Graph

163084 Commits

Author SHA1 Message Date
Javier Miranda e4d2973624 [Ada] Crash processing abstract state aspect of a package
The compiler may crash processing an aspect Part_Of used in a
package spec which has also an Initial_Condition aspect. After
this patch the following test compiles fine.

package P
with
  SPARK_Mode => On,
  Abstract_State => (Count_State),
  Initial_Condition => (Get_Count = 0)              -- Test
is
   type Count_Type is range 0 .. 16;

   function Get_Count return Count_Type;

   procedure Dummy;

private
   C: Count_Type := 0 with Part_Of => Count_State;  -- Test

   function Get_Count return Count_Type is (C);
end P;

package body P
with
  SPARK_Mode => On,
  Refined_State => (Count_State => C)
is
  procedure Dummy is null;
end P;

Command: gcc -c p.adb

2018-07-17  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* exp_ch13.adb (Expand_N_Freeze_Entity): Handle subtype declared for an
	iterator.
	* freeze.adb (Freeze_Expression): Handle freeze of an entity defined
	outside of a subprogram body. This case was previously handled during
	preanalysis; the frozen entities were remembered and left pending until
	we continued freezeing entities outside of the subprogram. Now, when
	climbing the parents chain to locate the correct placement for the
	freezeing node, we check if the entity can be frozen and only when no
	enclosing node is marked as Must_Not_Freeze the entity is frozen.
	* sem_ch3.ads (Preanalyze_Default_Expression): Declaration moved to the
	package body.
	* sem_ch3.adb (Preanalyze_Default_Expression): Code adjusted to invoke
	the new subprogram Preanalyze_With_Freezing_And_Resolve.
	* sem_ch6.adb (Preanalyze_Formal_Expression): New subprogram.
	(Analyze_Expression_Function, Process_Formals): Invoke
	Preanalyze_Formal_Expression instead of Preanalyze_Spec_Expression
	since the analysis of the formals may freeze entities.
	(Analyze_Subprogram_Body_Helper): Skip building the body of the
	class-wide clone for eliminated subprograms.
	* sem_res.ads, sem_res.adb (Preanalyze_And_Resolve): New subprogram.
	Its code is basically the previous version of this routine but extended
	with an additional parameter which is used to specify if during
	preanalysis we are allowed to freeze entities.  If the new parameter is
	True then the subtree root node is marked as Must_Not_Freeze and no
	entities are frozen during preanalysis.
	(Preanalyze_And_Resolve): Invokes the internal version of
	Preanalyze_And_Resolve without entity freezing.
	(Preanalyze_With_Freezing_And_Resolve): Invokes the internal version of
	Prenalyze_And_Resolve with freezing enabled.

From-SVN: r262785
2018-07-17 08:07:52 +00:00
Piotr Trojanek 52afb18645 [Ada] Consistent spelling of "i.e." in docs and comments
2018-07-17  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* einfo.ads, libgnat/g-comlin.ads: Minor change "ie" to "i.e." in docs
	and comments.

From-SVN: r262784
2018-07-17 08:07:47 +00:00
Justin Squirek 1b72a5637c [Ada] Argument_String_To_List creates empty items from whitespace
This patch corrects an issue whereby leading whitespace in a non-quoted
argument list passed to Argument_String_To_List caused extraneous empty
arguments to be returned.

2018-07-17  Justin Squirek  <squirek@adacore.com>

gcc/ada/

	* libgnat/s-os_lib.adb (Argument_String_To_List): Fix trimming of
	whitespace.

gcc/testsuite/

	* gnat.dg/split_args.adb: New testcase.

From-SVN: r262783
2018-07-17 08:07:42 +00:00
Hristian Kirtchev e6bc029a34 [Ada] Spurious error on Part_Of indicator
This patch modifies the verification of a missing Part_Of indicator to avoid
considering constants as visible state of a package instantiation because the
compiler cannot determine whether their values depend on variable input. This
diagnostic is left to GNATprove.

------------
-- Source --
------------

--  gnat.adc

pragma SPARK_Mode;

--  gen_pack.ads

generic
package Gen_Pack is
   Val : constant Integer := 123;
end Gen_Pack;

--  pack.ads

with Gen_Pack;

package Pack
  with Abstract_State => Pack_State
is
   procedure Force_Body;
private
   package Inst_1 is new Gen_Pack;                                   --  OK
   package Inst_2 is new Gen_Pack with Part_Of => Pack_State;        --  OK
end Pack;

--  pack.adb

package body Pack
  with Refined_State => (Pack_State => Inst_2.Val)
is
   procedure Force_Body is null;
end Pack;

-----------------
-- Compilation --
-----------------

$ gcc -c pack.adb

2018-07-17  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

	* sem_prag.adb (Has_Visible_State): Do not consider constants as
	visible state because it is not possible to determine whether a
	constant depends on variable input.
	(Propagate_Part_Of): Add comment clarifying the behavior with respect
	to constant.

From-SVN: r262782
2018-07-17 08:07:37 +00:00
Yannick Moy 014eddc6d9 [Ada] Avoid confusing warning on exception propagation in GNATprove mode
When compiling with the restriction No_Exception_Propagation, GNAT compiler
may issue a warning about exceptions not being propagated. This warning is
useless and confusing to users for GNATprove analysis, as GNATprove
precisely detects possible exceptions, so disable the warning in that mode.

2018-07-17  Yannick Moy  <moy@adacore.com>

gcc/ada/

	* gnat1drv.adb (Gnat1drv): Do not issue warning about exception not
	being propagated in GNATprove mode.

From-SVN: r262781
2018-07-17 08:07:31 +00:00
Dmitriy Anisimkov d47c8ef900 [Ada] GNAT.Sockets: reorganize and make public components of Inet_Addr_Type
2018-07-17  Dmitriy Anisimkov  <anisimko@adacore.com>

gcc/ada/

	* libgnat/g-socket.adb, libgnat/g-socket.ads: Reorganize and make
	public components of Inet_Addr_Type. Introduce public binary
	operations.

From-SVN: r262780
2018-07-17 08:07:26 +00:00
Javier Miranda 01bd58f518 [Ada] Secondary stack leak in statements block located in a loop
When a loop iterator has a block declaration containing statements that invoke
functions whose result is returned on the secondary stack (such as a
string-returning function), the compiler fails to generate code to release the
allocated memory when the loop terminates.

After this patch the following test works fine.

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
pragma Warnings (Off);
with System.Secondary_Stack;
pragma Warnings (On);

procedure Small is
   procedure Info is new System.Secondary_Stack.Ss_Info (Put_Line);

   US : Unbounded_String;
begin
   Info;
   for J in 1 .. 100_000 loop
      Leaky_Block : declare
      begin
         if (J mod 20000) = 0 then
            Info;
         end if;

         Ada.Text_IO.Put_Line (To_String (US));  --  Test

         if (J mod 20000) = 0 then
            Info;
         end if;
      end Leaky_Block;
   end loop;
   Info;
end;

Command:
  gnatmake small.adb; small | grep "Current allocated space :" | uniq
Output:
  Current allocated space :  0 bytes

2018-07-17  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* exp_ch7.adb (Make_Transient_Block): When determining whether an
	enclosing scope already handles the secondary stack, take into account
	transient blocks nested in a block that do not manage the secondary
	stack and are located within a loop.

From-SVN: r262779
2018-07-17 08:07:00 +00:00
Ed Schonberg 3567ca3f6b [Ada] Fix Enclosing_Subprogram for protected entries and task entries
2018-07-17  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_util.adb (Enclosing_Subprogram): Protected entries and task
	entries must be treated separately: task entries are within the
	enclosing subprogram of the task type, while protected entries are
	transformed into the corresponding Protected_Body_Subprogram, which is
	the enclosing_subprogram of any subprogram declared within the entry
	body.

From-SVN: r262778
2018-07-17 08:06:55 +00:00
Hristian Kirtchev eae2aa7ce1 [Ada] Add elaboration-related switches to GNAT UGN
This patch adds compiler switches -gnatH and -gnatJ to section "Alphabetical
list of all switches" of the GNAT User Guide for Native.

2018-07-17  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

	* doc/gnat_ugn/building_executable_programs_with_gnat.rst: Add missing
	sections on -gnatH and -gnatJ compiler switches.
	* gnat_ugn.texi: Regenerate.

From-SVN: r262777
2018-07-17 08:06:50 +00:00
Jakub Jelinek 3a10621137 re PR middle-end/86539 (OpenMP wrong-code with taskloop and references)
PR middle-end/86539
	* gimplify.c (gimplify_omp_for): Ensure taskloop firstprivatized init
	and cond temporaries don't have reference type if iterator has
	pointer type.  For init use &for_pre_body instead of pre_p if
	for_pre_body is non-empty.

	* testsuite/libgomp.c++/pr86539.C: New test.

From-SVN: r262776
2018-07-17 10:06:25 +02:00
Hristian Kirtchev 980f94b75b [Ada] New ignored Ghost code removal mechanism
This patch reimplements the mechanism which removes ignored Ghost code from the
tree.

The previous mechanism proved to be unreliable because it assumed that no new
scoping constructs would be created after some ignored Ghost code had already
notified its enclosing scoping constructs that they contain such code. The
assumption can be broken by having a call to an ignored Ghost procedure within
the extended return statement of a function. The procedure call would signal
the enclosing function that it contains ignored Ghost code, however the return
statement would introduce an extra block, effectively hiding the procedure call
from the ignored Ghost code elimination pass.

The new mechanism implemented in this patch forgoes directed tree pruning in
favor of storing the actual ignored Ghost code, and later directly eliminating
it from the tree.

For this approach to operate efficiently, only "top level" ignored Ghost
constructs are stored. The top level constructs are essentially nodes which can
appear within a declarative or statement list and be safely rewritten into null
statements. This ensures that only "root" ignored Ghost construct need to be
processed, as opposed to all ignored Ghost nodes within a subtree.

The approach has one drawback however. Due to the generation and analysis of
ignored Ghost code, a construct may be recorded multiple times (usually twice).
The mechanism simply deals with this artefact instead of employing expensive
solutions such as hash tables or a common flag shared by all nodes to eliminate
the duplicates.

------------
-- Source --
------------

--  main.adb

with Ada.Text_IO; use Ada.Text_IO;

procedure Main is
   procedure Ghost_Proc with Ghost;
   procedure Ghost_Proc is
   begin
      Put_Line ("ERROR: Ghost_Proc called");
   end Ghost_Proc;

   function Func return Integer is
   begin
      return Res : Integer := 123 do
         Ghost_Proc;
      end return;
   end Func;

   Val : Integer with Ghost;

begin
   Val := Func;
end Main;

----------------------------
-- Compilation and output --
----------------------------

$ gcc -c -gnatDG main.adb
$ grep -c "ghost" main.adb.dg
0

2018-07-17  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

	* alloc.ads: Update the allocation metrics of the ignored Ghost nodes
	table.
	* atree.adb: Add a soft link for a procedure which is invoked whenever
	an ignored Ghost node or entity is created.
	(Change_Node): Preserve relevant attributes which come from the Flags
	table.
	(Mark_New_Ghost_Node): Record a newly created ignored Ghost node or
	entity.
	(Rewrite): Preserve relevant attributes which come from the Flags
	table.
	(Set_Ignored_Ghost_Recording_Proc): New routine.
	* atree.ads: Define an access-to-suprogram type for a soft link which
	records a newly created ignored Ghost node or entity.
	(Set_Ignored_Ghost_Recording_Proc): New routine.
	* ghost.adb: Remove with and use clause for Lib.  Remove table
	Ignored_Ghost_Units.  Add new table Ignored_Ghost_Nodes.
	(Add_Ignored_Ghost_Unit): Removed.
	(Initialize): Initialize the table which stores ignored Ghost nodes.
	Set the soft link which allows Atree.Mark_New_Ghost_Node to record an
	ignored Ghost node.
	(Is_Ignored_Ghost_Unit): Use the ultimate original node when checking
	an eliminated ignored Ghost unit.
	(Lock): Release and lock the table which stores ignored Ghost nodes.
	(Mark_And_Set_Ghost_Assignment): Record rather than propagate ignored
	Ghost nodes.
	(Mark_And_Set_Ghost_Procedure_Call): Record rather than propagate
	ignored Ghost nodes.
	(Mark_Ghost_Clause): Record rather than propagate ignored Ghost nodes.
	(Mark_Ghost_Declaration_Or_Body): Record rather than propagate ignored
	Ghost nodes.
	(Mark_Ghost_Pragma): Record rather than propagate ignored Ghost nodes.
	(Propagate_Ignored_Ghost_Code): Removed.
	(Record_Ignored_Ghost_Node): New routine.
	(Remove_Ignored_Ghost_Code): Reimplemented.
	(Remove_Ignored_Ghost_Node): New routine.
	(Ultimate_Original_Node): New routine.
	* ghost.ads (Check_Ghost_Completion): Removed.
	* sem_ch8.adb (Analyze_Use_Package): Remove obsolete code. Mark a use
	package clause as ignored Ghost if applicable.
	* sem_util.adb (Is_Body_Or_Package_Declaration): Reimplemented.

From-SVN: r262775
2018-07-17 08:06:24 +00:00
Javier Miranda e8427749a9 [Ada] Secondary stack leak in loop iterator
When the evaluation of the loop iterator invokes a function whose
result relies on the secondary stack the compiler does not generate
code to release the consumed memory as soon as the loop terminates.

After this patch the following test works fine.

with Text_IO; use Text_IO;
pragma Warnings (Off);
with System.Secondary_Stack;
pragma Warnings (On);
procedure Sec_Stack_Leak is
   function F (X : String) return Integer is
   begin
      return 10;
   end F;

   function G (X : Integer) return String is
   begin
      return (1 .. X => 'x');
   end G;

   procedure Info is new System.Secondary_Stack.Ss_Info (Put_Line);

   procedure Nest is
   begin
      for I in Integer range 1 .. 100 loop
         for J in Integer range 1 .. F (G (10_000)) loop
            null;
         end loop;
         Info;
      end loop;
      Info;
   end Nest;

begin
   Info;
   Nest;
   Info;
end Sec_Stack_Leak;

Commands:
  gnatmake -q sec_stack_leak.adb
  sec_stack_leak | grep "Current allocated space :" | uniq
Output:
  Current allocated space :  0 bytes

2018-07-17  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* sem_ch5.adb (Has_Call_Using_Secondary_Stack): Moved to library level
	to reuse it.
	(Analyze_Loop_Statement): Wrap the loop in a block when the evaluation
	of the loop iterator relies on the secondary stack.

From-SVN: r262774
2018-07-17 08:06:09 +00:00
Piotr Trojanek 5ffc5c5509 [Ada] Fix Next_Actual when used on calls "inlined for proof"
The GNATprove backend needs to apply antialiasing checks to subprogram
calls that have been rewritten into null statements while "inlining for
proof". This requires the First_Actual/Next_Actual to use the Original_Node
and not the N_Null_Statement that rewriting leaves as a parent.

Only effective in GNATprove mode, so no frontend test provided.

2018-07-17  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* sem_util.adb (Next_Actual): If the parent is a N_Null_Statement,
	which happens for inlined calls, then fetch the next actual from the
	original AST.

From-SVN: r262773
2018-07-17 08:06:04 +00:00
Ed Schonberg c70f758353 [Ada] Einfo: update documentation for Scalar_Range
2018-07-17  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* einfo.ads: Update documentation for Scalar_Range.

From-SVN: r262772
2018-07-17 08:05:59 +00:00
Piotr Trojanek 7abe752684 [Ada] Attach the special GNATprove HEAP entity to the Standard package
In GNATprove mode we use frontend cross-references to synthesize the
Global contract of subprograms with SPARK_Mode => Off and represent
a read/write via a pointer as a read/write of a special entity called
HEAP. This entity is now attached to the Standard package, so that we can
safely check the Ekind of its Scope, which now happens in Scope_Within.

This only affects GNATprove, so no frontend test provided.

2018-07-17  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* lib-xref-spark_specific.adb (Create_Heap): Attach the HEAP entity to
	the Standard package.

From-SVN: r262771
2018-07-17 08:05:54 +00:00
Piotr Trojanek e92b81f219 [Ada] Minor refactoring: remove extra parentheses
2018-07-17  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* einfo.adb (Is_Wrapper_Package): Remove extra parentheses.

From-SVN: r262770
2018-07-17 08:05:34 +00:00
Ed Schonberg ad8adad117 [Ada] Fix unnesting issues involving tasks
2018-07-17  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_util.adb (Enclosing_Subprogram): Handle properly entries, and
	synchronized types that are completions of limited types or private
	extensions.
	(Scope_Within): Handle properly accept statements in task bodies.

From-SVN: r262769
2018-07-17 08:05:29 +00:00
Hristian Kirtchev 8d45ce7739 [Ada] Spurious error on unused Part_Of constituent
This patch updates the analysis of indicator Part_Of (or the lack thereof), to
ignore generic formal parameters for purposes of determining the visible state
space because they are not visible outside the generic and related instances.

------------
-- Source --
------------

--  gen_pack.ads

generic
   In_Formal     : in     Integer := 0;
   In_Out_Formal : in out Integer;

package Gen_Pack is
   Exported_In_Formal     : Integer renames In_Formal;
   Exported_In_Out_Formal : Integer renames In_Out_Formal;

end Gen_Pack;

--  pack.ads

with Gen_Pack;

package Pack
  with Abstract_State => State
is
   procedure Force_Body;

   Val : Integer;

private
   package OK_1 is
     new Gen_Pack (In_Out_Formal => Val)
   with Part_Of => State;                                            --  OK

   package OK_2 is
     new Gen_Pack (In_Formal => 1, In_Out_Formal => Val)
   with Part_Of => State;                                            --  OK

   package Error_1 is                                                --  Error
     new Gen_Pack (In_Out_Formal => Val);
   package Error_2 is                                                --  Error
     new Gen_Pack (In_Formal => 2, In_Out_Formal => Val);
end Pack;

--  pack.adb

package body Pack
  with Refined_State =>                                              --  Error
         (State => (OK_1.Exported_In_Formal,
                    OK_1.Exported_In_Out_Formal))
is
   procedure Force_Body is null;
end Pack;

--  gen_pack.ads

generic
   In_Formal     : in     Integer := 0;
   In_Out_Formal : in out Integer;

package Gen_Pack is
   Exported_In_Formal     : Integer renames In_Formal;
   Exported_In_Out_Formal : Integer renames In_Out_Formal;

end Gen_Pack;

--  pack.ads

with Gen_Pack;

package Pack
  with Abstract_State => State
is
   procedure Force_Body;

   Val : Integer;

private
   package OK_1 is
     new Gen_Pack (In_Out_Formal => Val)
   with Part_Of => State;                                            --  OK

   package OK_2 is
     new Gen_Pack (In_Formal => 1, In_Out_Formal => Val)
   with Part_Of => State;                                            --  OK

   package Error_1 is                                                --  Error
     new Gen_Pack (In_Out_Formal => Val);
   package Error_2 is                                                --  Error
     new Gen_Pack (In_Formal => 2, In_Out_Formal => Val);
end Pack;

--  pack.adb

package body Pack
  with Refined_State =>                                              --  Error
         (State => (OK_1.Exported_In_Formal,
                    OK_1.Exported_In_Out_Formal))
is
   procedure Force_Body is null;
end Pack;

----------------------------
-- Compilation and output --
----------------------------

$ gcc -c pack.adb
pack.adb:3:11: state "State" has unused Part_Of constituents
pack.adb:3:11: constant "Exported_In_Formal" defined at gen_pack.ads:6,
  instance at pack.ads:15
pack.adb:3:11: variable "Exported_In_Out_Formal" defined at gen_pack.ads:7,
  instance at pack.ads:15
pack.ads:19:12: indicator Part_Of is required in this context (SPARK RM
  7.2.6(2))
pack.ads:19:12: "Error_1" is declared in the private part of package "Pack"
pack.ads:21:12: indicator Part_Of is required in this context (SPARK RM
  7.2.6(2))
pack.ads:21:12: "Error_2" is declared in the private part of package "Pack"

2018-07-17  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

	* sem_prag.adb (Has_Visible_State): Do not consider generic formals
	because they are not part of the visible state space. Add constants to
	the list of acceptable visible states.
	(Propagate_Part_Of): Do not consider generic formals when propagating
	the Part_Of indicator.
	* sem_util.adb (Entity_Of): Do not follow renaming chains which go
	through a generic formal because they are not visible for SPARK
	purposes.
	* sem_util.ads (Entity_Of): Update the comment on usage.

From-SVN: r262768
2018-07-17 08:03:54 +00:00
Ed Schonberg efa129331c [Ada] Fix handling of inherited discriminant constraints
2018-07-17  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_util.adb (Gather_Components): A discriminant of an ancestor may
	have been constrained by a later ancestor, so when looking for the
	value of that hidden discriminant we must examine the stored constraint
	of other ancestors than the immediate parent type.

gcc/testsuite/

	* gnat.dg/discr54.adb, gnat.dg/discr54_pkg.ads: New testcase.

From-SVN: r262767
2018-07-17 08:03:49 +00:00
Hristian Kirtchev 6a4f3b312e [Ada] Crash on case expression in build-in-place function
This patch modifies the recursive tree replication routine New_Copy_Tree to
create new entities and remap old entities to the new ones for constructs in
N_Expression_With_Actions nodes when requested by a caller. This in turn allows
the build-in-place mechanism to avoid sharing entities between the 4 variants
of returns it generates.

2018-07-17  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

	* exp_ch6.adb (Build_Heap_Or_Pool_Allocator): Ensure that scoping
	constructs and entities within receive new entities when replicating a
	tree.
	(Expand_N_Extended_Return_Statement): Ensure that scoping constructs
	and entities within receive new entities when replicating a tree.
	* sem_util.adb (New_Copy_Tree): Add new formal Scopes_In_EWA_OK.
	(Visit_Entity): Visit entities within scoping constructs inside
	expression with actions nodes when requested by the caller. Add blocks,
	labels, and procedures to the list of entities which need replication.
	* sem_util.ads (New_Copy_Tree): Add new formal Scopes_In_EWA_OK. Update
	the comment on usage.

gcc/testsuite/

	* gnat.dg/bip_case_expr.adb, gnat.dg/bip_case_expr_pkg.ads: New testcase.

From-SVN: r262766
2018-07-17 08:03:44 +00:00
Arnaud Charlet 5a3c20f80e [Ada] Remove references to gcov from the User Manual
2018-07-17  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* doc/gnat_ugn/about_this_guide.rst,
	doc/gnat_ugn/gnat_and_program_execution.rst: Remove references to gcov.
	* gnat_ugn.texi: Regenerate.

From-SVN: r262765
2018-07-17 08:03:39 +00:00
GCC Administrator a2cf456a48 Daily bump.
From-SVN: r262764
2018-07-17 00:16:36 +00:00
Carl Love 97d8e97e05 Forgot the PR number on the commit log.
gcc/testsuite/ChangeLog:

2018-07-16  Carl Love  <cel@us.ibm.com>

Forgot the PR number on the commit log.
PR target/86414

       2018-07-16  Carl Love  <cel@us.ibm.com>

 	PR target/86414
	* gcc.target/powerpc/divkc3-2.c: Add dg-require-effective-target
	longdouble128.
	* gcc.target/powerpc/divkc3-3.c: Ditto.
 	* gcc.target/powerpc/mulkc3-2.c: Ditto.
	* gcc.target/powerpc/mulkc3-3.c: Ditto.
	* gcc.target/powerpc/fold-vec-mergehl-double.c: Update counts.
	* gcc.target/powerpc/pr85456.c: Make check Linux and AIX specific.

From-SVN: r262758
2018-07-16 23:35:25 +00:00
Segher Boessenkool c89f93afdf rs6000: New testcase fp-convert.c
This tests the generated code for all conversions between floating point
point types, binary and decimal.


gcc/testsuite/
	* gcc.target/powerpc/convert-fp-128.c: New testcase.
	* gcc.target/powerpc/convert-fp-64.c: New testcase.

From-SVN: r262757
2018-07-17 01:05:46 +02:00
Segher Boessenkool 1495b68bc9 rs6000: New testsuite selectors
This introduces four new selectors for use with Power testcases:
longdouble64, ppc_float128, ppc_float128_insns, powerpc_vsx.


gcc/testsuite/
	* lib/target-supports.exp (check_effective_target_longdouble64,
	check_effective_target_ppc_float128,
	check_effective_target_ppc_float128_insns,
	check_effective_target_powerpc_vsx): New.

From-SVN: r262756
2018-07-17 01:04:24 +02:00
Segher Boessenkool 831bac2620 rs6000: Fix testsuite bug in check_ppc_float128_hw_available
The test program for ppc_float128_hw_available would always return
false, since there is a syntax error in that test program.


gcc/testsuite/
	* lib/target-supports.exp (check_ppc_float128_hw_available): Fix
	syntax error.

From-SVN: r262755
2018-07-17 01:03:08 +02:00
Segher Boessenkool 66408f6c39 rs6000: Improve truncifsf2
The current implementation leaves an unnecessary register move.  It is
easier to just expand things in the expander already.  This patch does
that.


	* config/rs6000/rs6000.md (trunc<mode>sf2): Expand truncates of
	double-double modes to SFmode directly directly.
	(trunc<mode>sf2_fprs): Delete.

From-SVN: r262754
2018-07-17 01:02:11 +02:00
Segher Boessenkool 56a6c9b4b2 rs6000: Use correct names for some trunc/extend libcalls
The libcalls for trunc and extend of a decimal float to a binary float,
and vice versa, do not have "2" in the name, although all other such
conversions do.


	* config/rs6000/rs6000.c (init_float128_ibm): Use the correct names
	for conversions between IFmode and the decimal floating point modes.
	(init_float128_ieee): Use the correct names for conversions between
	KFmode and the decimal floating point modes.

From-SVN: r262753
2018-07-17 01:01:12 +02:00
Segher Boessenkool 2d06bc72fa rs6000: Use more correct names for some trunc/extend libcalls
They had source and destination swapped in the name.


	* config/rs6000/rs6000.c (init_float128_ibm): Use more correct names
	for the conversions between TDmode and IFmode.
	(init_float128_ieee): Use more correct names for the conversions
	between TDmode and KFmode.

From-SVN: r262752
2018-07-17 01:00:03 +02:00
Jakub Jelinek 10a0e2a9a8 re PR tree-optimization/86526 (ICE in builtin_memcpy_read_str, at builtins.c:3017)
PR tree-optimization/86526
	* builtins.c (expand_builtin_memcmp): Formatting fixes.
	(inline_expand_builtin_string_cmp): Likewise.
	(inline_string_cmp): Likewise.  Use c_readstr instead of
	builtin_memcpy_read_str.  Add unit_mode temporary.

	* gcc.c-torture/compile/pr86526.c: New test.

From-SVN: r262750
2018-07-16 23:25:22 +02:00
Carl Love ce04dc3fe9 divkc3-2.c: Add dg-require-effective-target longdouble128.
gcc/testsuite/ChangeLog:

2018-07-16  Carl Love  <cel@us.ibm.com>

 	* gcc.target/powerpc/divkc3-2.c: Add dg-require-effective-target
	longdouble128.
	* gcc.target/powerpc/divkc3-3.c: Ditto.
 	* gcc.target/powerpc/mulkc3-2.c: Ditto.
	* gcc.target/powerpc/mulkc3-3.c: Ditto.
	* gcc.target/powerpc/fold-vec-mergehl-double.c: Update counts.
	* gcc.target/powerpc/pr85456.c: Make check Linux and AIX specific.

From-SVN: r262749
2018-07-16 21:00:53 +00:00
Fritz Reese e11449d15b Fix handling of invalid assumed-shape/size arrays in legacy initializer lists.
2018-07-16  Fritz Reese  <fritzoreese@gmail.com>

    Fix handling of invalid assumed-shape/size arrays in legacy initializer
    lists.

    gcc/fortran/ChangeLog:

	PR fortran/83184
	* decl.c (match_old_style_init): Initialize locus of variable expr when
	creating a data variable.
	(match_clist_expr): Verify array is explicit shape/size before
	attempting to allocate constant array constructor.

    gcc/testsuite/ChangeLog:

	PR fortran/83184
	* gfortran.dg/assumed_rank_14.f90: New testcase.
	* gfortran.dg/assumed_rank_15.f90: New testcase.
	* gfortran.dg/dec_structure_8.f90: Update error messages.
	* gfortran.dg/dec_structure_23.f90: Update error messages.

From-SVN: r262744
2018-07-16 18:24:50 +00:00
Fritz Reese 835e529de2 re PR fortran/86417 (FAIL: libgomp.fortran/alloc-comp-3.f90 -O0 (test for excess errors))
2018-07-16  Fritz Reese  <fritzoreese@gmail.com>

    gcc/fortran/ChangeLog:

	PR fortran/86417
	* module.c (mio_component): Set component->loc when loading from module.

From-SVN: r262743
2018-07-16 18:16:00 +00:00
Bernd Edlinger 5828c09abe re PR middle-end/86528 (strlen of constant string malfunction -- had to back out fix for PR middle-end/77357)
gcc:
2018-07-16  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR middle-end/86528
        * builtins.c (check_access): Bail out if range[0] is no INTEGER_CST.
        * expr.c (string_constant): Fix the element size of ARRAY_TYPE.

testsuite:
2018-07-16  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR middle-end/86528
        * gcc.c-torture/execute/pr86528.c: New test.
        * gcc.dg/Wrestrict-10.c (test_arr_strcat_2): Fix typo.

From-SVN: r262742
2018-07-16 18:03:15 +00:00
Jonathan Wakely b8c9cad352 * scripts/create_testsuite_files: Fix typo in comment.
From-SVN: r262741
2018-07-16 18:42:20 +01:00
Paolo Carlini 99422caabd class.c (resolve_address_of_overloaded_function): Don't emit an inform if the matching permerror returns false.
/cp
2018-07-16  Paolo Carlini  <paolo.carlini@oracle.com>

	* class.c (resolve_address_of_overloaded_function): Don't emit an
	inform if the matching permerror returns false.
	* pt.c (check_specialization_namespace): Likewise.

/testsuite
2018-07-16  Paolo Carlini  <paolo.carlini@oracle.com>

	* g++.dg/template/spec40.C: New.
	* g++.dg/parse/ptrmem8.C: Likewise.

From-SVN: r262740
2018-07-16 17:36:43 +00:00
Jonathan Wakely 20b47be02c PR libstdc++/86537 remove less<shared_ptr<T>> partial specialization
The standard doesn't specify this partial specialization (it was
required after the changes in N2637 but then should have been removed
following LWG 1262). Its presence is observable because it causes
different results when operator< has been overloaded for a shared_ptr
specialization.

	PR libstdc++/86537
	* include/bits/shared_ptr.h (less<shared_ptr<_Tp>>): Remove
	non-standard partial specialization.
	* include/bits/shared_ptr_base.h (_Sp_less): Remove class definition.
	(less<__shared_ptr<_Tp, _Lp>): Remove partial specialization.
	* testsuite/20_util/shared_ptr/comparison/86537.cc: New test.

From-SVN: r262739
2018-07-16 18:13:41 +01:00
Kelvin Nilsen 2ee1228ecd extend.texi (PowerPC AltiVec Built-in Functions): Alphabetize prototypes of built-in functions...
gcc/ChangeLog:

2018-07-16  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* doc/extend.texi (PowerPC AltiVec Built-in Functions):
	Alphabetize prototypes of built-in functions, separating out
	built-in functions that are listed in this section but should be
	described elsewhere.

From-SVN: r262737
2018-07-16 15:22:28 +00:00
Uros Bizjak f4eafec9bc re PR middle-end/86511 (Traps are generated for non-trapping compares)
PR target/86511
	* expmed.c (emit_store_flag): Do not emit setcc followed by a
	conditional move when trapping comparison was split to a
	non-trapping one (and vice versa).

From-SVN: r262736
2018-07-16 17:11:57 +02:00
Andreas Krebbel e2144dde6e Fix ChangeLog.
From-SVN: r262735
2018-07-16 14:46:10 +00:00
Ilya Leoshkevich 79c2f6d7de S/390: Implement -mnop-mcount
On i386 the profiler call sequence always consists of 1 call
instruction, so -mnop-mcount generates a single nop with the same
length as a call. For S/390 longer sequences may be used in some
cases, so -mnop-mcount generates the corresponding amount of nops.

2018-07-16  Ilya Leoshkevich  <iii@linux.ibm.com>

	* config/s390/s390.c (s390_function_profiler): Generate nops
	instead of profiler call sequences.
	* config/s390/s390.opt: Add the new option.

2018-07-16  Ilya Leoshkevich  <iii@linux.ibm.com>

	* gcc.target/s390/mnop-mcount-m31-fpic.c: New testcase.
	* gcc.target/s390/mnop-mcount-m31-mzarch.c: New testcase.
	* gcc.target/s390/mnop-mcount-m31.c: New testcase.
	* gcc.target/s390/mnop-mcount-m64-mfentry.c: New testcase.
	* gcc.target/s390/mnop-mcount-m64.c: New testcase.

From-SVN: r262734
2018-07-16 14:41:57 +00:00
Ilya Leoshkevich 605090dc79 S/390: Implement -mrecord-mcount
This is the counterpart of the i386 feature introduced by
39a5a6a4: Add direct support for Linux kernel __fentry__ patching.

2018-07-16  Ilya Leoshkevich  <iii@linux.ibm.com>

	* config/s390/s390.c (s390_function_profiler): Generate
	__mcount_loc section.
	* config/s390/s390.opt: Add the new option.

2018-07-16  Ilya Leoshkevich  <iii@linux.ibm.com>

	* testsuite/gcc.target/s390/mrecord-mcount.c: New testcase.

From-SVN: r262733
2018-07-16 14:36:21 +00:00
Ilya Leoshkevich 6902799c8d S/390: Add direct support for Linux kernel __fentry__ patching.
On i386, the difference between mcount and fentry is that fentry
comes before the prolog. On s390 mcount already comes before the
prolog, but takes 4 instructions. This patch introduces the more
efficient implementation (just 1 instruction) and puts it under
-mfentry flag.

The produced code is compatible only with newer glibc versions,
which provide the __fentry__ symbol and do not clobber %r0 when
resolving lazily bound functions. Because 31-bit PLT stubs assume
%r12 contains GOT address, which is not the case when the code runs
before the prolog, -mfentry is allowed only for 64-bit code.

Also, code compiled with -mfentry cannot be used for the nested C
functions, since they both use %r0. In this case instrumentation is
not insterted, and a new warning is issued for each affected nested
function.

2018-07-16  Ilya Leoshkevich  <iii@linux.ibm.com>

	* common.opt: Add the new warning.
	* config/s390/s390.c (s390_function_profiler): Emit "brasl
	%r0,__fentry__" when -mfentry is specified.
	(s390_option_override_internal): Disallow -mfentry for 31-bit
	CPUs.
	* config/s390/s390.opt: Add the new option.

2018-07-16  Ilya Leoshkevich  <iii@linux.ibm.com>

	* gcc.target/s390/mfentry-m64.c: New testcase.

From-SVN: r262732
2018-07-16 14:29:08 +00:00
Hristian Kirtchev 96e4fda582 [Ada] Missing error on hidden state in instantiation
This patch modifies the analysis of package contracts to split processing
which is specific to package instantiations on its own. As a result, the
lack of indicator Part_Of can now be properly assessed.

------------
-- Source --
------------

--  gen_pack.ads

generic
package Gen_Pack is
   Pack_Var : Integer := 1;
end Gen_Pack;

--  gen_wrap.ads

with Gen_Pack;

generic
package Gen_Wrap is
   Wrap_Var : Integer := 1;

   package Inst is new Gen_Pack;
end Gen_Wrap;

--  pack.ads

with Gen_Pack;
with Gen_Wrap;

package Pack
  with SPARK_Mode     => On,
       Abstract_State => State
is
   procedure Force_Body;

private
   package OK_Inst_1 is new Gen_Pack                                 --  OK
     with Part_Of => State;                                          --  OK

   package OK_Inst_2 is new Gen_Pack;                                --  OK
   pragma Part_Of (State);                                           --  OK

   package OK_Inst_3 is new Gen_Wrap                                 --  OK
     with Part_Of => State;                                          --  OK

   package OK_Inst_4 is new Gen_Wrap;                                --  OK
   pragma Part_Of (State);

   package Error_Inst_1 is new Gen_Pack;                             --  Error
   package Error_Inst_2 is new Gen_Wrap;                             --  Error
end Pack;

--  pack.adb

package body Pack
  with SPARK_Mode    => On,
       Refined_State =>
         (State => (OK_Inst_1.Pack_Var, OK_Inst_2.Pack_Var,
                    OK_Inst_3.Wrap_Var, OK_Inst_3.Inst.Pack_Var,
                    OK_Inst_4.Wrap_Var, OK_Inst_4.Inst.Pack_Var))
is
   procedure Force_Body is null;
end Pack;

----------------------------
-- Compilation and output --
----------------------------

$ gcc -c pack.adb
pack.ads:23:12: indicator Part_Of is required in this context (SPARK RM
  7.2.6(2))
pack.ads:23:12: "Error_Inst_1" is declared in the private part of package
  "Pack"
pack.ads:24:12: indicator Part_Of is required in this context (SPARK RM
  7.2.6(2))
pack.ads:24:12: "Error_Inst_2" is declared in the private part of package
  "Pack"

2018-07-16  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

	* contracts.adb (Analyze_Contracts): Add specialized processing for
	package instantiation contracts.
	(Analyze_Package_Contract): Remove the verification of a missing
	Part_Of indicator.
	(Analyze_Package_Instantiation_Contract): New routine.
	* contracts.ads (Analyze_Package_Contract): Update the comment on
	usage.
	* sem_prag.adb (Check_Missing_Part_Of): Ensure that the entity of the
	instance is being examined when trying to determine whether a package
	instantiation needs a Part_Of indicator.

From-SVN: r262731
2018-07-16 14:12:33 +00:00
Hristian Kirtchev 400ad4e950 [Ada] Minor reformatting
2018-07-16  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

	* einfo.adb, exp_ch7.adb, exp_ch9.adb, exp_unst.adb, inline.adb,
	sem.adb, sem_ch12.adb, sem_ch13.adb, sem_ch3.adb, sem_eval.adb,
	sem_util.adb: Minor reformatting.

From-SVN: r262730
2018-07-16 14:12:28 +00:00
Arnaud Charlet 4af4c79a53 [Ada] Only unnest subprograms if no previous errors were detected
2018-07-16  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* frontend.adb: Only unnest subprograms if no previous errors were
	 detected.

From-SVN: r262729
2018-07-16 14:12:23 +00:00
Ed Schonberg 4aba11eeb3 [Ada] Fix expansion of blocks in loops inside elaboration code
2018-07-16  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* exp_ch7.adb (Check_Unnesting_Elaboration_Code): Handle loops that
	contain blocks in the elaboration code for a package body. Create the
	elaboration subprogram wrapper only if there is a subprogram
	declaration in a block or loop.

From-SVN: r262728
2018-07-16 14:12:18 +00:00
Ed Schonberg afe9c53918 [Ada] Deep copy operands of membership operations for unnesting
2018-07-16  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* exp_ch4.adb (Expand_Set_Membership): Use New_Copy_Tree to perform a
	deep copy of the left operand when building each conjuct of the
	expanded membership operation, to avoid sharing nodes between them.
	This sharing interferes with the unnesting machinery and is generally
	undesirable.

From-SVN: r262727
2018-07-16 14:12:13 +00:00
Ed Schonberg 4dd2ed1495 [Ada] Unnesting: handle 'Address references that are calls
2018-07-16  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* exp_unst.adb (Visit_Node): Handle 'Address references that are
	calls.

From-SVN: r262726
2018-07-16 14:12:09 +00:00
Ed Schonberg fa42563af9 [Ada] Unnesting: handle the semantic of Storage_Pool field
2018-07-16  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* exp_unst.adb (Visit_Node): Handle the semantic of Storage_Pool field
	in relevant nodes: Allocate, Free, and return statements.

From-SVN: r262725
2018-07-16 14:12:03 +00:00