1. 03 Jul, 2019 32 commits
    • [Ada] New routine to access file on command line · 10aea826
      This patch adds a new routine to query the first file argument of the
      commandline without moving to the next file. This is needed in SPARK.
      
      There is no impact on compilation.
      
      2019-07-03  Johannes Kanig  <kanig@adacore.com>
      
      gcc/ada/
      
      	* osint.ads, osint.adb (Get_First_Main_File_Name): New routine
      	to access the first file provided on the command line.
      
      From-SVN: r272984
      Johannes Kanig committed
    • [Ada] Crash on front-end inlining of subp. with aspect specifications · 5460389b
      This patch fixes a gap in the handling of formals when inlining a call
      to a subprogram marked Inline_Always. For the inlining, the formals are
      replaced by the actuals in the block constructed for inlining, The
      traversal that performs this replacement does not apply to aspect
      specifications that may appear in the original body, because these
      aspects are only indirectly reachable from the nodes to which they
      apply: a separate traversal is required to perform the replacement in
      the expressions for any aspect specification present in the source.
      
      2019-07-03  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Process_Formals_In_Aspects): New procedure within
      	Expand_Inlined_Call, to perform a replacement of references to
      	formals that appear in aspect specifications within the body
      	being inlined.
      
      gcc/testsuite/
      
      	* gnat.dg/inline16.adb, gnat.dg/inline16_gen.adb,
      	gnat.dg/inline16_gen.ads, gnat.dg/inline16_types.ads: New
      	testcase.
      
      From-SVN: r272983
      Ed Schonberg committed
    • [Ada] Incorrect expansion on renamings of formal parameters · eee51f3d
      This patch fixes an issue whereby a renaming of an unconstrained formal
      parameter leads to spurious runtime errors; manifesting either as a
      storage or constraint error due to incorrect bounds being assumed.
      
      This issue also occurs when the renamings are implicit such as through
      generic instantiations.
      
      2019-07-03  Justin Squirek  <squirek@adacore.com>
      
      gcc/ada/
      
      	* sem_ch8.adb (Analyze_Object_Renaming): Add call to search for
      	the appropriate actual subtype of the object renaming being
      	analyzed.
      	(Check_Constrained_Object): Minor cleanup.
      
      gcc/testsuite/
      
      	* gnat.dg/renaming13.adb, gnat.dg/renaming14.adb: New testcases.
      
      From-SVN: r272982
      Justin Squirek committed
    • [Ada] Refine pointer support in SPARK · f4c16c58
      Refine the implementation of pointer support for SPARK analysis.
      
      There is no impact on compilation.
      
      2019-07-03  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_spark.adb (Get_Observed_Or_Borrowed_Expr): New function to
      	return go through traversal function call.
      	(Check_Type): Consistently use underlying type.
      	(Get_Perm): Adapt for case of elaboration code where variables
      	are not declared in the environment. Remove incorrect handling
      	of borrow and observe.
      
      From-SVN: r272981
      Yannick Moy committed
    • [Ada] Spurious visibility error in inlined function · abc856cf
      This patch corrects the use of tree replication when inlining a function
      that returns an unconstrained result, and its sole statement is an
      extended return statement. The use of New_Copy_Tree ensires that global
      references saved in a generic template are properly carried over when
      the function is instantiated and inlined.
      
      2019-07-03  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Build_Return_Object_Formal): New routine.
      	(Can_Split_Unconstrained_Function): Code clean up.
      	(Copy_Formals,Copy_Return_Object): New routines.
      	(Split_Unconstrained_Function): Code clean up and refactoring.
      
      gcc/testsuite/
      
      	* gnat.dg/inline15.adb, gnat.dg/inline15_gen.adb,
      	gnat.dg/inline15_gen.ads, gnat.dg/inline15_types.ads: New
      	testcase.
      
      From-SVN: r272980
      Hristian Kirtchev committed
    • [Ada] Minor editorial corrections and reformatting · 866000e7
      2019-07-03  Gary Dismukes  <dismukes@adacore.com>
      
      gcc/ada/
      
      	* bindo-augmentors.adb, bindo-augmentors.ads,
      	bindo-builders.ads, bindo-elaborators.adb, sem_ch12.adb,
      	sem_ch13.adb, sem_spark.adb, sinfo.ads: Minor editorial
      	corrections and reformatting.
      
      From-SVN: r272979
      Gary Dismukes committed
    • [Ada] Improve warnings about infinite loops · e08a896b
      The compiler now has fewer false alarms when warning about infinite
      loops. For example, a loop of the form "for X of A ...", where A is an
      array, cannot be infinite.  The compiler no longer warns in this case.
      
      2019-07-03  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_warn.adb (Check_Infinite_Loop_Warning): Avoid the warning
      	if an Iterator_Specification is present.
      
      gcc/testsuite/
      
      	* gnat.dg/warn20.adb, gnat.dg/warn20_pkg.adb,
      	gnat.dg/warn20_pkg.ads: New testcase.
      
      From-SVN: r272978
      Bob Duff committed
    • [Ada] Document default new-line behavior for GNATpp · 07fb741a
      2019-07-03  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_ugn/gnat_utility_programs.rst: Document default
      	new-line behavior.
      
      From-SVN: r272977
      Bob Duff committed
    • [Ada] ABE checks v3.0, foundations of Elaboration order v4.0 · 69e6ee2f
      ------------------------
      -- Elaboration checks --
      ------------------------
      
      The dynamic ABE checks model now emits the same diagnostics as those of the
      static ABE checks model.
      
      The ABE checks mechanism has been redesigned and refactored in the face of
      increasing requirements. Most of the functionality can now be toggled, thus
      allowing for various combinations of behavior. The combinations are defined
      as "initial states" and may be further altered.
      
      Scenarios and targets have been distinctly separated at the higher level,
      instead of directly working with nodes and entitites. Scenarios and targets
      now carry a representation which removes the need to constantly recompute
      relevant attributes, and offers a common interface for the various processors.
      
      Most processing has now been refactored into "services" which perform a single
      ABE-related function.
      
      -----------------------
      -- Elaboration order --
      -----------------------
      
      A new elaboration order mechanism based on the use of an invocation graph to
      provide extra information about the flow of execution at elaboration time has
      been introduced.
      
      The ABE checks mechanism has been altered to encode pieces of the invocation
      graph in the associated ALI files of units.
      
      The new elaboration order mechanism reconstructs the full invocation graph at
      bind time, and coupled with the library item graph, determines the elaboration
      order of units.
      
      The new elaboration order mechanism is currently inaccessible.
      
      ------------
      -- Source --
      ------------
      
      --  pack.ads
      
      package Pack is
         procedure ABE_Proc;
         procedure Safe_Proc;
      end Pack;
      
      --  pack.adb
      
      with Ada.Text_IO; use Ada.Text_IO;
      
      package body Pack is
         function Call_Proc (ABE : Boolean) return Integer;
      
         procedure Safe_Proc is
         begin
            Put_Line ("safe");
         end Safe_Proc;
      
         function Call_Proc (ABE : Boolean) return Integer is
         begin
            if ABE then
               ABE_Proc;
            else
               Safe_Proc;
            end if;
      
            return 0;
         end Call_Proc;
      
         Elab_1 : constant Integer := Call_Proc (ABE => False);
         Elab_2 : constant Integer := Call_Proc (ABE => True);
      
         procedure ABE_Proc is
         begin
            Put_Line ("ABE");
         end ABE_Proc;
      end Pack;
      
      --  main.adb
      
      with Pack;
      
      procedure Main is begin null; end Main;
      
      ----------------------------
      -- Compilation and output --
      ----------------------------
      
      $ gnatmake -f -q -gnatE main.adb
      $ ./main
      $ gnatmake -f -q -gnatE main.adb -gnatDG -gnatwL
      $ grep -c "safeE" pack.adb.dg
      pack.adb:14:10: warning: cannot call "ABE_Proc" before body seen
      pack.adb:14:10: warning: Program_Error may be raised at run time
      pack.adb:14:10: warning:   body of unit "Pack" elaborated
      pack.adb:14:10: warning:   function "Call_Proc" called at line 22
      pack.adb:14:10: warning:   procedure "ABE_Proc" called at line 14
      pack.adb:14:10: warning: cannot call "ABE_Proc" before body seen
      pack.adb:14:10: warning: Program_Error may be raised at run time
      pack.adb:14:10: warning:   body of unit "Pack" elaborated
      pack.adb:14:10: warning:   function "Call_Proc" called at line 23
      pack.adb:14:10: warning:   procedure "ABE_Proc" called at line 14
      safe
      
      raised PROGRAM_ERROR : pack.adb:14 access before elaboration
      0
      
      2019-07-03  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* ali.adb: Add with and use clauses for GNAT,
      	GNAT.Dynamic_HTables, and Snames.  Add a map from invocation
      	signature records to invocation signature ids.  Add various
      	encodings of invocation-related attributes.  Sort and update
      	table Known_ALI_Lines.
      	(Add_Invocation_Construct, Add_Invocation_Relation,
      	Body_Placement_Kind_To_Code, Code_To_Body_Placement_Kind,
      	Code_To_Invocation_Construct_Kind, Code_To_Invocation_Kind,
      	Code_To_Invocation_Graph_Line_Kind, Destroy, Hash): New
      	routines.
      	(Initialize_ALI): Sort the initialization sequence. Add
      	initialization for all invocation-related tables.
      	(Invocation_Construct_Kind_To_Code,
      	Invocation_Graph_Line_Kind_To_Code, Invocation_Kind_To_Code,
      	Invocation_Signature_Of, Present): New routines.
      	(Scan_ALI): Add the default values for invocation-related ids.
      	Scan invocation graph lines.
      	(Scan_Invocation_Graph_Line): New routine.
      	* ali.ads: Add with clause for GNAT.Dynamic_Tables.  Add types
      	for invocation constructs, relations, and signatures.  Add
      	tables for invocation constructs, relations, and signatures.
      	Update Unit_Record to capture invocation-related ids.  Relocate
      	table Unit_Id_Tables and subtypes Unit_Id_Table, Unit_Id_Array
      	from Binde.
      	(Add_Invocation_Construct, Add_Invocation_Relation,
      	Body_Placement_Kind_To_Code, Code_To_Body_Placement_Kind,
      	Code_To_Invocation_Construct_Kind, Code_To_Invocation_Kind,
      	Code_To_Invocation_Graph_Line_Kind,
      	Invocation_Construct_Kind_To_Code,
      	Invocation_Graph_Line_Kind_To_Code, Invocation_Kind_To_Code,
      	Invocation_Signature_Of, Present): New routines.
      	* binde.adb: Add with and use clause for Types.  Add use clause
      	for ALI.Unit_Id_Tables;
      	* binde.ads: Relocate table Unit_Id_Tables and subtypes
      	Unit_Id_Table, Unit_Id_Array to ALI.
      	* bindgen.adb: Remove with and use clause for ALI.
      	* bindgen.ads: Remove with and use clause for Binde.  Add with
      	and use clause for ALI.
      	* bindo.adb,  bindo.ads, bindo-augmentors.adb,
      	bindo-augmentors.ads, bindo-builders.adb, bindo-builders.ads,
      	bindo-diagnostics.adb, bindo-diagnostics.ads,
      	bindo-elaborators.adb, bindo-elaborators.ads, bindo-graphs.adb,
      	bindo-graphs.ads, bindo-units.adb, bindo-units.ads,
      	bindo-validators.adb, bindo-validators.ads, bindo-writers.adb,
      	bindo-writers.ads: New units.
      	* debug.adb: Use and describe GNAT debug switches -gnatd_F and
      	-gnatd_G.  Add GNATbind debug switches in the ranges dA .. dZ,
      	d.a .. d.z, d.A .. d.Z, d.1 .. d.9, d_a .. d_z, d_A .. d_Z, and
      	d_1 .. d_9.  Use and describe GNATbind debug switches -d_A,
      	-d_I, -d_L, -d_N, -d_O, -d_T, and -d_V.
      	* exp_util.adb, exp_util.ads (Exceptions_OK): Relocate to
      	Sem_Util.
      	* gnatbind.adb: Add with and use clause for Bindo.  Use the new
      	Bindo elaboration order only when -d_N is in effect.
      	* lib-writ.adb
      	(Column, Extra, Invoker, Kind, Line, Locations, Name, Placement,
      	Scope, Signature, Target): New routines.
      	(Write_ALI): Output all invocation-related data.
      	(Write_Invocation_Graph): New routine.
      	* lib-writ.ads: Document the invocation graph ALI line.
      	* namet.adb, namet.ads (Present): New routines.
      	* sem_ch8.adb (Find_Direct_Name): Capture the status of
      	elaboration checks and warnings of an identifier.
      	(Find_Expanded_Name): Capture the status of elaboration checks
      	and warnings of an expanded name.
      	* sem_ch12.adb (Analyze_Generic_Package_Declaration): Ensure
      	that invocation graph-related data within the body of the main
      	unit is encoded in the ALI file.
      	(Analyze_Generic_Subprogram_Declaration): Ensure that invocation
      	graph-related data within the body of the main unit is encoded
      	in the ALI file.
      	(Analyze_Package_Instantiation): Perform minimal decoration of
      	the instance entity.
      	(Analyze_Subprogram_Instantiation): Perform minimal decoration
      	of the instance entity.
      	* sem_elab.adb: Perform heavy refactoring of all code. The unit
      	is now split into "services" which specialize in one area of ABE
      	checks.  Add processing in order to capture invocation-graph
      	related attributes of the main unit, and encode them in the ALI
      	file.  The Processing phase can now operate in multiple modes,
      	all described by type Processing_Kind.  Scenarios and targets
      	are now distinct at the higher level, and carry their own
      	representations. This eliminates the need to constantly
      	recompute their attributes, and offers the various processors a
      	uniform interface.  The various initial states of the Processing
      	phase are now encoded using type Processing_In_State, and
      	xxx_State constants.
      	* sem_elab.ads: Update the literals of type
      	Enclosing_Level_Kind.  Add Inline pragmas on several routines.
      	* sem_prag.adb (Process_Inline): Ensure that invocation
      	graph-related data within the body of the main unit is encoded
      	in the ALI file.
      	* sem_util.adb (Enclosing_Generic_Body, Enclosing_Generic_Unit):
      	Code clean up.
      	(Exceptions_OK): Relocated from Sem_Util.
      	(Mark_Save_Invocation_Graph_Of_Body): New routine.
      	* sem_util.ads (Exceptions_OK): Relocated from Sem_Util.
      	(Mark_Save_Invocation_Graph_Of_Body): New routine.
      	* sinfo.adb (Is_Elaboration_Checks_OK_Node): Now applicable to
      	N_Variable_Reference_Marker.
      	(Is_Elaboration_Warnings_OK_Node): Now applicable to
      	N_Expanded_Name, N_Identifier, N_Variable_Reference_Marker.
      	(Is_Read): Use Flag4.
      	(Is_SPARK_Mode_On_Node): New applicable to
      	N_Variable_Reference_Marker.
      	(Is_Write): Use Flag5.
      	(Save_Invocation_Graph_Of_Body): New routine.
      	(Set_Is_Elaboration_Checks_OK_Node): Now applicable to
      	N_Variable_Reference_Marker.
      	(Set_Is_Elaboration_Warnings_OK_Node): Now applicable to
      	N_Expanded_Name, N_Identifier, N_Variable_Reference_Marker.
      	(Set_Is_SPARK_Mode_On_Node): New applicable to
      	N_Variable_Reference_Marker.
      	(Set_Save_Invocation_Graph_Of_Body): New routine.
      	* sinfo.ads: Update the documentation of attributes
      	Is_Elaboration_Checks_OK_Node, Is_Elaboration_Warnings_OK_Node,
      	Is_SPARK_Mode_On_Node.  Update the flag usage of attributes
      	Is_Read, Is_Write.  Add attribute Save_Invocation_Graph_Of_Body
      	and update its occurrence in nodes.
      	(Save_Invocation_Graph_Of_Body): New routine along with pragma
      	Inline.
      	(Set_Save_Invocation_Graph_Of_Body): New routine along with
      	pragma Inline.
      	* switch-b.adb (Scan_Binder_Switches): Refactor the scanning of
      	debug switches.
      	(Scan_Debug_Switches): New routine.
      	* libgnat/g-dynhta.adb, libgnat/g-dynhta.ads (Contains): New routine.
      	* libgnat/g-graphs.adb (Associate_Vertices): Update the use of
      	Component_Vertex_Iterator.
      	(Contains_Component, Contains_Edge, Contains_Vertex, Has_Next):
      	Reimplemented.
      	(Iterate_Component_Vertices): New routine.
      	(Iterate_Vertices): Removed.
      	(Next): Update the parameter profile.
      	(Number_Of_Component_Vertices, Number_Of_Outgoing_Edges): New
      	routines.
      	* libgnat/g-graphs.ads: Update the initialization of
      	No_Component.  Add type Component_Vertex_Iterator.  Remove type
      	Vertex_Iterator.
      	(Has_Next): Add new versions and remove old ones.
      	(Iterate_Component_Vertices): New routine.
      	(Iterate_Vertices): Removed.
      	(Next): Add new versions and remove old ones.
      	(Number_Of_Component_Vertices, Number_Of_Outgoing_Edges): New
      	routines.
      	* libgnat/g-sets.adb (Contains): Reimplemented.
      	* gcc-interface/Make-lang.in (GNATBIND_OBJS): Add
      	GNAT.Dynamic_HTables, GNAT.Graphs and Bindo units.
      	* rtsfind.ads: Remove extra space.
      
      From-SVN: r272976
      Hristian Kirtchev committed
    • [Ada] SPARK pointer support extended to local borrowers and observers · 14bc12f0
      SPARK rules allow local borrowers and observers to be declared. During
      their lifetime, the access to the borrowed/observed object is
      restricted.
      
      There is no impact on compilation.
      
      2019-07-03  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_spark.adb: Add support for locally borrowing and observing
      	a path.
      	(Get_Root_Object): Add parameter Through_Traversal to denote
      	when we are interesting in getting to the traversed parameter.
      	(Is_Prefix_Or_Almost): New function to support detection of
      	illegal access to borrowed or observed paths.
      	(Check_Pragma): Add analysis of assertion pragmas.
      
      From-SVN: r272975
      Yannick Moy committed
    • [Ada] Spurious error with static predicate in generic unit · 558241c0
      This patch fixes a spurious error in a generic unit that invludes a
      subtype with a static predicate, when the type is used in a case
      expression.
      
      2019-07-03  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Build_Predicate_Functions): In a generic context
      	we do not build the bodies of predicate fuctions, but the
      	expression in a static predicate must be elaborated to allow
      	case coverage checking within the generic unit.
      	(Build_Discrete_Static_Predicate): In a generic context, return
      	without building function body once the
      	Static_Discrete_Predicate expression for the type has been
      	constructed.
      
      gcc/testsuite/
      
      	* gnat.dg/predicate6.adb, gnat.dg/predicate6.ads: New testcase.
      	* gnat.dg/static_pred1.adb: Remove expected error.
      
      From-SVN: r272974
      Ed Schonberg committed
    • [Ada] Minor reformatting · b5c8da6b
      2019-07-03  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* bindgen.adb, inline.adb, layout.adb, sem_ch12.adb,
      	sem_ch13.adb, sem_ch7.adb, styleg.adb: Minor reformatting.
      
      From-SVN: r272973
      Hristian Kirtchev committed
    • [Ada] Style check for mixed-case identifiers · c4487c3b
      This patch implements a new switch, -gnatyD, enables a style check that
      requires defining identifiers to be in mixed case.
      
      2019-07-03  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* par-ch3.adb (P_Defining_Identifier): Call
      	Check_Defining_Identifier_Casing.
      	* style.ads, styleg.ads, styleg.adb
      	(Check_Defining_Identifier_Casing): New procedure to check for
      	mixed-case defining identifiers.
      	* stylesw.ads, stylesw.adb (Style_Check_Mixed_Case_Decls): New
      	flag for checking for mixed-case defining identifiers.
      	* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
      	Document new feature.
      	* gnat_ugn.texi: Regenerate.
      
      From-SVN: r272972
      Bob Duff committed
    • [Ada] Extend -gnatw.z warning to array types · bf4f18bd
      The -gnatw.z switch causes the compiler to issue a warning on record
      types subject to both an alignment clause and a size clause, when the
      specified size is not a multiple of the alignment in bits, because this
      means that the Object_Size will be strictly larger than the specified
      size.
      
      It makes sense to extend this warning to array types, but not to the
      cases of bit-packed arrays where the size is not a multiple of storage
      unit and the specified alignment is the minimum one, because there would
      be no way to get rid of it apart from explicitly silencing it.
      
      The compiler must issue the warning:
      
      p.ads:5:03: warning: size is not a multiple of alignment for "Triplet"
      p.ads:5:03: warning: size of 24 specified at line 4
      p.ads:5:03: warning: Object_Size will be increased to 32
      
      on the following package:
      
      package P is
      
        type Triplet is new String (1 .. 3);
        for Triplet'Size use 24;
        for Triplet'Alignment use 4;
      
        type Arr is array (1 .. 7) of Boolean;
        pragma Pack (Arr);
        for Arr'Size use 7;
        for Arr'Alignment use 1;
      
      end P;
      
      2019-07-03  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_ugn/building_executable_programs_with_gnat.rst
      	(Warning message control): Document that -gnatw.z/Z apply to
      	array types.
      	* freeze.adb (Freeze_Entity): Give -gnatw.z warning for array
      	types as well, but not if the specified alignment is the minimum
      	one.
      	* gnat_ugn.texi: Regenerate.
      
      From-SVN: r272971
      Eric Botcazou committed
    • [Ada] Spell "laid" correctly · 1f159b86
      2019-07-03  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* einfo.ads, exp_util.adb, layout.ads, sinfo.ads: Spell "laid"
      	correctly.
      
      From-SVN: r272970
      Bob Duff committed
    • [Ada] Spurious error on dynamic predicate in a generic context · 8334176a
      This patch fixes a spurious error on the conformance checking between
      the expression for an aspect analyzed at the freeze point of the type,
      and the analysis of a copy of the expression performed at the end of the
      enclosing list of declarationss. In a generic context the first may not
      have been analyzed yet and this must be done before the conformance
      check.
      
      2019-07-03  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Analyze_Attribute_Definition_Clause): No error
      	message on attribute applied to a renaming when the renamed
      	object is an aggregate (from code reading).
      	(Check_Aspect_At_End_Of_Declarations): In a generic context
      	where freeze nodes are not generated, the original expression
      	for an aspect may need to be analyzed to precent spurious
      	conformance errors when compared with the expression that is
      	anakyzed at the end of the current declarative list.
      
      gcc/testsuite/
      
      	* gnat.dg/predicate5.adb, gnat.dg/predicate5.ads: New testcase.
      
      From-SVN: r272969
      Ed Schonberg committed
    • [Ada] Fix bogus error on array with overaligned scalar component · 09c9ed5b
      The compiler would wrongly reject an alignment clause larger than 8 on
      the component type of an array of scalars, which is valid albeit
      pathological.
      
      2019-07-03  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* layout.adb (Layout_Type): Do not set the component size of an
      	array with a scalar component if the component type is
      	overaligned.
      
      gcc/testsuite/
      
      	* gnat.dg/alignment14.adb: New testcase.
      
      From-SVN: r272968
      Eric Botcazou committed
    • [Ada] Make loop labels unique for front-end inlined calls · 6cbd53c2
      This patch transforms loop labels in the body of subprograms that are to
      be inlined by the front-end, to prevent accidental duplication of loop
      labels, which might make the resulting source illegal.
      
      ----
      Source program:
      ----
      package P is
         procedure Get_Rom_Addr_Offset
           with Inline_Always;
      end P;
      ----
      package body P is
         procedure Get_Rom_Addr_Offset is
            X : Integer;
         begin
            Main_Block :
            for I in 1 .. 10 loop
               X := 2;
               exit Main_Block when I > 4;
            other_loop:
               for J in character'('a') .. 'z' loop
                  if I < 5 then
                     exit Main_Block when J = 'k';
                  else
                     Exit Other_Loop;
                  end if;
               end loop other_loop;
            end loop Main_Block;
         end Get_Rom_Addr_Offset;
      
         procedure P2 is
         begin
            Main_Block :
            for I in 1 .. 1 loop
               Get_Rom_Addr_Offset;
            end loop Main_Block;
         end P2;
      end P;
      ----
      Command:
      
         gcc -c -gnatN -gnatd.u -gnatDG p.adb
      
      ----
      Output
      ----
      
      package body p is
      
         procedure p__get_rom_addr_offset is
            x : integer;
            other_loop : label
            main_block : label
         begin
            main_block : for i in 1 .. 10 loop
               x := 2;
               exit main_block when i > 4;
               other_loop : for j in 'a' .. 'z' loop
                  if i < 5 then
                     exit main_block when j = 'k';
                  else
                     exit other_loop;
                  end if;
               end loop other_loop;
            end loop main_block;
            return;
         end p__get_rom_addr_offset;
      
         procedure p__p2 is
            main_block : label
         begin
            main_block : for i in 1 .. 1 loop
               B6b : declare
                  x : integer;
                  other_loopL10b : label
                  main_blockL9b : label
               begin
                  main_blockL9b : for i in 1 .. 10 loop
                     x := 2;
                     exit main_blockL9b when i > 4;
                     other_loopL10b : for j in 'a' .. 'z' loop
                        if i < 5 then
                           exit main_blockL9b when j = 'k';
                        else
                           exit other_loopL10b;
                        end if;
                     end loop other_loopL10b;
                  end loop main_blockL9b;
               end B6b;
            end loop main_block;
            return;
         end p__p2;
      begin
         null;
      end p;
      
      2019-07-03  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Make_Loop_Labels_Unique):  New procedure to modify
      	the source code of subprograms that are inlined by the
      	front-end, to prevent accidental duplication between loop labels
      	in the inlined code and the code surrounding the inlined call.
      
      From-SVN: r272967
      Ed Schonberg committed
    • [Ada] Update the section on resolving elaboration circularities · 438d9658
      2019-07-03  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_ugn/elaboration_order_handling_in_gnat.rst: Update
      	the section on resolving elaboration circularities to eliminate
      	certain combinations of switches which together do not produce
      	the desired effect and confuse users.
      	* gnat_ugn.texi: Regenerate.
      
      From-SVN: r272966
      Hristian Kirtchev committed
    • [Ada] Add a gnatbind option to generate C code · 97edd426
      2019-07-03  Arnaud Charlet  <charlet@adacore.com>
      
      gcc/ada/
      
      	* bindgen.adb (Gen_Main): Disable generation of reference to
      	Ada_Main_Program_Name for CCG.
      	* bindusg.adb (Display): Add -G to the command-line usage for
      	gnatbind.
      	* opt.ads (Generate_C_Code): Update comment.
      	* switch-b.adb (Scan_Binder_Switches): Add handling for -G.
      
      From-SVN: r272965
      Arnaud Charlet committed
    • [Ada] Do not consider inlined subprograms when generating C code · 81c10c3f
      2019-07-03  Arnaud Charlet  <charlet@adacore.com>
      
      gcc/ada/
      
      	* sem_ch7.adb (Has_Referencer): Do not consider inlined
      	subprograms when generating C code, which allows us to generate
      	static inline subprograms.
      
      From-SVN: r272964
      Arnaud Charlet committed
    • [Ada] Missing consistency check for constant modifier · 44f83ca4
      This patch fixes an issue whereby instantiations of generic packages
      were incorrectly allowed despite formal and actual subprograms not
      having matching declarations with anonymous constant access type
      parameters.
      
      ------------
      -- Source --
      ------------
      
      -- gen1.ads
      
      package Gen1 is
         generic
            with procedure View (IA : not null access constant Integer);
         procedure Dispatch (IA : access Integer);
      end;
      
      -- gen2.adb
      
      package body Gen1 is
         procedure Dispatch (IA : access Integer) is
         begin
            View (IA);
         end;
      end;
      
      -- bad1.ads
      
      with Gen1;
      package Bad1 is
         procedure Bad_View (IA : not null access Integer);
         procedure Bad_Dispatch is new Gen1.Dispatch (Bad_View);
      end;
      
      -- bad1.adb
      
      package body Bad1 is
         procedure Bad_View (IA : not null access Integer) is
         begin
            IA.all := IA.all + 1;
         end;
      end;
      
      -- gen2.ads
      
      package Gen2 is
         generic
            with procedure View (IA : access constant Integer);
         procedure Dispatch (IA : access Integer);
      end;
      
      -- gen2.adb
      
      package body Gen2 is
         procedure Dispatch (IA : access Integer) is
         begin
            View (IA);
         end;
      end;
      
      -- bad2.ads
      
      with Gen2;
      package Bad2 is
         procedure Bad_View (IA : access Integer);
         procedure Bad_Dispatch is new Gen2.Dispatch (Bad_View);
      end;
      
      -- bad2.adb
      
      package body Bad2 is
         procedure Bad_View (IA : access Integer) is
         begin
            IA.all := IA.all + 1;
         end;
      end;
      
      -----------------
      -- Compilation --
      -----------------
      
      $ gnatmake -q bad1.adb
      $ bad1.ads:4:04: instantiation error at gen1.ads:3
      $ bad1.ads:4:04: not mode conformant with declaration at line 3
      $ bad1.ads:4:04: constant modifier does not match
      $ gnatmake: "bad1.adb" compilation error
      $ gnatmake -q bad2.adb
      $ bad2.ads:4:04: instantiation error at gen2.ads:3
      $ bad2.ads:4:04: not mode conformant with declaration at line 3
      $ bad2.ads:4:04: constant modifier does not match
      $ gnatmake: "bad2.adb" compilation error
      
      2019-07-03  Justin Squirek  <squirek@adacore.com>
      
      gcc/ada/
      
      	* sem_ch6.adb (Check_Conformance): Add expression checking for
      	constant modifiers in anonymous access types (in addition to
      	"non-null" types) so that they are considered "matching" for
      	subsequent conformance tests.
      
      From-SVN: r272963
      Justin Squirek committed
    • [Ada] Clarify wording on documentation for No_Multiple_Elaboration · 3e1199e0
      2019-07-03  Arnaud Charlet  <charlet@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_rm/standard_and_implementation_defined_restrictions.rst:
      	Clarify wording on No_Multiple_Elaboration.
      	* gnat_rm.texi: Regenerate.
      
      From-SVN: r272962
      Arnaud Charlet committed
    • [Ada] Spurious error on predicate of subtype in generic · f51e316c
      This patch fixes a spurious error on a dynamic predicate of a record
      subtype when the expression for the predicate includes a selected
      component that denotes a component of the subtype.
      
      2019-07-03  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch8.adb (Find_Selected_Component): If the prefix is the
      	current instance of a type or subtype, complete the resolution
      	of the name by finding the component of the type denoted by the
      	selector name.
      
      gcc/testsuite/
      
      	* gnat.dg/predicate4.adb, gnat.dg/predicate4_pkg.ads: New
      	testcase.
      
      From-SVN: r272961
      Ed Schonberg committed
    • [Ada] Document that boolean types with convention C now map to C99 bool · 07ec36ee
      2019-07-03  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_rm/interfacing_to_other_languages.rst (Interfacing to C):
      	Document that boolean types with convention C now map to C99 bool.
      	* gnat_rm.texi: Regenerate.
      
      From-SVN: r272960
      Eric Botcazou committed
    • [Ada] Exp_Attr: remove dead code · 4a51756a
      2019-07-03  Javier Miranda  <miranda@adacore.com>
      
      gcc/ada/
      
      	* exp_attr.adb (Expand_Min_Max_Attribute): Code cleanup:
      	removing code that it is now never executed in the CCG compiler
      	(dead code).
      
      From-SVN: r272959
      Javier Miranda committed
    • tree-core.h (enum omp_clause_code): Add OMP_CLAUSE__SCANTEMP_ clause. · 2f6bb511
      	* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE__SCANTEMP_
      	clause.
      	* tree.h (OMP_CLAUSE_DECL): Use OMP_CLAUSE__SCANTEMP_ instead of
      	OMP_CLAUSE__CONDTEMP_ as range's upper bound.
      	(OMP_CLAUSE__SCANTEMP__ALLOC, OMP_CLAUSE__SCANTEMP__CONTROL): Define.
      	* tree.c (omp_clause_num_ops, omp_clause_code_name): Add
      	OMP_CLAUSE__SCANTEMP_ entry.
      	(walk_tree_1): Handle OMP_CLAUSE__SCANTEMP_.
      	* tree-pretty-print.c (dump_omp_clause): Likewise.
      	* tree-nested.c (convert_nonlocal_omp_clauses,
      	convert_local_omp_clauses): Likewise.
      	* omp-general.h (struct omp_for_data): Add have_scantemp and
      	have_nonctrl_scantemp members.
      	* omp-general.c (omp_extract_for_data): Initialize them.
      	* omp-low.c (struct omp_context): Add scan_exclusive member.
      	(scan_omp_1_stmt): Don't unnecessarily mask gimple_omp_for_kind
      	result again with GF_OMP_FOR_KIND_MASK.  Initialize also
      	ctx->scan_exclusive.
      	(lower_rec_simd_input_clauses): Use ctx->scan_exclusive instead
      	of !ctx->scan_inclusive.
      	(lower_rec_input_clauses): Simplify gimplification of dtors using
      	gimplify_and_add.  For non-is_simd test OMP_CLAUSE_REDUCTION_INSCAN
      	rather than rvarp.  Handle OMP_CLAUSE_REDUCTION_INSCAN in worksharing
      	loops.  Don't add barrier for reduction_omp_orig_ref if
      	ctx->scan_??xclusive.
      	(lower_reduction_clauses): Don't do anything for ctx->scan_??xclusive.
      	(lower_omp_scan): Use ctx->scan_exclusive instead
      	of !ctx->scan_inclusive.  Handle worksharing loops with inscan
      	reductions.  Use new_vard != new_var instead of repeated
      	omp_is_reference calls.
      	(omp_find_scan, lower_omp_for_scan): New functions.
      	(lower_omp_for): Call lower_omp_for_scan for worksharing loops with
      	inscan reductions.
      	* omp-expand.c (expand_omp_scantemp_alloc): New function.
      	(expand_omp_for_static_nochunk): Handle fd->have_nonctrl_scantemp
      	and fd->have_scantemp.
      
      	* c-c++-common/gomp/scan-3.c (f1): Don't expect a sorry message.
      	* c-c++-common/gomp/scan-5.c (foo): Likewise.
      
      	* testsuite/libgomp.c++/scan-1.C: New test.
      	* testsuite/libgomp.c++/scan-2.C: New test.
      	* testsuite/libgomp.c++/scan-3.C: New test.
      	* testsuite/libgomp.c++/scan-4.C: New test.
      	* testsuite/libgomp.c++/scan-5.C: New test.
      	* testsuite/libgomp.c++/scan-6.C: New test.
      	* testsuite/libgomp.c++/scan-7.C: New test.
      	* testsuite/libgomp.c++/scan-8.C: New test.
      	* testsuite/libgomp.c/scan-1.c: New test.
      	* testsuite/libgomp.c/scan-2.c: New test.
      	* testsuite/libgomp.c/scan-3.c: New test.
      	* testsuite/libgomp.c/scan-4.c: New test.
      	* testsuite/libgomp.c/scan-5.c: New test.
      	* testsuite/libgomp.c/scan-6.c: New test.
      	* testsuite/libgomp.c/scan-7.c: New test.
      	* testsuite/libgomp.c/scan-8.c: New test.
      
      From-SVN: r272958
      Jakub Jelinek committed
    • gimplify.c (gimplify_scan_omp_clauses): For inscan reductions on worksharing… · 83eb9522
      gimplify.c (gimplify_scan_omp_clauses): For inscan reductions on worksharing loop propagate it as shared clause to...
      
      	* gimplify.c (gimplify_scan_omp_clauses): For inscan reductions
      	on worksharing loop propagate it as shared clause to containing
      	combined parallel.
      
      	* c-omp.c (c_omp_split_clauses): Put OMP_CLAUSE_REDUCTION_INSCAN
      	clauses on OMP_FOR rather than OMP_PARALLEL when OMP_FOR is combined
      	with OMP_PARALLEL.
      
      	* c-c++-common/gomp/scan-5.c: New test.
      
      From-SVN: r272957
      Jakub Jelinek committed
    • omp-expand.c (expand_omp_for_static_nochunk, [...]): For nowait worksharing loop… · 1a39b3d3
      omp-expand.c (expand_omp_for_static_nochunk, [...]): For nowait worksharing loop with conditional lastprivate clause(s)...
      
      	* omp-expand.c (expand_omp_for_static_nochunk,
      	expand_omp_for_static_chunk): For nowait worksharing loop with
      	conditional lastprivate clause(s), emit GOMP_loop_end_nowait call
      	at the end.
      
      	* c-c++-common/gomp/lastprivate-conditional-5.c: New test.
      
      From-SVN: r272956
      Jakub Jelinek committed
    • compiler: rework type and package tracking in exporter · 61a02d1e
          
          Revamps the way the exporter tracks exported types and imported
          packages that need to be mentioned in the export data.
          
          The previous implementation wasn't properly handling the case where an
          exported non-inlinable function refers to an imported type whose
          method set includes an inlinable function whose body makes a call to a
          function in another package that's not directly used in the original
          package.
          
          This patch integrates together two existing traversal helper classes,
          "Collect_references_from_inline" and "Find_types_to_prepare" into a
          single helper "Collect_export_references", so as to have common/shared
          code that looks for indirectly imported packages.
          
          Fixes golang/go#32778
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/183850
      
      From-SVN: r272955
      Ian Lance Taylor committed
    • re PR testsuite/91065 (gcc.dg/plugin/start_unit_plugin.c uses ggc memory without… · 5935baf5
      re PR testsuite/91065 (gcc.dg/plugin/start_unit_plugin.c uses ggc memory without registering a root_tab)
      
              PR testsuite/91065
              * testsuite/gcc.dg/plugin/start_unit_plugin.c: Register a root tab
              to reference fake_var.
      
      From-SVN: r272954
      Joern Rennecke committed
    • Daily bump. · d332da4f
      From-SVN: r272953
      GCC Administrator committed
  2. 02 Jul, 2019 8 commits