From 6782b1ef34e4b6afca51b219792f3e0f26aeff18 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Thu, 17 Jul 2014 09:27:38 +0200 Subject: [PATCH] [multiple changes] 2014-07-17 Gary Dismukes * exp_disp.adb: Minor reformatting. * exp_disp.adb: Minor code reorganization. 2014-07-17 Thomas Quinot * gnat_rm.texi, freeze.adb (Check_Component_Storage_Order): Do not require an explicit SSO attribute definition clause on a composite type just because one of its components has one. 2014-07-17 Robert Dewar * sem_attr.adb (Analyze_Attribute, case Loop_Entry): Rewrite attribute out of existence if the enclosing pragma is ignored. * sem_util.adb: Minor reformatting. 2014-07-17 Ed Schonberg * exp_aggr.adb (Expand_Array_Aggregate): Handle properly an array aggregate expanded into assignments when it appears as a local declaration in an inlined body. 2014-07-17 Doug Rupp * init.c [__ANDROID__]: Modify for ZCX. * exp_aggr.adb: Minor reformatting * sigtramp-armvxw.c, sigtramp-ppcvxw.c: Update comments. 2014-07-17 Robert Dewar * a-strunb-shared.ads, a-stwiun-shared.ads, a-stzunb-shared.ads, exp_ch7.adb, g-pehage.ads, g-socket.ads, gnat_ugn.texi, gnat_ugx.texi, scng.adb: Remove incorrect usage "allow to" and "allows to". 2014-07-17 Robert Dewar * exp_dist.adb: Minor reformatting. From-SVN: r212737 --- gcc/ada/ChangeLog | 39 ++ gcc/ada/a-strunb-shared.ads | 8 +- gcc/ada/a-stwiun-shared.ads | 10 +- gcc/ada/a-stzunb-shared.ads | 10 +- gcc/ada/exp_aggr.adb | 12 +- gcc/ada/exp_ch7.adb | 2 +- gcc/ada/exp_disp.adb | 863 ++++++++++++++++-------------------- gcc/ada/exp_dist.adb | 13 +- gcc/ada/freeze.adb | 29 +- gcc/ada/g-pehage.ads | 6 +- gcc/ada/g-socket.ads | 22 +- gcc/ada/gnat_rm.texi | 22 +- gcc/ada/gnat_ugn.texi | 21 +- gcc/ada/init.c | 34 +- gcc/ada/scng.adb | 4 +- gcc/ada/sem_attr.adb | 37 +- gcc/ada/sem_util.adb | 1 + gcc/ada/sigtramp-armvxw.c | 10 +- gcc/ada/sigtramp-ppcvxw.c | 10 +- 19 files changed, 570 insertions(+), 583 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 3102148e4af..9b591d88ad3 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,42 @@ +2014-07-17 Gary Dismukes + + * exp_disp.adb: Minor reformatting. + * exp_disp.adb: Minor code reorganization. + +2014-07-17 Thomas Quinot + + * gnat_rm.texi, freeze.adb (Check_Component_Storage_Order): Do not + require an explicit SSO attribute definition clause on a composite type + just because one of its components has one. + +2014-07-17 Robert Dewar + + * sem_attr.adb (Analyze_Attribute, case Loop_Entry): Rewrite + attribute out of existence if the enclosing pragma is ignored. + * sem_util.adb: Minor reformatting. + +2014-07-17 Ed Schonberg + + * exp_aggr.adb (Expand_Array_Aggregate): Handle properly an + array aggregate expanded into assignments when it appears as a + local declaration in an inlined body. + +2014-07-17 Doug Rupp + + * init.c [__ANDROID__]: Modify for ZCX. + * exp_aggr.adb: Minor reformatting + * sigtramp-armvxw.c, sigtramp-ppcvxw.c: Update comments. + +2014-07-17 Robert Dewar + + * a-strunb-shared.ads, a-stwiun-shared.ads, a-stzunb-shared.ads, + exp_ch7.adb, g-pehage.ads, g-socket.ads, gnat_ugn.texi, gnat_ugx.texi, + scng.adb: Remove incorrect usage "allow to" and "allows to". + +2014-07-17 Robert Dewar + + * exp_dist.adb: Minor reformatting. + 2014-07-17 Bob Duff * gnat_ugn.texi: Improve documentation of Unrestricted_Access. diff --git a/gcc/ada/a-strunb-shared.ads b/gcc/ada/a-strunb-shared.ads index 3ec961f5c34..1a00780fad7 100644 --- a/gcc/ada/a-strunb-shared.ads +++ b/gcc/ada/a-strunb-shared.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -64,9 +64,9 @@ -- preallocated memory can used later by Append/Insert operations -- without reallocation. - -- Reference counting uses GCC builtin atomic operations, which allows to - -- safely share internal data between Ada tasks. Nevertheless, this doesn't - -- make objects of Unbounded_String thread-safe: each instance can't be + -- Reference counting uses GCC builtin atomic operations, which allows safe + -- sharing of internal data between Ada tasks. Nevertheless, this does not + -- make objects of Unbounded_String thread-safe: an instance cannot be -- accessed by several tasks simultaneously. with Ada.Strings.Maps; diff --git a/gcc/ada/a-stwiun-shared.ads b/gcc/ada/a-stwiun-shared.ads index b3b62afc2bd..20c2d426c1f 100644 --- a/gcc/ada/a-stwiun-shared.ads +++ b/gcc/ada/a-stwiun-shared.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -471,10 +471,10 @@ private -- preallocated memory can used later by Append/Insert operations -- without reallocation. - -- Reference counting uses GCC builtin atomic operations, which allows to - -- safely share internal data between Ada tasks. Nevertheless, this not - -- make objects of Unbounded_Wide_String thread-safe, so each instance - -- can't be accessed by several tasks simultaneously. + -- Reference counting uses GCC builtin atomic operations, which allows safe + -- sharing of internal data between Ada tasks. Nevertheless, this does not + -- make objects of Unbounded_String thread-safe: an instance cannot be + -- accessed by several tasks simultaneously. pragma Stream_Convert (Unbounded_Wide_String, To_Unbounded, To_Wide_String); -- Provide stream routines without dragging in Ada.Streams diff --git a/gcc/ada/a-stzunb-shared.ads b/gcc/ada/a-stzunb-shared.ads index 66c0427d8ac..3c9e016c07b 100644 --- a/gcc/ada/a-stzunb-shared.ads +++ b/gcc/ada/a-stzunb-shared.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2013, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -485,10 +485,10 @@ private -- preallocated memory can used later by Append/Insert operations -- without reallocation. - -- Reference counting uses GCC builtin atomic operations, which allows to - -- safely share internal data between Ada tasks. Nevertheless, this not - -- make objects of Unbounded_Wide_Wide_String thread-safe, so each instance - -- can't be accessed by several tasks simultaneously. + -- Reference counting uses GCC builtin atomic operations, which allows safe + -- sharing of internal data between Ada tasks. Nevertheless, this does not + -- make objects of Unbounded_String thread-safe: an instance cannot be + -- accessed by several tasks simultaneously. pragma Stream_Convert (Unbounded_Wide_Wide_String, To_Unbounded, To_Wide_Wide_String); diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index 1bc6fb6e724..c3d7a1f1d07 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -5235,7 +5235,17 @@ package body Exp_Aggr is Scalar_Comp => Is_Scalar_Type (Ctyp)); end; - if Comes_From_Source (Tmp) then + -- If the aggregate is the expression in a declaration, the expanded + -- code must be inserted after it. The defining entity might not come + -- from source if this is part of an inlined body, but the declaration + -- itself will. + + if Comes_From_Source (Tmp) + or else + (Nkind (Parent (N)) = N_Object_Declaration + and then Comes_From_Source (Parent (N)) + and then Tmp = Defining_Entity (Parent (N))) + then declare Node_After : constant Node_Id := Next (Parent_Node); diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb index 08b47f6d70b..b98362fc70e 100644 --- a/gcc/ada/exp_ch7.adb +++ b/gcc/ada/exp_ch7.adb @@ -215,7 +215,7 @@ package body Exp_Ch7 is -- A classwide type can always potentially have controlled components -- but the record controller of the corresponding actual type may not -- be known at compile time so the dispatch table contains a special - -- field that allows to compute the offset of the record controller + -- field that allows computation of the offset of the record controller -- dynamically. See s-finimp.Deep_Tag_Attach and a-tags.RC_Offset. -- Here is a simple example of the expansion of a controlled block : diff --git a/gcc/ada/exp_disp.adb b/gcc/ada/exp_disp.adb index 34db3123120..e1032bbf4c1 100644 --- a/gcc/ada/exp_disp.adb +++ b/gcc/ada/exp_disp.adb @@ -90,13 +90,13 @@ package body Exp_Disp is -- an alias of a predefined dispatching primitive (i.e. through a renaming) function New_Value (From : Node_Id) return Node_Id; - -- From is the original Expression. New_Value is equivalent to a call - -- to Duplicate_Subexpr with an explicit dereference when From is an - -- access parameter. + -- From is the original Expression. New_Value is equivalent to a call to + -- Duplicate_Subexpr with an explicit dereference when From is an access + -- parameter. function Original_View_In_Visible_Part (Typ : Entity_Id) return Boolean; - -- Check if the type has a private view or if the public view appears - -- in the visible part of a package spec. + -- Check if the type has a private view or if the public view appears in + -- the visible part of a package spec. function Prim_Op_Kind (Prim : Entity_Id; @@ -131,10 +131,10 @@ package body Exp_Disp is return; end if; - -- Apply_Tag_Checks is called directly from the semantics, so we need - -- a check to see whether expansion is active before proceeding. In - -- addition, there is no need to expand the call when compiling under - -- restriction No_Dispatching_Calls; the semantic analyzer has + -- Apply_Tag_Checks is called directly from the semantics, so we + -- need a check to see whether expansion is active before proceeding. + -- In addition, there is no need to expand the call when compiling + -- under restriction No_Dispatching_Calls; the semantic analyzer has -- previously notified the violation of this restriction. if not Expander_Active @@ -221,11 +221,10 @@ package body Exp_Disp is elsif Find_Controlling_Arg (Param) = Ctrl_Arg then null; - -- "=" is the only dispatching operation allowed to get - -- operands with incompatible tags (it just returns false). - -- We use Duplicate_Subexpr_Move_Checks instead of calling - -- Relocate_Node because the value will be duplicated to - -- check the tags. + -- "=" is the only dispatching operation allowed to get operands + -- with incompatible tags (it just returns false). We use + -- Duplicate_Subexpr_Move_Checks instead of calling Relocate_Node + -- because the value will be duplicated to check the tags. elsif Subp = Eq_Prim_Op then null; @@ -251,6 +250,7 @@ package body Exp_Disp is else -- Generate code for tag equality check + -- Perhaps should have Checks.Apply_Tag_Equality_Check??? Insert_Action (Ctrl_Arg, @@ -347,8 +347,8 @@ package body Exp_Disp is Build_Dispatch_Tables (Declarations (Proper_Body (Unit (Library_Unit (D))))); - -- Handle full type declarations and derivations of library - -- level tagged types + -- Handle full type declarations and derivations of library level + -- tagged types elsif Nkind_In (D, N_Full_Type_Declaration, N_Derived_Type_Definition) @@ -497,7 +497,7 @@ package body Exp_Disp is Set_Can_Never_Be_Null (Anon_Type); -- Decorate the size and alignment attributes of the anonymous access - -- type, as required by gigi. + -- type, as required by the back end. Layout_Type (Anon_Type); @@ -537,8 +537,7 @@ package body Exp_Disp is CPP_Typ := Enclosing_CPP_Parent (Typ); Tag_Comp := First_Tag_Component (CPP_Typ); - -- If the number of primitives is already set in the tag component - -- then use it + -- If number of primitives already set in the tag component, use it if Present (Tag_Comp) and then DT_Entry_Count (Tag_Comp) /= No_Uint @@ -693,8 +692,8 @@ package body Exp_Disp is return; end if; - -- Expand_Dispatching_Call is called directly from the semantics, - -- so we only proceed if the expander is active. + -- Expand_Dispatching_Call is called directly from the semantics, so we + -- only proceed if the expander is active. if not Expander_Active @@ -1069,8 +1068,8 @@ package body Exp_Disp is Set_SCIL_Node (SCIL_Related_Node, SCIL_Node); end if; - -- Suppress all checks during the analysis of the expanded code - -- to avoid the generation of spurious warnings under ZFP run-time. + -- Suppress all checks during the analysis of the expanded code to avoid + -- the generation of spurious warnings under ZFP run-time. Analyze_And_Resolve (Call_Node, Call_Typ, Suppress => All_Checks); end Expand_Dispatching_Call; @@ -1246,9 +1245,8 @@ package body Exp_Disp is Analyze (N); - -- If the target is a class-wide interface we change the type of the - -- data returned by IW_Convert to indicate that this is a dispatching - -- call. + -- If target is a class-wide interface, change the type of the data + -- returned by IW_Convert to indicate this is a dispatching call. declare New_Itype : Entity_Id; @@ -1277,8 +1275,8 @@ package body Exp_Disp is if not Is_Access_Type (Etype (N)) then - -- Statically displace the pointer to the object to reference - -- the component containing the secondary dispatch table. + -- Statically displace the pointer to the object to reference the + -- component containing the secondary dispatch table. Rewrite (N, Convert_Tag_To_Interface (Class_Wide_Type (Iface_Typ), @@ -1337,9 +1335,9 @@ package body Exp_Disp is Make_Simple_Return_Statement (Loc, Unchecked_Convert_To (Etype (N), Make_Attribute_Reference (Loc, - Prefix => + Prefix => Make_Selected_Component (Loc, - Prefix => + Prefix => Unchecked_Convert_To (Defining_Identifier (New_Typ_Decl), Make_Identifier (Loc, Name_uO)), @@ -1360,8 +1358,7 @@ package body Exp_Disp is (RTE (RE_Null_Address), Loc)), Then_Statements => New_List ( - Make_Simple_Return_Statement (Loc, - Make_Null (Loc))), + Make_Simple_Return_Statement (Loc, Make_Null (Loc))), Else_Statements => Stats)); end if; @@ -1496,8 +1493,8 @@ package body Exp_Disp is if Actual_Typ = Formal_Typ then null; - -- No need to displace the pointer if the interface type is - -- a parent of the type of the actual because in this case the + -- No need to displace the pointer if the interface type is a + -- parent of the type of the actual because in this case the -- interface primitives are located in the primary dispatch table. elsif Is_Ancestor (Formal_Typ, Actual_Typ, @@ -1505,8 +1502,8 @@ package body Exp_Disp is then null; - -- Implicit conversion to the class-wide formal type to force - -- the displacement of the pointer. + -- Implicit conversion to the class-wide formal type to force the + -- displacement of the pointer. else -- Normally, expansion of actuals for calls to build-in-place @@ -1571,10 +1568,11 @@ package body Exp_Disp is if From_Limited_With (Actual_Typ) then - -- If the type of the actual parameter comes from a limited - -- with-clause and the non-limited view is already available - -- we replace the anonymous access type by a duplicate - -- declaration whose designated type is the non-limited view + -- If the type of the actual parameter comes from a + -- limited with-clause and the non-limited view is already + -- available, we replace the anonymous access type by + -- a duplicate declaration whose designated type is the + -- non-limited view. if Ekind (Actual_DDT) = E_Incomplete_Type and then Present (Non_Limited_View (Actual_DDT)) @@ -1962,12 +1960,12 @@ package body Exp_Disp is Thunk_Code := Make_Subprogram_Body (Loc, - Specification => + Specification => Make_Function_Specification (Loc, Defining_Unit_Name => Thunk_Id, Parameter_Specifications => Formals, Result_Definition => Result_Def), - Declarations => Decl, + Declarations => Decl, Handled_Statement_Sequence => Make_Handled_Sequence_Of_Statements (Loc, Statements => New_List ( @@ -2007,9 +2005,7 @@ package body Exp_Disp is E := Next_Entity (Typ); while Present (E) loop - if Ekind (E) = E_Function - and then Is_Constructor (E) - then + if Ekind (E) = E_Function and then Is_Constructor (E) then return True; end if; @@ -2026,7 +2022,7 @@ package body Exp_Disp is function Has_DT (Typ : Entity_Id) return Boolean is begin return not Is_Interface (Typ) - and then not Restriction_Active (No_Dispatching_Calls); + and then not Restriction_Active (No_Dispatching_Calls); end Has_DT; ---------------------------------- @@ -2143,15 +2139,15 @@ package body Exp_Disp is begin -- In VM targets we don't restrict the functionality of this test to -- compiling in Ada 2005 mode since in VM targets any tagged type has - -- these primitives + -- these primitives. return (Ada_Version >= Ada_2005 or else not Tagged_Type_Expansion) - and then (Chars (E) = Name_uDisp_Asynchronous_Select or else - Chars (E) = Name_uDisp_Conditional_Select or else - Chars (E) = Name_uDisp_Get_Prim_Op_Kind or else - Chars (E) = Name_uDisp_Get_Task_Id or else - Chars (E) = Name_uDisp_Requeue or else - Chars (E) = Name_uDisp_Timed_Select); + and then Nam_In (Chars (E), Name_uDisp_Asynchronous_Select, + Name_uDisp_Conditional_Select, + Name_uDisp_Get_Prim_Op_Kind, + Name_uDisp_Get_Task_Id, + Name_uDisp_Requeue, + Name_uDisp_Timed_Select); end Is_Predefined_Interface_Primitive; ---------------------------------------- @@ -2234,13 +2230,15 @@ package body Exp_Disp is if Is_Interface (Typ) then return Make_Subprogram_Body (Loc, - Specification => Make_Disp_Asynchronous_Select_Spec (Typ), - Declarations => New_List, + Specification => + Make_Disp_Asynchronous_Select_Spec (Typ), + Declarations => New_List, Handled_Statement_Sequence => Make_Handled_Sequence_Of_Statements (Loc, - New_List (Make_Assignment_Statement (Loc, - Name => Make_Identifier (Loc, Name_uF), - Expression => New_Occurrence_Of (Standard_False, Loc))))); + New_List ( + Make_Assignment_Statement (Loc, + Name => Make_Identifier (Loc, Name_uF), + Expression => New_Occurrence_Of (Standard_False, Loc))))); end if; if Is_Concurrent_Record_Type (Typ) then @@ -2261,7 +2259,7 @@ package body Exp_Disp is else Tag_Node := Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Typ, Loc), + Prefix => New_Occurrence_Of (Typ, Loc), Attribute_Name => Name_Tag); end if; @@ -2269,16 +2267,14 @@ package body Exp_Disp is Make_Object_Declaration (Loc, Defining_Identifier => Make_Defining_Identifier (Loc, Name_uI), - Object_Definition => + Object_Definition => New_Occurrence_Of (Standard_Integer, Loc), - Expression => + Expression => Make_Function_Call (Loc, - Name => + Name => New_Occurrence_Of (RTE (RE_Get_Entry_Index), Loc), Parameter_Associations => - New_List ( - Tag_Node, - Make_Identifier (Loc, Name_uS))))); + New_List (Tag_Node, Make_Identifier (Loc, Name_uS))))); if Ekind (Conc_Typ) = E_Protected_Type then @@ -2288,9 +2284,8 @@ package body Exp_Disp is Com_Block := Make_Temporary (Loc, 'B'); Append_To (Decls, Make_Object_Declaration (Loc, - Defining_Identifier => - Com_Block, - Object_Definition => + Defining_Identifier => Com_Block, + Object_Definition => New_Occurrence_Of (RTE (RE_Communication_Block), Loc))); -- Build T._object'Access for calls below @@ -2320,7 +2315,7 @@ package body Exp_Disp is Append_To (Stmts, Make_Procedure_Call_Statement (Loc, - Name => + Name => New_Occurrence_Of (RTE (RE_Protected_Entry_Call), Loc), Parameter_Associations => New_List ( @@ -2351,10 +2346,9 @@ package body Exp_Disp is Expression => Make_Unchecked_Type_Conversion (Loc, Subtype_Mark => - New_Occurrence_Of ( - RTE (RE_Dummy_Communication_Block), Loc), - Expression => - New_Occurrence_Of (Com_Block, Loc)))); + New_Occurrence_Of + (RTE (RE_Dummy_Communication_Block), Loc), + Expression => New_Occurrence_Of (Com_Block, Loc)))); -- Generate: -- F := False; @@ -2380,7 +2374,7 @@ package body Exp_Disp is Append_To (Stmts, Make_Procedure_Call_Statement (Loc, - Name => + Name => New_Occurrence_Of (RTE (RE_Task_Entry_Call), Loc), Parameter_Associations => New_List ( @@ -2391,7 +2385,7 @@ package body Exp_Disp is Make_Unchecked_Type_Conversion (Loc, -- entry index Subtype_Mark => New_Occurrence_Of (RTE (RE_Task_Entry_Index), Loc), - Expression => Make_Identifier (Loc, Name_uI)), + Expression => Make_Identifier (Loc, Name_uI)), Make_Identifier (Loc, Name_uP), -- parameter block New_Occurrence_Of -- Asynchronous_Call @@ -2442,38 +2436,29 @@ package body Exp_Disp is Append_List_To (Params, New_List ( Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uT), - Parameter_Type => - New_Occurrence_Of (Typ, Loc), - In_Present => True, - Out_Present => True), + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uT), + Parameter_Type => New_Occurrence_Of (Typ, Loc), + In_Present => True, + Out_Present => True), Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uS), - Parameter_Type => - New_Occurrence_Of (Standard_Integer, Loc)), + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uS), + Parameter_Type => New_Occurrence_Of (Standard_Integer, Loc)), Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uP), - Parameter_Type => - New_Occurrence_Of (RTE (RE_Address), Loc)), + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uP), + Parameter_Type => New_Occurrence_Of (RTE (RE_Address), Loc)), Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uB), - Parameter_Type => + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uB), + Parameter_Type => New_Occurrence_Of (RTE (RE_Dummy_Communication_Block), Loc), - Out_Present => True), + Out_Present => True), Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uF), - Parameter_Type => - New_Occurrence_Of (Standard_Boolean, Loc), - Out_Present => True))); + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uF), + Parameter_Type => New_Occurrence_Of (Standard_Boolean, Loc), + Out_Present => True))); return Make_Procedure_Specification (Loc, @@ -2573,10 +2558,9 @@ package body Exp_Disp is if Is_Interface (Typ) then return Make_Subprogram_Body (Loc, - Specification => + Specification => Make_Disp_Conditional_Select_Spec (Typ), - Declarations => - No_List, + Declarations => No_List, Handled_Statement_Sequence => Make_Handled_Sequence_Of_Statements (Loc, New_List (Make_Assignment_Statement (Loc, @@ -2595,9 +2579,8 @@ package body Exp_Disp is Append_To (Decls, Make_Object_Declaration (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uI), - Object_Definition => + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uI), + Object_Definition => New_Occurrence_Of (Standard_Integer, Loc))); -- Generate: @@ -2622,9 +2605,8 @@ package body Exp_Disp is Blk_Nam := Make_Temporary (Loc, 'B'); Append_To (Decls, Make_Object_Declaration (Loc, - Defining_Identifier => - Blk_Nam, - Object_Definition => + Defining_Identifier => Blk_Nam, + Object_Definition => New_Occurrence_Of (RTE (RE_Communication_Block), Loc))); -- Generate: @@ -2641,21 +2623,20 @@ package body Exp_Disp is else Tag_Node := Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Typ, Loc), + Prefix => New_Occurrence_Of (Typ, Loc), Attribute_Name => Name_Tag); end if; Append_To (Stmts, Make_Assignment_Statement (Loc, - Name => Make_Identifier (Loc, Name_uI), + Name => Make_Identifier (Loc, Name_uI), Expression => Make_Function_Call (Loc, - Name => + Name => New_Occurrence_Of (RTE (RE_Get_Entry_Index), Loc), - Parameter_Associations => - New_List ( - Tag_Node, - Make_Identifier (Loc, Name_uS))))); + Parameter_Associations => New_List ( + Tag_Node, + Make_Identifier (Loc, Name_uS))))); if Ekind (Conc_Typ) = E_Protected_Type then @@ -2684,10 +2665,9 @@ package body Exp_Disp is Append_To (Stmts, Make_Procedure_Call_Statement (Loc, - Name => + Name => New_Occurrence_Of (RTE (RE_Protected_Entry_Call), Loc), - Parameter_Associations => - New_List ( + Parameter_Associations => New_List ( Obj_Ref, Make_Unchecked_Type_Conversion (Loc, -- entry index @@ -2710,11 +2690,10 @@ package body Exp_Disp is Append_To (Stmts, Make_Procedure_Call_Statement (Loc, - Name => + Name => New_Occurrence_Of (RTE (RE_Protected_Single_Entry_Call), Loc), - Parameter_Associations => - New_List ( + Parameter_Associations => New_List ( Obj_Ref, Make_Attribute_Reference (Loc, @@ -2740,10 +2719,9 @@ package body Exp_Disp is Make_Op_Not (Loc, Right_Opnd => Make_Function_Call (Loc, - Name => + Name => New_Occurrence_Of (RTE (RE_Cancelled), Loc), - Parameter_Associations => - New_List ( + Parameter_Associations => New_List ( New_Occurrence_Of (Blk_Nam, Loc)))))); else pragma Assert (Ekind (Conc_Typ) = E_Task_Type); @@ -2761,10 +2739,9 @@ package body Exp_Disp is Append_To (Stmts, Make_Procedure_Call_Statement (Loc, - Name => + Name => New_Occurrence_Of (RTE (RE_Task_Entry_Call), Loc), - Parameter_Associations => - New_List ( + Parameter_Associations => New_List ( Make_Selected_Component (Loc, -- T._task_id Prefix => Make_Identifier (Loc, Name_uT), @@ -2828,38 +2805,29 @@ package body Exp_Disp is Append_List_To (Params, New_List ( Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uT), - Parameter_Type => - New_Occurrence_Of (Typ, Loc), - In_Present => True, - Out_Present => True), + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uT), + Parameter_Type => New_Occurrence_Of (Typ, Loc), + In_Present => True, + Out_Present => True), Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uS), - Parameter_Type => - New_Occurrence_Of (Standard_Integer, Loc)), + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uS), + Parameter_Type => New_Occurrence_Of (Standard_Integer, Loc)), Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uP), - Parameter_Type => - New_Occurrence_Of (RTE (RE_Address), Loc)), + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uP), + Parameter_Type => New_Occurrence_Of (RTE (RE_Address), Loc)), Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uC), - Parameter_Type => + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uC), + Parameter_Type => New_Occurrence_Of (RTE (RE_Prim_Op_Kind), Loc), - Out_Present => True), + Out_Present => True), Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uF), - Parameter_Type => - New_Occurrence_Of (Standard_Boolean, Loc), - Out_Present => True))); + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uF), + Parameter_Type => New_Occurrence_Of (Standard_Boolean, Loc), + Out_Present => True))); return Make_Procedure_Specification (Loc, @@ -2871,9 +2839,7 @@ package body Exp_Disp is -- Make_Disp_Get_Prim_Op_Kind_Body -- ------------------------------------- - function Make_Disp_Get_Prim_Op_Kind_Body - (Typ : Entity_Id) return Node_Id - is + function Make_Disp_Get_Prim_Op_Kind_Body (Typ : Entity_Id) return Node_Id is Loc : constant Source_Ptr := Sloc (Typ); Tag_Node : Node_Id; @@ -2883,10 +2849,9 @@ package body Exp_Disp is if Is_Interface (Typ) then return Make_Subprogram_Body (Loc, - Specification => + Specification => Make_Disp_Get_Prim_Op_Kind_Spec (Typ), - Declarations => - New_List, + Declarations => New_List, Handled_Statement_Sequence => Make_Handled_Sequence_Of_Statements (Loc, New_List (Make_Null_Statement (Loc)))); @@ -2907,22 +2872,20 @@ package body Exp_Disp is else Tag_Node := Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Typ, Loc), + Prefix => New_Occurrence_Of (Typ, Loc), Attribute_Name => Name_Tag); end if; return Make_Subprogram_Body (Loc, - Specification => + Specification => Make_Disp_Get_Prim_Op_Kind_Spec (Typ), - Declarations => - New_List, + Declarations => New_List, Handled_Statement_Sequence => Make_Handled_Sequence_Of_Statements (Loc, New_List ( Make_Assignment_Statement (Loc, - Name => - Make_Identifier (Loc, Name_uC), + Name => Make_Identifier (Loc, Name_uC), Expression => Make_Function_Call (Loc, Name => @@ -2941,8 +2904,7 @@ package body Exp_Disp is is Loc : constant Source_Ptr := Sloc (Typ); Def_Id : constant Node_Id := - Make_Defining_Identifier (Loc, - Name_uDisp_Get_Prim_Op_Kind); + Make_Defining_Identifier (Loc, Name_uDisp_Get_Prim_Op_Kind); Params : constant List_Id := New_List; begin @@ -2955,25 +2917,20 @@ package body Exp_Disp is Append_List_To (Params, New_List ( Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uT), - Parameter_Type => - New_Occurrence_Of (Typ, Loc), - In_Present => True, - Out_Present => True), + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uT), + Parameter_Type => New_Occurrence_Of (Typ, Loc), + In_Present => True, + Out_Present => True), Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uS), - Parameter_Type => - New_Occurrence_Of (Standard_Integer, Loc)), + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uS), + Parameter_Type => New_Occurrence_Of (Standard_Integer, Loc)), Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uC), - Parameter_Type => + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uC), + Parameter_Type => New_Occurrence_Of (RTE (RE_Prim_Op_Kind), Loc), - Out_Present => True))); + Out_Present => True))); return Make_Procedure_Specification (Loc, @@ -3004,9 +2961,8 @@ package body Exp_Disp is Make_Simple_Return_Statement (Loc, Expression => Make_Unchecked_Type_Conversion (Loc, - Subtype_Mark => - New_Occurrence_Of (RTE (RE_Address), Loc), - Expression => + Subtype_Mark => New_Occurrence_Of (RTE (RE_Address), Loc), + Expression => Make_Selected_Component (Loc, Prefix => Make_Identifier (Loc, Name_uT), Selector_Name => Make_Identifier (Loc, Name_uTask_Id)))); @@ -3019,19 +2975,15 @@ package body Exp_Disp is Ret := Make_Simple_Return_Statement (Loc, - Expression => - New_Occurrence_Of (RTE (RE_Null_Address), Loc)); + Expression => New_Occurrence_Of (RTE (RE_Null_Address), Loc)); end if; return Make_Subprogram_Body (Loc, - Specification => - Make_Disp_Get_Task_Id_Spec (Typ), - Declarations => - New_List, + Specification => Make_Disp_Get_Task_Id_Spec (Typ), + Declarations => New_List, Handled_Statement_Sequence => - Make_Handled_Sequence_Of_Statements (Loc, - New_List (Ret))); + Make_Handled_Sequence_Of_Statements (Loc, New_List (Ret))); end Make_Disp_Get_Task_Id_Body; -------------------------------- @@ -3048,15 +3000,13 @@ package body Exp_Disp is return Make_Function_Specification (Loc, - Defining_Unit_Name => + Defining_Unit_Name => Make_Defining_Identifier (Loc, Name_uDisp_Get_Task_Id), Parameter_Specifications => New_List ( Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uT), - Parameter_Type => - New_Occurrence_Of (Typ, Loc))), - Result_Definition => + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uT), + Parameter_Type => New_Occurrence_Of (Typ, Loc))), + Result_Definition => New_Occurrence_Of (RTE (RE_Address), Loc)); end Make_Disp_Get_Task_Id_Spec; @@ -3082,10 +3032,8 @@ package body Exp_Disp is then return Make_Subprogram_Body (Loc, - Specification => - Make_Disp_Requeue_Spec (Typ), - Declarations => - No_List, + Specification => Make_Disp_Requeue_Spec (Typ), + Declarations => No_List, Handled_Statement_Sequence => Make_Handled_Sequence_Of_Statements (Loc, New_List (Make_Null_Statement (Loc)))); @@ -3125,8 +3073,8 @@ package body Exp_Disp is Make_Procedure_Call_Statement (Loc, Name => - New_Occurrence_Of ( - RTE (RE_Requeue_Protected_Entry), Loc), + New_Occurrence_Of + (RTE (RE_Requeue_Protected_Entry), Loc), Parameter_Associations => New_List ( @@ -3140,7 +3088,7 @@ package body Exp_Disp is Make_Attribute_Reference (Loc, -- O._object'Acc Attribute_Name => Name_Unchecked_Access, - Prefix => + Prefix => Make_Selected_Component (Loc, Prefix => Make_Identifier (Loc, Name_uO), @@ -3149,8 +3097,8 @@ package body Exp_Disp is Make_Unchecked_Type_Conversion (Loc, -- entry index Subtype_Mark => - New_Occurrence_Of ( - RTE (RE_Protected_Entry_Index), Loc), + New_Occurrence_Of + (RTE (RE_Protected_Entry_Index), Loc), Expression => Make_Identifier (Loc, Name_uI)), Make_Identifier (Loc, Name_uA)))), -- abort status @@ -3162,30 +3110,29 @@ package body Exp_Disp is Make_Procedure_Call_Statement (Loc, Name => - New_Occurrence_Of ( - RTE (RE_Requeue_Task_To_Protected_Entry), Loc), + New_Occurrence_Of + (RTE (RE_Requeue_Task_To_Protected_Entry), Loc), Parameter_Associations => New_List ( Make_Attribute_Reference (Loc, -- O._object'Acc - Attribute_Name => - Name_Unchecked_Access, - Prefix => + Attribute_Name => Name_Unchecked_Access, + Prefix => Make_Selected_Component (Loc, - Prefix => + Prefix => Make_Identifier (Loc, Name_uO), Selector_Name => Make_Identifier (Loc, Name_uObject))), Make_Unchecked_Type_Conversion (Loc, -- entry index Subtype_Mark => - New_Occurrence_Of ( - RTE (RE_Protected_Entry_Index), Loc), - Expression => - Make_Identifier (Loc, Name_uI)), + New_Occurrence_Of + (RTE (RE_Protected_Entry_Index), Loc), + Expression => Make_Identifier (Loc, Name_uI)), Make_Identifier (Loc, Name_uA)))))); -- abort status end if; + else pragma Assert (Is_Task_Type (Conc_Typ)); @@ -3240,7 +3187,8 @@ package body Exp_Disp is -- Call to Requeue_Task_Entry Make_Procedure_Call_Statement (Loc, - Name => New_Occurrence_Of (RTE (RE_Requeue_Task_Entry), Loc), + Name => + New_Occurrence_Of (RTE (RE_Requeue_Task_Entry), Loc), Parameter_Associations => New_List ( @@ -3261,10 +3209,8 @@ package body Exp_Disp is return Make_Subprogram_Body (Loc, - Specification => - Make_Disp_Requeue_Spec (Typ), - Declarations => - New_List, + Specification => Make_Disp_Requeue_Spec (Typ), + Declarations => New_List, Handled_Statement_Sequence => Make_Handled_Sequence_Of_Statements (Loc, Stmts)); end Make_Disp_Requeue_Body; @@ -3296,39 +3242,38 @@ package body Exp_Disp is Defining_Unit_Name => Make_Defining_Identifier (Loc, Name_uDisp_Requeue), - Parameter_Specifications => - New_List ( + Parameter_Specifications => New_List ( Make_Parameter_Specification (Loc, -- O Defining_Identifier => Make_Defining_Identifier (Loc, Name_uO), - Parameter_Type => + Parameter_Type => New_Occurrence_Of (Typ, Loc), - In_Present => True, - Out_Present => True), + In_Present => True, + Out_Present => True), Make_Parameter_Specification (Loc, -- F Defining_Identifier => Make_Defining_Identifier (Loc, Name_uF), - Parameter_Type => + Parameter_Type => New_Occurrence_Of (Standard_Boolean, Loc)), Make_Parameter_Specification (Loc, -- P Defining_Identifier => Make_Defining_Identifier (Loc, Name_uP), - Parameter_Type => + Parameter_Type => New_Occurrence_Of (RTE (RE_Address), Loc)), Make_Parameter_Specification (Loc, -- I Defining_Identifier => Make_Defining_Identifier (Loc, Name_uI), - Parameter_Type => + Parameter_Type => New_Occurrence_Of (Standard_Integer, Loc)), Make_Parameter_Specification (Loc, -- A Defining_Identifier => Make_Defining_Identifier (Loc, Name_uA), - Parameter_Type => + Parameter_Type => New_Occurrence_Of (Standard_Boolean, Loc)))); end Make_Disp_Requeue_Spec; @@ -3429,10 +3374,8 @@ package body Exp_Disp is if Is_Interface (Typ) then return Make_Subprogram_Body (Loc, - Specification => - Make_Disp_Timed_Select_Spec (Typ), - Declarations => - New_List, + Specification => Make_Disp_Timed_Select_Spec (Typ), + Declarations => New_List, Handled_Statement_Sequence => Make_Handled_Sequence_Of_Statements (Loc, New_List ( @@ -3493,10 +3436,9 @@ package body Exp_Disp is Expression => Make_Function_Call (Loc, Name => New_Occurrence_Of (RTE (RE_Get_Entry_Index), Loc), - Parameter_Associations => - New_List ( - Tag_Node, - Make_Identifier (Loc, Name_uS))))); + Parameter_Associations => New_List ( + Tag_Node, + Make_Identifier (Loc, Name_uS))))); -- Protected case @@ -3539,21 +3481,19 @@ package body Exp_Disp is Name => New_Occurrence_Of (RTE (RE_Timed_Protected_Entry_Call), Loc), - Parameter_Associations => - New_List ( - Obj_Ref, + Parameter_Associations => New_List ( + Obj_Ref, - Make_Unchecked_Type_Conversion (Loc, -- entry index - Subtype_Mark => - New_Occurrence_Of - (RTE (RE_Protected_Entry_Index), Loc), - Expression => - Make_Identifier (Loc, Name_uI)), + Make_Unchecked_Type_Conversion (Loc, -- entry index + Subtype_Mark => + New_Occurrence_Of + (RTE (RE_Protected_Entry_Index), Loc), + Expression => Make_Identifier (Loc, Name_uI)), - Make_Identifier (Loc, Name_uP), -- parameter block - Make_Identifier (Loc, Name_uD), -- delay - Make_Identifier (Loc, Name_uM), -- delay mode - Make_Identifier (Loc, Name_uF)))); -- status flag + Make_Identifier (Loc, Name_uP), -- parameter block + Make_Identifier (Loc, Name_uD), -- delay + Make_Identifier (Loc, Name_uM), -- delay mode + Make_Identifier (Loc, Name_uF)))); -- status flag when others => raise Program_Error; @@ -3579,24 +3519,23 @@ package body Exp_Disp is Append_To (Stmts, Make_Procedure_Call_Statement (Loc, - Name => + Name => New_Occurrence_Of (RTE (RE_Timed_Task_Entry_Call), Loc), - Parameter_Associations => - New_List ( - Make_Selected_Component (Loc, -- T._task_id - Prefix => Make_Identifier (Loc, Name_uT), - Selector_Name => Make_Identifier (Loc, Name_uTask_Id)), + Parameter_Associations => New_List ( + Make_Selected_Component (Loc, -- T._task_id + Prefix => Make_Identifier (Loc, Name_uT), + Selector_Name => Make_Identifier (Loc, Name_uTask_Id)), - Make_Unchecked_Type_Conversion (Loc, -- entry index - Subtype_Mark => - New_Occurrence_Of (RTE (RE_Task_Entry_Index), Loc), - Expression => Make_Identifier (Loc, Name_uI)), + Make_Unchecked_Type_Conversion (Loc, -- entry index + Subtype_Mark => + New_Occurrence_Of (RTE (RE_Task_Entry_Index), Loc), + Expression => Make_Identifier (Loc, Name_uI)), - Make_Identifier (Loc, Name_uP), -- parameter block - Make_Identifier (Loc, Name_uD), -- delay - Make_Identifier (Loc, Name_uM), -- delay mode - Make_Identifier (Loc, Name_uF)))); -- status flag + Make_Identifier (Loc, Name_uP), -- parameter block + Make_Identifier (Loc, Name_uD), -- delay + Make_Identifier (Loc, Name_uM), -- delay mode + Make_Identifier (Loc, Name_uF)))); -- status flag end if; else @@ -3647,51 +3586,38 @@ package body Exp_Disp is Append_List_To (Params, New_List ( Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uT), - Parameter_Type => - New_Occurrence_Of (Typ, Loc), - In_Present => True, - Out_Present => True), + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uT), + Parameter_Type => New_Occurrence_Of (Typ, Loc), + In_Present => True, + Out_Present => True), Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uS), - Parameter_Type => - New_Occurrence_Of (Standard_Integer, Loc)), + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uS), + Parameter_Type => New_Occurrence_Of (Standard_Integer, Loc)), Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uP), - Parameter_Type => - New_Occurrence_Of (RTE (RE_Address), Loc)), + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uP), + Parameter_Type => New_Occurrence_Of (RTE (RE_Address), Loc)), Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uD), - Parameter_Type => - New_Occurrence_Of (Standard_Duration, Loc)), + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uD), + Parameter_Type => New_Occurrence_Of (Standard_Duration, Loc)), Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uM), - Parameter_Type => - New_Occurrence_Of (Standard_Integer, Loc)), + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uM), + Parameter_Type => New_Occurrence_Of (Standard_Integer, Loc)), Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uC), - Parameter_Type => + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uC), + Parameter_Type => New_Occurrence_Of (RTE (RE_Prim_Op_Kind), Loc), - Out_Present => True))); + Out_Present => True))); Append_To (Params, Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uF), - Parameter_Type => - New_Occurrence_Of (Standard_Boolean, Loc), - Out_Present => True)); + Defining_Identifier => Make_Defining_Identifier (Loc, Name_uF), + Parameter_Type => New_Occurrence_Of (Standard_Boolean, Loc), + Out_Present => True)); return Make_Procedure_Specification (Loc, @@ -3704,17 +3630,17 @@ package body Exp_Disp is ------------- -- The frontend supports two models for expanding dispatch tables - -- associated with library-level defined tagged types: statically - -- and non-statically allocated dispatch tables. In the former case - -- the object containing the dispatch table is constant and it is - -- initialized by means of a positional aggregate. In the latter case, - -- the object containing the dispatch table is a variable which is - -- initialized by means of assignments. + -- associated with library-level defined tagged types: statically and + -- non-statically allocated dispatch tables. In the former case the object + -- containing the dispatch table is constant and it is initialized by means + -- of a positional aggregate. In the latter case, the object containing + -- the dispatch table is a variable which is initialized by means of + -- assignments. -- In case of locally defined tagged types, the object containing the - -- object containing the dispatch table is always a variable (instead - -- of a constant). This is currently required to give support to late - -- overriding of primitives. For example: + -- object containing the dispatch table is always a variable (instead of a + -- constant). This is currently required to give support to late overriding + -- of primitives. For example: -- procedure Example is -- package Pkg is @@ -3826,7 +3752,6 @@ package body Exp_Disp is or else not Used_As_Generic_Actual (T) then return False; - else Gen_Par := Generic_Parent (Parent (Current_Scope)); end if; @@ -3834,7 +3759,7 @@ package body Exp_Disp is F := First (Generic_Formal_Declarations - (Unit_Declaration_Node (Gen_Par))); + (Unit_Declaration_Node (Gen_Par))); while Present (F) loop if Ekind (Defining_Identifier (F)) = E_Incomplete_Type then return True; @@ -3864,8 +3789,8 @@ package body Exp_Disp is Error_Msg_NE ("declaration must appear after completion of type &", N, Typ); Error_Msg_NE - ("\which is an untagged type in the profile of" - & " primitive operation & declared#", N, Subp); + ("\which is an untagged type in the profile of " + & "primitive operation & declared#", N, Subp); else Comp := Private_Component (Typ); @@ -3873,19 +3798,18 @@ package body Exp_Disp is if not Is_Tagged_Type (Typ) and then Present (Comp) and then not Is_Frozen (Comp) - and then - not Is_Actual_For_Formal_Incomplete_Type (Comp) + and then not Is_Actual_For_Formal_Incomplete_Type (Comp) then Error_Msg_Sloc := Sloc (Subp); Error_Msg_Node_2 := Subp; Error_Msg_Name_1 := Chars (Tagged_Type); Error_Msg_NE ("declaration must appear after completion of type &", - N, Comp); + N, Comp); Error_Msg_NE - ("\which is a component of untagged type& in the profile of" - & " primitive & of type % that is frozen by the declaration ", - N, Typ); + ("\which is a component of untagged type& in the profile " + & "of primitive & of type % that is frozen by the " + & "declaration ", N, Typ); end if; end if; end Check_Premature_Freezing; @@ -4081,8 +4005,7 @@ package body Exp_Disp is end loop; New_Node := - Make_Aggregate (Loc, - Expressions => Prim_Ops_Aggr_List); + Make_Aggregate (Loc, Expressions => Prim_Ops_Aggr_List); -- Remember aggregates initializing dispatch tables @@ -4162,7 +4085,7 @@ package body Exp_Disp is Append_To (DT_Aggr_List, Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Predef_Prims, Loc), + Prefix => New_Occurrence_Of (Predef_Prims, Loc), Attribute_Name => Name_Address)); -- Note: The correct value of Offset_To_Top will be set by the init @@ -4224,7 +4147,7 @@ package body Exp_Disp is Append_To (OSD_Aggr_List, Make_Component_Association (Loc, - Choices => New_List ( + Choices => New_List ( Make_Integer_Literal (Loc, DT_Position (Prim_Alias))), Expression => @@ -4249,7 +4172,7 @@ package body Exp_Disp is Make_Subtype_Indication (Loc, Subtype_Mark => New_Occurrence_Of (RTE (RE_Object_Specific_Data), Loc), - Constraint => + Constraint => Make_Index_Or_Discriminant_Constraint (Loc, Constraints => New_List ( Make_Integer_Literal (Loc, Nb_Prim)))), @@ -4258,14 +4181,14 @@ package body Exp_Disp is Make_Aggregate (Loc, Component_Associations => New_List ( Make_Component_Association (Loc, - Choices => New_List ( + Choices => New_List ( New_Occurrence_Of (RTE_Record_Component (RE_OSD_Num_Prims), Loc)), Expression => Make_Integer_Literal (Loc, Nb_Prim)), Make_Component_Association (Loc, - Choices => New_List ( + Choices => New_List ( New_Occurrence_Of (RTE_Record_Component (RE_OSD_Table), Loc)), Expression => Make_Aggregate (Loc, @@ -4277,7 +4200,7 @@ package body Exp_Disp is Chars => Name_Alignment, Expression => Make_Attribute_Reference (Loc, - Prefix => + Prefix => New_Occurrence_Of (RTE (RE_Integer_Address), Loc), Attribute_Name => Name_Alignment))); @@ -4286,7 +4209,7 @@ package body Exp_Disp is Append_To (DT_Aggr_List, Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (OSD, Loc), + Prefix => New_Occurrence_Of (OSD, Loc), Attribute_Name => Name_Address)); end if; @@ -4675,15 +4598,16 @@ package body Exp_Disp is -- Build the secondary table containing pointers to thunks Make_Secondary_DT - (Typ => Typ, - Iface => Base_Type (Related_Type (Node (AI_Tag_Comp))), - Suffix_Index => Suffix_Index, - Num_Iface_Prims => UI_To_Int - (DT_Entry_Count (Node (AI_Tag_Comp))), - Iface_DT_Ptr => Node (AI_Tag_Elmt), + (Typ => Typ, + Iface => Base_Type + (Related_Type (Node (AI_Tag_Comp))), + Suffix_Index => Suffix_Index, + Num_Iface_Prims => UI_To_Int + (DT_Entry_Count (Node (AI_Tag_Comp))), + Iface_DT_Ptr => Node (AI_Tag_Elmt), Predef_Prims_Ptr => Node (Next_Elmt (AI_Tag_Elmt)), - Build_Thunks => True, - Result => Result); + Build_Thunks => True, + Result => Result); -- Skip secondary dispatch table referencing thunks to predefined -- primitives. @@ -4762,7 +4686,7 @@ package body Exp_Disp is Chars => Name_Alignment, Expression => Make_Attribute_Reference (Loc, - Prefix => + Prefix => New_Occurrence_Of (RTE (RE_Integer_Address), Loc), Attribute_Name => Name_Alignment))); @@ -4774,12 +4698,12 @@ package body Exp_Disp is Expression => Unchecked_Convert_To (RTE (RE_Tag), Make_Attribute_Reference (Loc, - Prefix => + Prefix => Make_Selected_Component (Loc, - Prefix => New_Occurrence_Of (DT, Loc), - Selector_Name => - New_Occurrence_Of - (RTE_Record_Component (RE_NDT_Prims_Ptr), Loc)), + Prefix => New_Occurrence_Of (DT, Loc), + Selector_Name => + New_Occurrence_Of + (RTE_Record_Component (RE_NDT_Prims_Ptr), Loc)), Attribute_Name => Name_Address)))); Set_Is_Statically_Allocated (DT_Ptr, @@ -4821,8 +4745,9 @@ package body Exp_Disp is Make_Subtype_Indication (Loc, Subtype_Mark => New_Occurrence_Of (RTE (RE_Dispatch_Table_Wrapper), Loc), - Constraint => Make_Index_Or_Discriminant_Constraint (Loc, - Constraints => DT_Constr_List)))); + Constraint => + Make_Index_Or_Discriminant_Constraint (Loc, + Constraints => DT_Constr_List)))); Append_To (Result, Make_Attribute_Definition_Clause (Loc, @@ -4830,7 +4755,7 @@ package body Exp_Disp is Chars => Name_Alignment, Expression => Make_Attribute_Reference (Loc, - Prefix => + Prefix => New_Occurrence_Of (RTE (RE_Integer_Address), Loc), Attribute_Name => Name_Alignment))); @@ -4842,12 +4767,12 @@ package body Exp_Disp is Expression => Unchecked_Convert_To (RTE (RE_Tag), Make_Attribute_Reference (Loc, - Prefix => + Prefix => Make_Selected_Component (Loc, - Prefix => New_Occurrence_Of (DT, Loc), - Selector_Name => - New_Occurrence_Of - (RTE_Record_Component (RE_Prims_Ptr), Loc)), + Prefix => New_Occurrence_Of (DT, Loc), + Selector_Name => + New_Occurrence_Of + (RTE_Record_Component (RE_Prims_Ptr), Loc)), Attribute_Name => Name_Address)))); Set_Is_Statically_Allocated (DT_Ptr, @@ -4868,16 +4793,16 @@ package body Exp_Disp is Defining_Identifier => Node (Next_Elmt (First_Elmt (Access_Disp_Table (Typ)))), Constant_Present => True, - Object_Definition => New_Occurrence_Of - (RTE (RE_Address), Loc), + Object_Definition => + New_Occurrence_Of (RTE (RE_Address), Loc), Expression => Make_Attribute_Reference (Loc, - Prefix => + Prefix => Make_Selected_Component (Loc, - Prefix => New_Occurrence_Of (DT, Loc), - Selector_Name => - New_Occurrence_Of - (RTE_Record_Component (RE_Predef_Prims), Loc)), + Prefix => New_Occurrence_Of (DT, Loc), + Selector_Name => + New_Occurrence_Of + (RTE_Record_Component (RE_Predef_Prims), Loc)), Attribute_Name => Name_Address))); end if; end if; @@ -4893,8 +4818,7 @@ package body Exp_Disp is Object_Definition => New_Occurrence_Of (Standard_String, Loc), Expression => Make_String_Literal (Loc, - Fully_Qualified_Name_String (First_Subtype (Typ))))); - + Strval => Fully_Qualified_Name_String (First_Subtype (Typ))))); Set_Is_Statically_Allocated (Exname); Set_Is_True_Constant (Exname); @@ -4977,7 +4901,7 @@ package body Exp_Disp is else Append_To (TSD_Aggr_List, Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Typ, Loc), + Prefix => New_Occurrence_Of (Typ, Loc), Attribute_Name => Name_Alignment)); end if; @@ -5020,14 +4944,13 @@ package body Exp_Disp is and then not Has_External_Tag_Rep_Clause (Typ) then declare - Exname : constant Entity_Id := - Make_Defining_Identifier (Loc, - New_External_Name (Tname, 'A')); - - Full_Name : constant String_Id := + Exname : constant Entity_Id := + Make_Defining_Identifier (Loc, + Chars => New_External_Name (Tname, 'A')); + Full_Name : constant String_Id := Fully_Qualified_Name_String (First_Subtype (Typ)); - Str1_Id : String_Id; - Str2_Id : String_Id; + Str1_Id : String_Id; + Str2_Id : String_Id; begin -- Generate: @@ -5058,11 +4981,10 @@ package body Exp_Disp is (Standard_String, Loc), Expression => Make_Op_Concat (Loc, - Left_Opnd => - Make_String_Literal (Loc, Str1_Id), + Left_Opnd => Make_String_Literal (Loc, Str1_Id), Right_Opnd => Make_Op_Concat (Loc, - Left_Opnd => + Left_Opnd => Make_Function_Call (Loc, Name => New_Occurrence_Of @@ -5078,20 +5000,18 @@ package body Exp_Disp is Make_Object_Declaration (Loc, Defining_Identifier => Exname, Constant_Present => True, - Object_Definition => New_Occurrence_Of - (Standard_String, Loc), - Expression => + Object_Definition => + New_Occurrence_Of (Standard_String, Loc), + Expression => Make_Op_Concat (Loc, - Left_Opnd => - Make_String_Literal (Loc, Str1_Id), - Right_Opnd => - Make_String_Literal (Loc, Str2_Id)))); + Left_Opnd => Make_String_Literal (Loc, Str1_Id), + Right_Opnd => Make_String_Literal (Loc, Str2_Id)))); end if; New_Node := Unchecked_Convert_To (RTE (RE_Cstring_Ptr), Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Exname, Loc), + Prefix => New_Occurrence_Of (Exname, Loc), Attribute_Name => Name_Address)); end; @@ -5160,7 +5080,7 @@ package body Exp_Disp is New_Node := Unchecked_Convert_To (RTE (RE_Cstring_Ptr), Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (E, Loc), + Prefix => New_Occurrence_Of (E, Loc), Attribute_Name => Name_Address)); end if; end; @@ -5174,7 +5094,7 @@ package body Exp_Disp is Append_To (TSD_Aggr_List, Unchecked_Convert_To (RTE (RE_Tag_Ptr), Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (HT_Link, Loc), + Prefix => New_Occurrence_Of (HT_Link, Loc), Attribute_Name => Name_Address))); else Append_To (TSD_Aggr_List, @@ -5195,7 +5115,7 @@ package body Exp_Disp is or else Is_Shared_Passive (Typ) or else ((Is_Remote_Types (Typ) - or else Is_Remote_Call_Interface (Typ)) + or else Is_Remote_Call_Interface (Typ)) and then Original_View_In_Visible_Part (Typ)) or else not Comes_From_Source (Typ)); @@ -5209,13 +5129,10 @@ package body Exp_Disp is if RTE_Record_Component_Available (RE_Type_Is_Abstract) then declare Type_Is_Abstract : Entity_Id; - begin - Type_Is_Abstract := - Boolean_Literals (Is_Abstract_Type (Typ)); - + Type_Is_Abstract := Boolean_Literals (Is_Abstract_Type (Typ)); Append_To (TSD_Aggr_List, - New_Occurrence_Of (Type_Is_Abstract, Loc)); + New_Occurrence_Of (Type_Is_Abstract, Loc)); end; end if; @@ -5224,7 +5141,6 @@ package body Exp_Disp is declare Needs_Fin : Entity_Id; - begin Needs_Fin := Boolean_Literals (Needs_Finalization (Typ)); Append_To (TSD_Aggr_List, New_Occurrence_Of (Needs_Fin, Loc)); @@ -5267,7 +5183,7 @@ package body Exp_Disp is Size_Comp := Unchecked_Convert_To (RTE (RE_Size_Ptr), Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Prim, Loc), + Prefix => New_Occurrence_Of (Prim, Loc), Attribute_Name => Name_Unrestricted_Access)); end if; @@ -5395,16 +5311,15 @@ package body Exp_Disp is Make_Subtype_Indication (Loc, Subtype_Mark => New_Occurrence_Of (RTE (RE_Interface_Data), Loc), - Constraint => Make_Index_Or_Discriminant_Constraint - (Loc, - Constraints => New_List ( - Make_Integer_Literal (Loc, Num_Ifaces)))), + Constraint => + Make_Index_Or_Discriminant_Constraint (Loc, + Constraints => New_List ( + Make_Integer_Literal (Loc, Num_Ifaces)))), - Expression => Make_Aggregate (Loc, + Expression => Make_Aggregate (Loc, Expressions => New_List ( Make_Integer_Literal (Loc, Num_Ifaces), - Make_Aggregate (Loc, - Expressions => TSD_Ifaces_List))))); + Make_Aggregate (Loc, TSD_Ifaces_List))))); Append_To (Result, Make_Attribute_Definition_Clause (Loc, @@ -5412,7 +5327,7 @@ package body Exp_Disp is Chars => Name_Alignment, Expression => Make_Attribute_Reference (Loc, - Prefix => + Prefix => New_Occurrence_Of (RTE (RE_Integer_Address), Loc), Attribute_Name => Name_Alignment))); @@ -5460,7 +5375,7 @@ package body Exp_Disp is Chars => Name_Alignment, Expression => Make_Attribute_Reference (Loc, - Prefix => + Prefix => New_Occurrence_Of (RTE (RE_Integer_Address), Loc), Attribute_Name => Name_Alignment))); @@ -5469,7 +5384,7 @@ package body Exp_Disp is Append_To (TSD_Aggr_List, Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (SSD, Loc), + Prefix => New_Occurrence_Of (SSD, Loc), Attribute_Name => Name_Unchecked_Access)); else Append_To (TSD_Aggr_List, Make_Null (Loc)); @@ -5572,7 +5487,8 @@ package body Exp_Disp is Chars => Name_Alignment, Expression => Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (RTE (RE_Integer_Address), Loc), + Prefix => + New_Occurrence_Of (RTE (RE_Integer_Address), Loc), Attribute_Name => Name_Alignment))); -- Initialize or declare the dispatch table object @@ -5585,7 +5501,7 @@ package body Exp_Disp is New_Node := Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (TSD, Loc), + Prefix => New_Occurrence_Of (TSD, Loc), Attribute_Name => Name_Address); Append_To (DT_Constr_List, New_Node); @@ -5601,9 +5517,8 @@ package body Exp_Disp is if not Building_Static_DT (Typ) then Append_To (Result, Make_Assignment_Statement (Loc, - Name => New_Occurrence_Of (DT, Loc), - Expression => Make_Aggregate (Loc, - Expressions => DT_Aggr_List))); + Name => New_Occurrence_Of (DT, Loc), + Expression => Make_Aggregate (Loc, DT_Aggr_List))); -- In case of library level tagged types we declare and export now -- the constant object containing the dummy dispatch table. There @@ -5623,8 +5538,7 @@ package body Exp_Disp is Constant_Present => True, Object_Definition => New_Occurrence_Of (RTE (RE_No_Dispatch_Table_Wrapper), Loc), - Expression => Make_Aggregate (Loc, - Expressions => DT_Aggr_List))); + Expression => Make_Aggregate (Loc, DT_Aggr_List))); Append_To (Result, Make_Attribute_Definition_Clause (Loc, @@ -5632,7 +5546,7 @@ package body Exp_Disp is Chars => Name_Alignment, Expression => Make_Attribute_Reference (Loc, - Prefix => + Prefix => New_Occurrence_Of (RTE (RE_Integer_Address), Loc), Attribute_Name => Name_Alignment))); @@ -5725,7 +5639,8 @@ package body Exp_Disp is New_Node := Unchecked_Convert_To (RTE (RE_Prim_Ptr), Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Prim_Table (J), Loc), + Prefix => + New_Occurrence_Of (Prim_Table (J), Loc), Attribute_Name => Name_Unrestricted_Access)); else New_Node := Make_Null (Loc); @@ -5751,8 +5666,8 @@ package body Exp_Disp is Defining_Identifier => Predef_Prims, Aliased_Present => True, Constant_Present => Building_Static_DT (Typ), - Object_Definition => New_Occurrence_Of - (Defining_Identifier (Decl), Loc), + Object_Definition => + New_Occurrence_Of (Defining_Identifier (Decl), Loc), Expression => New_Node)); -- Remember aggregates initializing dispatch tables @@ -5765,7 +5680,7 @@ package body Exp_Disp is Chars => Name_Alignment, Expression => Make_Attribute_Reference (Loc, - Prefix => + Prefix => New_Occurrence_Of (RTE (RE_Integer_Address), Loc), Attribute_Name => Name_Alignment))); end; @@ -5805,7 +5720,7 @@ package body Exp_Disp is Append_To (DT_Aggr_List, Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Predef_Prims, Loc), + Prefix => New_Occurrence_Of (Predef_Prims, Loc), Attribute_Name => Name_Address)); -- Offset_To_Top @@ -5816,7 +5731,7 @@ package body Exp_Disp is Append_To (DT_Aggr_List, Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (TSD, Loc), + Prefix => New_Occurrence_Of (TSD, Loc), Attribute_Name => Name_Address)); -- Stage 2: Initialize the table of user-defined primitive operations @@ -5883,7 +5798,8 @@ package body Exp_Disp is New_Node := Unchecked_Convert_To (RTE (RE_Prim_Ptr), Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Prim_Table (J), Loc), + Prefix => + New_Occurrence_Of (Prim_Table (J), Loc), Attribute_Name => Name_Unrestricted_Access)); else New_Node := Make_Null (Loc); @@ -5911,9 +5827,8 @@ package body Exp_Disp is if not Building_Static_DT (Typ) then Append_To (Result, Make_Assignment_Statement (Loc, - Name => New_Occurrence_Of (DT, Loc), - Expression => Make_Aggregate (Loc, - Expressions => DT_Aggr_List))); + Name => New_Occurrence_Of (DT, Loc), + Expression => Make_Aggregate (Loc, DT_Aggr_List))); -- In case of library level tagged types we declare now and export -- the constant object containing the dispatch table. @@ -5930,8 +5845,7 @@ package body Exp_Disp is (RTE (RE_Dispatch_Table_Wrapper), Loc), Constraint => Make_Index_Or_Discriminant_Constraint (Loc, Constraints => DT_Constr_List)), - Expression => Make_Aggregate (Loc, - Expressions => DT_Aggr_List))); + Expression => Make_Aggregate (Loc, DT_Aggr_List))); Append_To (Result, Make_Attribute_Definition_Clause (Loc, @@ -5939,7 +5853,7 @@ package body Exp_Disp is Chars => Name_Alignment, Expression => Make_Attribute_Reference (Loc, - Prefix => + Prefix => New_Occurrence_Of (RTE (RE_Integer_Address), Loc), Attribute_Name => Name_Alignment))); @@ -5956,12 +5870,11 @@ package body Exp_Disp is then Append_To (Result, Make_Assignment_Statement (Loc, - Name => + Name => Make_Indexed_Component (Loc, - Prefix => + Prefix => Make_Selected_Component (Loc, - Prefix => - New_Occurrence_Of (TSD, Loc), + Prefix => New_Occurrence_Of (TSD, Loc), Selector_Name => New_Occurrence_Of (RTE_Record_Component (RE_Tags_Table), Loc)), @@ -6011,15 +5924,15 @@ package body Exp_Disp is Old_Tag_Node => New_Occurrence_Of (Node - (Next_Elmt - (First_Elmt - (Access_Disp_Table (Parent_Typ)))), Loc), + (Next_Elmt + (First_Elmt + (Access_Disp_Table (Parent_Typ)))), Loc), New_Tag_Node => New_Occurrence_Of (Node - (Next_Elmt - (First_Elmt - (Access_Disp_Table (Typ)))), Loc))); + (Next_Elmt + (First_Elmt + (Access_Disp_Table (Typ)))), Loc))); if Nb_Prims /= 0 then Append_To (Elab_Code, @@ -6028,8 +5941,8 @@ package body Exp_Disp is Old_Tag_Node => New_Occurrence_Of (Node - (First_Elmt - (Access_Disp_Table (Parent_Typ))), Loc), + (First_Elmt + (Access_Disp_Table (Parent_Typ))), Loc), New_Tag_Node => New_Occurrence_Of (DT_Ptr, Loc), Num_Prims => Nb_Prims)); end if; @@ -6042,14 +5955,15 @@ package body Exp_Disp is declare Sec_DT_Ancestor : Elmt_Id := Next_Elmt - (Next_Elmt - (First_Elmt - (Access_Disp_Table (Parent_Typ)))); + (Next_Elmt + (First_Elmt + (Access_Disp_Table + (Parent_Typ)))); Sec_DT_Typ : Elmt_Id := Next_Elmt - (Next_Elmt - (First_Elmt - (Access_Disp_Table (Typ)))); + (Next_Elmt + (First_Elmt + (Access_Disp_Table (Typ)))); procedure Copy_Secondary_DTs (Typ : Entity_Id); -- Local procedure required to climb through the ancestors @@ -6256,7 +6170,8 @@ package body Exp_Disp is then Append_To (Elab_Code, Make_Procedure_Call_Statement (Loc, - Name => New_Occurrence_Of (RTE (RE_Register_Tag), Loc), + Name => + New_Occurrence_Of (RTE (RE_Register_Tag), Loc), Parameter_Associations => New_List (New_Occurrence_Of (DT_Ptr, Loc)))); end if; @@ -6439,7 +6354,7 @@ package body Exp_Disp is Append_To (OSD_Aggr_List, Make_Component_Association (Loc, - Choices => New_List ( + Choices => New_List ( Make_Integer_Literal (Loc, DT_Position (Prim_Alias))), Expression => @@ -6452,6 +6367,7 @@ package body Exp_Disp is Next_Elmt (Prim_Elmt); end loop; + pragma Assert (Count = Nb_Prim); end; @@ -6466,7 +6382,7 @@ package body Exp_Disp is Make_Subtype_Indication (Loc, Subtype_Mark => New_Occurrence_Of (RTE (RE_Object_Specific_Data), Loc), - Constraint => + Constraint => Make_Index_Or_Discriminant_Constraint (Loc, Constraints => New_List ( Make_Integer_Literal (Loc, Nb_Prim)))), @@ -6475,14 +6391,14 @@ package body Exp_Disp is Make_Aggregate (Loc, Component_Associations => New_List ( Make_Component_Association (Loc, - Choices => New_List ( + Choices => New_List ( New_Occurrence_Of (RTE_Record_Component (RE_OSD_Num_Prims), Loc)), Expression => Make_Integer_Literal (Loc, Nb_Prim)), Make_Component_Association (Loc, - Choices => New_List ( + Choices => New_List ( New_Occurrence_Of (RTE_Record_Component (RE_OSD_Table), Loc)), Expression => Make_Aggregate (Loc, @@ -7171,8 +7087,7 @@ package body Exp_Disp is Set_Ekind (DT_Ptr, E_Variable); Set_Related_Type (DT_Ptr, Typ); - -- Notify the back end that the types are associated with a dispatch - -- table + -- Notify back end that the types are associated with a dispatch table Set_Is_Dispatch_Table_Entity (RTE (RE_Prim_Ptr)); Set_Is_Dispatch_Table_Entity (RTE (RE_Predef_Prims_Table_Ptr)); @@ -7307,9 +7222,8 @@ package body Exp_Disp is Suffix_Index := 1; - -- Note: The value of Suffix_Index must be in sync with the - -- Suffix_Index values of secondary dispatch tables generated - -- by Make_DT. + -- Note: The value of Suffix_Index must be in sync with the values of + -- Suffix_Index in secondary dispatch tables generated by Make_DT. if Is_CPP_Class (Typ) then AI_Tag_Comp := First_Elmt (Typ_Comps); @@ -7318,8 +7232,7 @@ package body Exp_Disp is (Typ, Related_Type (Node (AI_Tag_Comp)), Suffix_Index); Typ_Name := Name_Find; - -- Declare variables that will store the copy of the C++ - -- secondary tags. + -- Declare variables to store copy of the C++ secondary tags Iface_DT_Ptr := Make_Defining_Identifier (Loc, @@ -7528,6 +7441,7 @@ package body Exp_Disp is -- Add the freezing nodes of these declarations; required to avoid -- generating these freezing nodes in wrong scopes (for example in -- the IC routine of a derivation of Typ). + -- What is an "IC routine"? Is "init_proc" meant here??? Append_List_To (Result, Freeze_Entity (DT_Prims, Typ)); @@ -7573,9 +7487,7 @@ package body Exp_Disp is Res : constant Node_Id := Duplicate_Subexpr (From); begin if Is_Access_Type (Etype (From)) then - return - Make_Explicit_Dereference (Sloc (From), - Prefix => Res); + return Make_Explicit_Dereference (Sloc (From), Prefix => Res); else return Res; end if; @@ -7786,6 +7698,7 @@ package body Exp_Disp is end if; -- Ada 2005 (AI-251): Primitive associated with an interface type + -- Generate the code of the thunk only if the interface type is not an -- immediate ancestor of Typ; otherwise the dispatch table associated -- with the interface is the primary dispatch table and we have nothing @@ -7914,9 +7827,8 @@ package body Exp_Disp is -- predefined primitives procedure Validate_Position (Prim : Entity_Id); - -- Check that the position assigned to Prim is completely safe - -- (it has not been assigned to a previously defined primitive - -- operation of Typ) + -- Check that position assigned to Prim is completely safe (it has not + -- been assigned to a previously defined primitive operation of Typ). ------------------------ -- In_Predef_Prims_DT -- @@ -8011,7 +7923,6 @@ package body Exp_Disp is and then not Is_Predefined_Dispatching_Alias (Op) and then not Is_Predefined_Dispatching_Alias (Prim) then - -- Handle aliased subprograms declare @@ -8074,9 +7985,8 @@ package body Exp_Disp is -- Set the DT_Position for each primitive operation. Perform some sanity -- checks to avoid building inconsistent dispatch tables. - -- First stage: Set the DTC entity of all the primitive operations. This - -- is required to properly read the DT_Position attribute in the latter - -- stages. + -- First stage: Set DTC entity of all the primitive operations. This is + -- required to properly read the DT_Position attribute in latter stages. Prim_Elmt := First_Prim; Count_Prim := 0; @@ -8261,9 +8171,9 @@ package body Exp_Disp is Next_Elmt (Prim_Elmt); end loop; - -- Third stage: Fix the position of all the new primitives. - -- Entries associated with primitives covering interfaces - -- are handled in a latter round. + -- Third stage: Fix the position of all the new primitives. Entries + -- associated with primitives covering interfaces are handled in a + -- latter round. Prim_Elmt := First_Prim; while Present (Prim_Elmt) loop @@ -8297,8 +8207,8 @@ package body Exp_Disp is end; -- Fourth stage: Complete the decoration of primitives covering - -- interfaces (that is, propagate the DT_Position attribute - -- from the aliased primitive) + -- interfaces (that is, propagate the DT_Position attribute from + -- the aliased primitive) Prim_Elmt := First_Prim; while Present (Prim_Elmt) loop @@ -8332,10 +8242,10 @@ package body Exp_Disp is Next_Elmt (Prim_Elmt); end loop; - -- Generate listing showing the contents of the dispatch tables. - -- This action is done before some further static checks because - -- in case of critical errors caused by a wrong dispatch table - -- we need to see the contents of such table. + -- Generate listing showing the contents of the dispatch tables. This + -- action is done before some further static checks because in case of + -- critical errors caused by a wrong dispatch table we need to see the + -- contents of such table. if Debug_Flag_ZZ then Write_DT (Typ); @@ -8349,8 +8259,8 @@ package body Exp_Disp is while Present (Prim_Elmt) loop Prim := Node (Prim_Elmt); - -- At this point all the primitives MUST have a position - -- in the dispatch table. + -- At this point all the primitives MUST have a position in the + -- dispatch table. if DT_Position (Prim) = No_Uint then raise Program_Error; @@ -8364,8 +8274,8 @@ package body Exp_Disp is DT_Length := UI_To_Int (DT_Position (Prim)); end if; - -- Ensure that the assigned position to non-predefined - -- dispatching operations in the dispatch table is correct. + -- Ensure that the assigned position to non-predefined dispatching + -- operations in the dispatch table is correct. if not Is_Predefined_Dispatching_Operation (Prim) and then not Is_Predefined_Dispatching_Alias (Prim) @@ -8391,8 +8301,8 @@ package body Exp_Disp is -- excluded from this check because interfaces must be visible in -- the public and private part (RM 7.3 (7.3/2)) - -- We disable this check in Relaxed_RM_Semantics mode, to - -- accommodate legacy Ada code. + -- We disable this check in Relaxed_RM_Semantics mode, to accommodate + -- legacy Ada code. if not Relaxed_RM_Semantics and then Is_Abstract_Type (Typ) @@ -8409,9 +8319,8 @@ package body Exp_Disp is and then Original_View_In_Visible_Part (Typ) then -- We exclude Input and Output stream operations because - -- Limited_Controlled inherits useless Input and Output - -- stream operations from Root_Controlled, which can - -- never be overridden. + -- Limited_Controlled inherits useless Input and Output stream + -- operations from Root_Controlled, which can never be overridden. if not Is_TSS (Prim, TSS_Stream_Input) and then @@ -8464,6 +8373,10 @@ package body Exp_Disp is -- Duplicate the parameters profile of the imported C++ constructor -- adding an access to the object as an additional parameter. + ---------------------------- + -- Gen_Parameters_Profile -- + ---------------------------- + function Gen_Parameters_Profile (E : Entity_Id) return List_Id is Loc : constant Source_Ptr := Sloc (E); Parms : List_Id; @@ -8682,10 +8595,10 @@ package body Exp_Disp is end; end if; - -- If this constructor has parameters and all its parameters - -- have defaults then it covers the default constructor. The - -- semantic analyzer ensures that only one constructor with - -- defaults covers the default constructor. + -- If this constructor has parameters and all its parameters have + -- defaults then it covers the default constructor. The semantic + -- analyzer ensures that only one constructor with defaults covers + -- the default constructor. if Present (Parameter_Specifications (Parent (E))) and then Needs_No_Actuals (E) @@ -8935,7 +8848,7 @@ package body Exp_Disp is end if; -- Display the final position of this primitive in its associated - -- (primary or secondary) dispatch table + -- (primary or secondary) dispatch table. if Present (DTC_Entity (Prim)) and then DT_Position (Prim) /= No_Uint diff --git a/gcc/ada/exp_dist.adb b/gcc/ada/exp_dist.adb index ae8a3900aec..78778a07a72 100644 --- a/gcc/ada/exp_dist.adb +++ b/gcc/ada/exp_dist.adb @@ -1162,18 +1162,15 @@ package body Exp_Dist is return Make_Procedure_Call_Statement (Loc, - Name => - New_Occurrence_Of - (RTE (RE_NVList_Add_Item), Loc), + Name => + New_Occurrence_Of (RTE (RE_NVList_Add_Item), Loc), Parameter_Associations => New_List ( New_Occurrence_Of (NVList, Loc), Make_Function_Call (Loc, - Name => - New_Occurrence_Of - (RTE (RE_To_PolyORB_String), Loc), + Name => + New_Occurrence_Of (RTE (RE_To_PolyORB_String), Loc), Parameter_Associations => New_List ( - Make_String_Literal (Loc, - Strval => Parameter_Name_String))), + Make_String_Literal (Loc, Strval => Parameter_Name_String))), New_Occurrence_Of (Any, Loc), Parameter_Mode)); end Add_Parameter_To_NVList; diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 5a18f3e7925..26e2e0d3a4e 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -1131,25 +1131,16 @@ package body Freeze is Attribute_Scalar_Storage_Order); Comp_ADC_Present := Present (Comp_ADC); - -- Case of enclosing type not having explicit SSO: component cannot - -- have it either. + -- Case of record or array component: check storage order compatibility - if No (ADC) then - if Comp_ADC_Present then - Error_Msg_N - ("composite type must have explicit scalar storage order", - Err_Node); - end if; - - -- Case of enclosing type having explicit SSO: check compatible - -- attribute on Comp_Type if composite. - - elsif Is_Record_Type (Comp_Type) or else Is_Array_Type (Comp_Type) then + if Is_Record_Type (Comp_Type) or else Is_Array_Type (Comp_Type) then Comp_SSO_Differs := Reverse_Storage_Order (Encl_Type) /= Reverse_Storage_Order (Comp_Type); + -- Parent and extension must have same storage order + if Present (Comp) and then Chars (Comp) = Name_uParent then if Comp_SSO_Differs then Error_Msg_N @@ -1157,10 +1148,16 @@ package body Freeze is & "parent", Err_Node); end if; - elsif No (Comp_ADC) then + -- If enclosing composite has explicit SSO then nested composite must + -- have explicit SSO as well. + + elsif Present (ADC) and then No (Comp_ADC) then Error_Msg_N ("nested composite must have explicit scalar " & "storage order", Err_Node); + -- If component and composite SSO differs, check that component + -- falls on byte boundaries and isn't packed. + elsif Comp_SSO_Differs then -- Component SSO differs from enclosing composite: @@ -1182,10 +1179,10 @@ package body Freeze is end if; end if; - -- Enclosing type has explicit SSO, non-composite component must not + -- Enclosing type has explicit SSO: non-composite component must not -- be aliased. - elsif Component_Aliased then + elsif Present (ADC) and then Component_Aliased then Error_Msg_N ("aliased component not permitted for type with " & "explicit Scalar_Storage_Order", Err_Node); diff --git a/gcc/ada/g-pehage.ads b/gcc/ada/g-pehage.ads index 54ecf6ef4e2..67875a66355 100644 --- a/gcc/ada/g-pehage.ads +++ b/gcc/ada/g-pehage.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2002-2010, AdaCore -- +-- Copyright (C) 2002-2014, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -121,8 +121,8 @@ package GNAT.Perfect_Hash_Generators is -- Raised after Tries unsuccessful runs procedure Compute (Position : String := Default_Position); - -- Compute the hash function. Position allows to define selection of - -- character positions used in the word hash function. Positions can be + -- Compute the hash function. Position allows the definition of selection + -- of character positions used in the word hash function. Positions can be -- separated by commas and ranges like x-y may be used. Character '$' -- represents the final character of a word. With an empty position, the -- generator automatically produces positions to reduce the memory usage. diff --git a/gcc/ada/g-socket.ads b/gcc/ada/g-socket.ads index 876e5359206..7df5af0eeee 100644 --- a/gcc/ada/g-socket.ads +++ b/gcc/ada/g-socket.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2013, AdaCore -- +-- Copyright (C) 2001-2014, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -759,8 +759,8 @@ package GNAT.Sockets is end case; end record; - -- A request flag allows to specify the type of message transmissions or - -- receptions. A request flag can be combination of zero or more + -- A request flag allows specification of the type of message transmissions + -- or receptions. A request flag can be combination of zero or more -- predefined request flags. type Request_Flag_Type is private; @@ -904,7 +904,7 @@ package GNAT.Sockets is -- Item'First - 1 when the socket has been closed by peer. This is not -- an error, and no exception is raised in this case unless Item'First -- is Stream_Element_Offset'First, in which case Constraint_Error is - -- raised. Flags allows to control the reception. Raise Socket_Error on + -- raised. Flags allows control of the reception. Raise Socket_Error on -- error. procedure Receive_Socket @@ -916,7 +916,7 @@ package GNAT.Sockets is -- Receive message from Socket. If Socket is not connection-oriented, the -- source address From of the message is filled in. Last is the index -- value such that Item (Last) is the last character assigned. Flags - -- allows to control the reception. Raises Socket_Error on error. + -- allows control of the reception. Raises Socket_Error on error. procedure Receive_Vector (Socket : Socket_Type; @@ -958,7 +958,7 @@ package GNAT.Sockets is Last : out Ada.Streams.Stream_Element_Offset; Flags : Request_Flag_Type := No_Request_Flag); -- Transmit a message over a socket. Upon return, Last is set to the index - -- within Item of the last element transmitted. Flags allows to control + -- within Item of the last element transmitted. Flags allows control of -- the transmission. Raises Socket_Error on any detected error condition. procedure Send_Socket @@ -968,7 +968,7 @@ package GNAT.Sockets is To : Sock_Addr_Type; Flags : Request_Flag_Type := No_Request_Flag); -- Transmit a message over a datagram socket. The destination address is - -- To. Flags allows to control the transmission. Raises Socket_Error on + -- To. Flags allows control of the transmission. Raises Socket_Error on -- error. procedure Send_Vector @@ -1027,8 +1027,8 @@ package GNAT.Sockets is -- subprogram when the stream is not needed anymore. type Socket_Set_Type is limited private; - -- This type allows to manipulate sets of sockets. It allows to wait for - -- events on multiple endpoints at one time. This type has default + -- This type allows manipulation of sets of sockets. It allows waiting + -- for events on multiple endpoints at one time. This type has default -- initialization, and the default value is the empty set. -- -- Note: This type used to contain a pointer to dynamically allocated @@ -1072,8 +1072,8 @@ package GNAT.Sockets is -- Check_Selector provides the very same behaviour. The only difference is -- that it does not watch for exception events. Note that on some platforms -- it is kept process blocking on purpose. The timeout parameter allows the - -- user to have the behaviour he wants. Abort_Selector allows to safely - -- abort a blocked Check_Selector call. A special socket is opened by + -- user to have the behaviour he wants. Abort_Selector allows the safe + -- abort of a blocked Check_Selector call. A special socket is opened by -- Create_Selector and included in each call to Check_Selector. -- -- Abort_Selector causes an event to occur on this descriptor in order to diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index b0b3907cc38..854e26e0f93 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -9303,9 +9303,8 @@ that make up scalar components are ordered within S: -- the former is used. @end smallexample -Other properties are -as for standard representation attribute @code{Bit_Order}, as defined by -Ada RM 13.5.3(4). The default is @code{System.Default_Bit_Order}. +Other properties are as for standard representation attribute @code{Bit_Order}, +as defined by Ada RM 13.5.3(4). The default is @code{System.Default_Bit_Order}. For a record type @var{S}, if @code{@var{S}'Scalar_Storage_Order} is specified explicitly, it shall be equal to @code{@var{S}'Bit_Order}. Note: @@ -9316,18 +9315,15 @@ specified explicitly and set to the same value. For a record extension, the derived type shall have the same scalar storage order as the parent type. -If a component of @var{S} has itself a record or array type, then it shall also -have a @code{Scalar_Storage_Order} attribute definition clause. In addition, -if the component is a packed array, or does not start on a byte boundary, then -the scalar storage order specified for S and for the nested component type shall -be identical. +If a component of @var{S} is of a record or array type, then that type shall +also have a @code{Scalar_Storage_Order} attribute definition clause. -If @var{S} appears as the type of a record or array component, the enclosing -record or array shall also have a @code{Scalar_Storage_Order} attribute -definition clause. +A component of a record or array type that is a packed array, or that +does not start on a byte boundary, must have the same scalar storage order +as the enclosing record or array type. -No component of a type that has a @code{Scalar_Storage_Order} attribute -definition may be aliased. +No component of a type that has an explicit @code{Scalar_Storage_Order} +attribute definition may be aliased. A confirming @code{Scalar_Storage_Order} attribute definition clause (i.e. with a value equal to @code{System.Default_Bit_Order}) has no effect. diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index 51a8bd48f2a..2132a8bd32d 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -1,3 +1,4 @@ + \input texinfo @c -*-texinfo-*- @c %**start of header @@ -18765,11 +18766,11 @@ leak. @noindent @code{gnatmem} makes use of the output created by the special version of -allocation and deallocation routines that record call information. This -allows to obtain accurate dynamic memory usage history at a minimal cost to -the execution speed. Note however, that @code{gnatmem} is not supported on -all platforms (currently, it is supported on AIX, HP-UX, GNU/Linux, -Solaris and Windows NT/2000/XP (x86). +allocation and deallocation routines that record call information. This allows +it to obtain accurate dynamic memory usage history at a minimal cost to the +execution speed. Note however, that @code{gnatmem} is not supported on all +platforms (currently, it is supported on AIX, HP-UX, GNU/Linux, Solaris and +Windows NT/2000/XP (x86). @noindent The @code{gnatmem} command has the form @@ -18894,8 +18895,8 @@ Do the @code{gnatmem} processing starting from @file{file}, rather than @item -m n @cindex @option{-m} (@code{gnatmem}) This switch causes @code{gnatmem} to mask the allocation roots that have less -than n leaks. The default value is 1. Specifying the value of 0 will allow to -examine even the roots that didn't result in leaks. +than n leaks. The default value is 1. Specifying the value of 0 will allow +examination of even the roots that did not result in leaks. @item -s order @cindex @option{-s} (@code{gnatmem}) @@ -21636,9 +21637,9 @@ breakpoint condition (before the @code{if}). @item task @var{taskno} @cindex Task switching -This command allows to switch to the task referred by @var{taskno}. In -particular, This allows to browse the backtrace of the specified -task. It is advised to switch back to the original task before +This command allows switching to the task referred by @var{taskno}. In +particular, this allows browsing of the backtrace of the specified +task. It is advisable to switch back to the original task before continuing execution otherwise the scheduling of the program may be perturbed. @end table diff --git a/gcc/ada/init.c b/gcc/ada/init.c index 48319d62f41..587638ba148 100644 --- a/gcc/ada/init.c +++ b/gcc/ada/init.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 1992-2013, Free Software Foundation, Inc. * + * Copyright (C) 1992-2014, Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -1922,7 +1922,7 @@ __gnat_error_handler (int sig, siginfo_t *si, void *sc) #include "sigtramp.h" __gnat_sigtramp (sig, (void *)si, (void *)sc, - (sighandler_t *)&__gnat_map_signal); + (__sigtramphandler_t *)&__gnat_map_signal); #else __gnat_map_signal (sig, si, sc); @@ -2372,12 +2372,23 @@ __gnat_install_handler (void) /*******************/ #include -#include +#include "sigtramp.h" + +#define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE + +void +__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext) +{ + mcontext_t *mcontext = &((ucontext_t *) ucontext)->uc_mcontext; + + /* ARM Bump has to be an even number because of odd/even architecture. */ + ((mcontext_t *) mcontext)->arm_pc += 2; +} static void -__gnat_error_handler (int sig, - siginfo_t *si ATTRIBUTE_UNUSED, - void *ucontext ATTRIBUTE_UNUSED) +__gnat_map_signal (int sig, + siginfo_t *si ATTRIBUTE_UNUSED, + void *ucontext ATTRIBUTE_UNUSED) { struct Exception_Data *exception; const char *msg; @@ -2407,6 +2418,17 @@ __gnat_error_handler (int sig, Raise_From_Signal_Handler (exception, msg); } +static void +__gnat_error_handler (int sig, + siginfo_t *si ATTRIBUTE_UNUSED, + void *ucontext ATTRIBUTE_UNUSED) +{ + __gnat_adjust_context_for_raise (sig, ucontext); + + __gnat_sigtramp (sig, (void *) si, (void *) ucontext, + (__sigtramphandler_t *)&__gnat_map_signal); +} + /* This must be in keeping with System.OS_Interface.Alternate_Stack_Size. */ char __gnat_alternate_stack[16 * 1024]; diff --git a/gcc/ada/scng.adb b/gcc/ada/scng.adb index f8377f4bb5c..8ccdda628a5 100644 --- a/gcc/ada/scng.adb +++ b/gcc/ada/scng.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2013, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -67,7 +67,7 @@ package body Scng is procedure Accumulate_Token_Checksum; pragma Inline (Accumulate_Token_Checksum); -- Called after each numeric literal and identifier/keyword. For keywords, - -- the token used is Tok_Identifier. This allows to detect additional + -- the token used is Tok_Identifier. This allows detection of additional -- spaces added in sources when using the builder switch -m. procedure Accumulate_Token_Checksum_GNAT_6_3; diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 1de265de432..48d442bb20c 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -3904,10 +3904,10 @@ package body Sem_Attr is Context : constant Node_Id := Parent (N); Attr : Node_Id; Enclosing_Loop : Node_Id; - In_Loop_Assertion : Boolean := False; Loop_Id : Entity_Id := Empty; Scop : Entity_Id; Stmt : Node_Id; + Enclosing_Pragma : Node_Id := Empty; -- Start of processing for Loop_Entry @@ -4025,7 +4025,7 @@ package body Sem_Attr is Name_Assert_And_Cut, Name_Assume) then - In_Loop_Assertion := True; + Enclosing_Pragma := Original_Node (Stmt); -- Locate the enclosing loop (if any). Note that Ada 2012 array -- iteration may be expanded into several nested loops, we are @@ -4060,12 +4060,11 @@ package body Sem_Attr is -- purpose if they appear in an appropriate location in a loop, -- which was already checked by the top level pragma circuit). - if not In_Loop_Assertion then - Error_Attr - ("attribute % must appear within appropriate pragma", N); + if No (Enclosing_Pragma) then + Error_Attr ("attribute% must appear within appropriate pragma", N); end if; - -- A Loop_Entry that applies to a given loop statement shall not + -- A Loop_Entry that applies to a given loop statement must not -- appear within a body of accept statement, if this construct is -- itself enclosed by the given loop statement. @@ -4074,10 +4073,8 @@ package body Sem_Attr is if Ekind (Scop) = E_Loop and then Scop = Loop_Id then exit; - elsif Ekind_In (Scop, E_Block, E_Loop, E_Return_Statement) then null; - else Error_Attr ("attribute % cannot appear in body or accept statement", N); @@ -4101,14 +4098,28 @@ package body Sem_Attr is null; elsif Present (Enclosing_Loop) - and then Entity (Identifier (Enclosing_Loop)) /= Loop_Id + and then Entity (Identifier (Enclosing_Loop)) /= Loop_Id then - Error_Attr_P ("prefix of attribute % that applies to " - & "outer loop must denote an entity"); + Error_Attr_P + ("prefix of attribute % that applies to " + & "outer loop must denote an entity"); elsif Is_Potentially_Unevaluated (P) then - Error_Attr_P ("prefix of attribute % that is potentially " - & "unevaluated must denote an entity"); + Error_Attr_P + ("prefix of attribute % that is potentially " + & "unevaluated must denote an entity"); + end if; + + -- Finally, if the Loop_Entry attribute appears within a pragma + -- that is ignored, we replace P'Loop_Entity by P to avoid useless + -- generation of the loop entity variable. Note that in this case + -- the expression won't be executed anyway, and this substitution + -- keeps types happy! + + -- We should really do this in the expander, but it's easier here + + if Is_Ignored (Enclosing_Pragma) then + Rewrite (N, Relocate_Node (P)); end if; end Loop_Entry; diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 072383eaa50..b2544d6f79f 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -14669,6 +14669,7 @@ package body Sem_Util is return Name; end Original_Aspect_Name; + -------------------------------------- -- Original_Corresponding_Operation -- -------------------------------------- diff --git a/gcc/ada/sigtramp-armvxw.c b/gcc/ada/sigtramp-armvxw.c index 176be21b89b..cbe774ff607 100644 --- a/gcc/ada/sigtramp-armvxw.c +++ b/gcc/ada/sigtramp-armvxw.c @@ -6,7 +6,7 @@ * * * Asm Implementation File * * * - * Copyright (C) 2013, Free Software Foundation, Inc. * + * Copyright (C) 2014, Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -49,7 +49,7 @@ sequences. The general idea is to establish CFA as sigcontext->sc_pregs and state where to find the registers as offsets from there. - As of today, we support a single stub, providing CFI info for common + As of today, we support a stub providing CFI info for common registers (GPRs, LR, ...). We might need variants with support for floating point or altivec registers as well at some point. @@ -75,7 +75,7 @@ extern void __gnat_sigtramp_common (int signo, void *siginfo, void *sigcontext, - sighandler_t * handler, void * sc_pregs); + __sigtramphandler_t * handler, void * sc_pregs); /* ------------------------------------- @@ -85,11 +85,11 @@ extern void __gnat_sigtramp_common We enforce optimization to minimize the overhead of the extra layer. */ void __gnat_sigtramp (int signo, void *si, void *sc, - sighandler_t * handler) + __sigtramphandler_t * handler) __attribute__((optimize(2))); void __gnat_sigtramp (int signo, void *si, void *sc, - sighandler_t * handler) + __sigtramphandler_t * handler) { struct sigcontext * sctx = (struct sigcontext *) sc; diff --git a/gcc/ada/sigtramp-ppcvxw.c b/gcc/ada/sigtramp-ppcvxw.c index 0432b083151..ff2f0a8792b 100644 --- a/gcc/ada/sigtramp-ppcvxw.c +++ b/gcc/ada/sigtramp-ppcvxw.c @@ -6,7 +6,7 @@ * * * Asm Implementation File * * * - * Copyright (C) 2011-2013, Free Software Foundation, Inc. * + * Copyright (C) 2011-2014, Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -49,7 +49,7 @@ sequences. The general idea is to establish CFA as sigcontext->sc_pregs and state where to find the registers as offsets from there. - As of today, we support a single stub, providing CFI info for common + As of today, we support a stub providing CFI info for common registers (GPRs, LR, ...). We might need variants with support for floating point or altivec registers as well at some point. @@ -75,7 +75,7 @@ extern void __gnat_sigtramp_common (int signo, void *siginfo, void *sigcontext, - sighandler_t * handler, void * sc_pregs); + __sigtramphandler_t * handler, void * sc_pregs); /* ------------------------------------- @@ -85,11 +85,11 @@ extern void __gnat_sigtramp_common We enforce optimization to minimize the overhead of the extra layer. */ void __gnat_sigtramp (int signo, void *si, void *sc, - sighandler_t * handler) + __sigtramphandler_t * handler) __attribute__((optimize(2))); void __gnat_sigtramp (int signo, void *si, void *sc, - sighandler_t * handler) + __sigtramphandler_t * handler) { struct sigcontext * sctx = (struct sigcontext *) sc;