From ce0bead308a024b906092bb0395b7ed67c53b56e Mon Sep 17 00:00:00 2001 From: Hristian Kirtchev Date: Thu, 13 Dec 2007 11:23:40 +0100 Subject: einfo.ads, einfo.adb: Flag 232 is now Implemented_By_Entry. 2007-12-06 Hristian Kirtchev * einfo.ads, einfo.adb: Flag 232 is now Implemented_By_Entry. (Implemented_By_Entry, Set_Implemented_By_Entry): New routines. (Write_Entry_Flags): Add an entry for Implemented_By_Entry. (Renamed_In_Spec): New flag (Has_Pragma_Inline_Always): New flag Add missing doc for pragma Obsolescent_Warning Add missing doc for 17 additional unused flags (230-247) (Is_Derived_Type): Remove condition "not Is_Generic_Type". Alphabetize with clauses. Separate Is_Thunk and Has_Thunks flags (Write_Entity_Flags): Add forgotten entry for Has_Thunks (Related_Interface): Renamed to Related_Type. (Has_Thunks/Set_Has_Thunks): Subprograms of new attribute. (Set_Is_Flag): Restrict the assertion. From-SVN: r130825 --- gcc/ada/einfo.adb | 172 +++++++++++++++++----- gcc/ada/einfo.ads | 426 +++++++++++++++++++++++++++++++++++------------------- 2 files changed, 409 insertions(+), 189 deletions(-) diff --git a/gcc/ada/einfo.adb b/gcc/ada/einfo.adb index ffa4ad0..3648741 100644 --- a/gcc/ada/einfo.adb +++ b/gcc/ada/einfo.adb @@ -36,9 +36,9 @@ pragma Style_Checks (All_Checks); with Atree; use Atree; with Nlists; use Nlists; +with Output; use Output; with Sinfo; use Sinfo; with Stand; use Stand; -with Output; use Output; package body Einfo is @@ -209,6 +209,8 @@ package body Einfo is -- Privals_Chain Elist23 -- Protected_Operation Node23 + -- Obsolescent_Warning Node24 + -- Abstract_Interface_Alias Node25 -- Abstract_Interfaces Elist25 -- Current_Use_Clause Node25 @@ -220,7 +222,7 @@ package body Einfo is -- Last_Assignment Node26 -- Overridden_Operation Node26 -- Package_Instantiation Node26 - -- Related_Interface Node26 + -- Related_Type Node26 -- Static_Initialization Node26 -- Wrapped_Entity Node27 @@ -484,20 +486,39 @@ package body Einfo is -- Is_Descendent_Of_Address Flag223 -- Is_Raised Flag224 -- Is_Thunk Flag225 - -- - -- (unused) Flag226 - -- (unused) Flag227 - -- (unused) Flag228 - -- (unused) Flag229 - -- (unused) Flag230 + -- Is_Only_Out_Parameter Flag226 + -- Referenced_As_Out_Parameter Flag227 + -- Has_Thunks Flag228 + -- Can_Use_Internal_Rep Flag229 + -- Has_Pragma_Inline_Always Flag230 + + -- Renamed_In_Spec Flag231 + -- Implemented_By_Entry Flag232 + + -- (unused) Flag233 + -- (unused) Flag234 + -- (unused) Flag235 + -- (unused) Flag236 + -- (unused) Flag237 + -- (unused) Flag238 + -- (unused) Flag239 + + -- (unused) Flag240 + -- (unused) Flag241 + -- (unused) Flag242 + -- (unused) Flag243 + -- (unused) Flag244 + -- (unused) Flag245 + -- (unused) Flag246 + -- (unused) Flag247 ----------------------- -- Local subprograms -- ----------------------- function Rep_Clause (Id : E; Rep_Name : Name_Id) return N; - -- Returns the attribute definition clause whose name is Rep_Name. Returns - -- Empty if not found. + -- Returns the attribute definition clause for Id whose name is Rep_Name. + -- Returns Empty if no matching attribute definition clause found for Id. ---------------- -- Rep_Clause -- @@ -1021,6 +1042,12 @@ package body Einfo is return Node28 (Id); end Extra_Formals; + function Can_Use_Internal_Rep (Id : E) return B is + begin + pragma Assert (Ekind (Id) in Access_Subprogram_Type_Kind); + return Flag229 (Id); + end Can_Use_Internal_Rep; + function Finalization_Chain_Entity (Id : E) return E is begin return Node19 (Id); @@ -1309,6 +1336,11 @@ package body Einfo is return Flag157 (Id); end Has_Pragma_Inline; + function Has_Pragma_Inline_Always (Id : E) return B is + begin + return Flag230 (Id); + end Has_Pragma_Inline_Always; + function Has_Pragma_Pack (Id : E) return B is begin pragma Assert (Is_Record_Type (Id) or else Is_Array_Type (Id)); @@ -1442,6 +1474,12 @@ package body Einfo is return Flag30 (Base_Type (Id)); end Has_Task; + function Has_Thunks (Id : E) return B is + begin + pragma Assert (Ekind (Id) = E_Constant); + return Flag228 (Id); + end Has_Thunks; + function Has_Unchecked_Union (Id : E) return B is begin return Flag123 (Base_Type (Id)); @@ -1483,6 +1521,14 @@ package body Einfo is return Node4 (Id); end Homonym; + function Implemented_By_Entry (Id : E) return B is + begin + pragma Assert + (Ekind (Id) = E_Function + or else Ekind (Id) = E_Procedure); + return Flag232 (Id); + end Implemented_By_Entry; + function In_Package_Body (Id : E) return B is begin return Flag48 (Id); @@ -1821,6 +1867,12 @@ package body Einfo is return Flag153 (Id); end Is_Obsolescent; + function Is_Only_Out_Parameter (Id : E) return B is + begin + pragma Assert (Is_Formal (Id)); + return Flag226 (Id); + end Is_Only_Out_Parameter; + function Is_Optional_Parameter (Id : E) return B is begin pragma Assert (Is_Formal (Id)); @@ -2320,6 +2372,11 @@ package body Einfo is return Flag36 (Id); end Referenced_As_LHS; + function Referenced_As_Out_Parameter (Id : E) return B is + begin + return Flag227 (Id); + end Referenced_As_Out_Parameter; + function Referenced_Object (Id : E) return N is begin pragma Assert (Is_Type (Id)); @@ -2345,18 +2402,24 @@ package body Einfo is return Node15 (Id); end Related_Instance; - function Related_Interface (Id : E) return E is + function Related_Type (Id : E) return E is begin pragma Assert (Ekind (Id) = E_Component or else Ekind (Id) = E_Constant); return Node26 (Id); - end Related_Interface; + end Related_Type; function Renamed_Entity (Id : E) return N is begin return Node18 (Id); end Renamed_Entity; + function Renamed_In_Spec (Id : E) return B is + begin + pragma Assert (Ekind (Id) = E_Package); + return Flag231 (Id); + end Renamed_In_Spec; + function Renamed_Object (Id : E) return N is begin return Node18 (Id); @@ -3310,6 +3373,12 @@ package body Einfo is Set_Node28 (Id, V); end Set_Extra_Formals; + procedure Set_Can_Use_Internal_Rep (Id : E; V : B := True) is + begin + pragma Assert (Ekind (Id) in Access_Subprogram_Type_Kind); + Set_Flag229 (Id, V); + end Set_Can_Use_Internal_Rep; + procedure Set_Finalization_Chain_Entity (Id : E; V : E) is begin Set_Node19 (Id, V); @@ -3616,6 +3685,11 @@ package body Einfo is Set_Flag157 (Id, V); end Set_Has_Pragma_Inline; + procedure Set_Has_Pragma_Inline_Always (Id : E; V : B := True) is + begin + Set_Flag230 (Id, V); + end Set_Has_Pragma_Inline_Always; + procedure Set_Has_Pragma_Pack (Id : E; V : B := True) is begin pragma Assert (Is_Array_Type (Id) or else Is_Record_Type (Id)); @@ -3752,6 +3826,13 @@ package body Einfo is Set_Flag30 (Id, V); end Set_Has_Task; + procedure Set_Has_Thunks (Id : E; V : B := True) is + begin + pragma Assert (Is_Tag (Id) + and then Ekind (Id) = E_Constant); + Set_Flag228 (Id, V); + end Set_Has_Thunks; + procedure Set_Has_Unchecked_Union (Id : E; V : B := True) is begin pragma Assert (Base_Type (Id) = Id); @@ -3787,6 +3868,14 @@ package body Einfo is Set_Node4 (Id, V); end Set_Homonym; + procedure Set_Implemented_By_Entry (Id : E; V : B := True) is + begin + pragma Assert + (Ekind (Id) = E_Function + or else Ekind (Id) = E_Procedure); + Set_Flag232 (Id, V); + end Set_Implemented_By_Entry; + procedure Set_In_Package_Body (Id : E; V : B := True) is begin Set_Flag48 (Id, V); @@ -4150,6 +4239,12 @@ package body Einfo is Set_Flag153 (Id, V); end Set_Is_Obsolescent; + procedure Set_Is_Only_Out_Parameter (Id : E; V : B := True) is + begin + pragma Assert (Ekind (Id) = E_Out_Parameter); + Set_Flag226 (Id, V); + end Set_Is_Only_Out_Parameter; + procedure Set_Is_Optional_Parameter (Id : E; V : B := True) is begin pragma Assert (Is_Formal (Id)); @@ -4288,7 +4383,9 @@ package body Einfo is procedure Set_Is_Tag (Id : E; V : B := True) is begin - pragma Assert (Nkind (Id) in N_Entity); + pragma Assert + (Ekind (Id) = E_Component + or else Ekind (Id) = E_Constant); Set_Flag78 (Id, V); end Set_Is_Tag; @@ -4659,6 +4756,11 @@ package body Einfo is Set_Flag36 (Id, V); end Set_Referenced_As_LHS; + procedure Set_Referenced_As_Out_Parameter (Id : E; V : B := True) is + begin + Set_Flag227 (Id, V); + end Set_Referenced_As_Out_Parameter; + procedure Set_Referenced_Object (Id : E; V : N) is begin pragma Assert (Is_Type (Id)); @@ -4684,18 +4786,24 @@ package body Einfo is Set_Node15 (Id, V); end Set_Related_Instance; - procedure Set_Related_Interface (Id : E; V : E) is + procedure Set_Related_Type (Id : E; V : E) is begin pragma Assert (Ekind (Id) = E_Component or else Ekind (Id) = E_Constant); Set_Node26 (Id, V); - end Set_Related_Interface; + end Set_Related_Type; procedure Set_Renamed_Entity (Id : E; V : N) is begin Set_Node18 (Id, V); end Set_Renamed_Entity; + procedure Set_Renamed_In_Spec (Id : E; V : B := True) is + begin + pragma Assert (Ekind (Id) = E_Package); + Set_Flag231 (Id, V); + end Set_Renamed_In_Spec; + procedure Set_Renamed_Object (Id : E; V : N) is begin Set_Node18 (Id, V); @@ -5927,7 +6035,7 @@ package body Einfo is function Has_Foreign_Convention (Id : E) return B is begin - return Convention (Id) >= Foreign_Convention'First; + return Convention (Id) in Foreign_Convention; end Has_Foreign_Convention; --------------------------- @@ -6014,28 +6122,6 @@ package body Einfo is end if; end Implementation_Base_Type; - ----------------------- - -- Is_Always_Inlined -- - ----------------------- - - function Is_Always_Inlined (Id : E) return B is - Item : Node_Id; - - begin - Item := First_Rep_Item (Id); - while Present (Item) loop - if Nkind (Item) = N_Pragma - and then Get_Pragma_Id (Chars (Item)) = Pragma_Inline_Always - then - return True; - end if; - - Next_Rep_Item (Item); - end loop; - - return False; - end Is_Always_Inlined; - --------------------- -- Is_Boolean_Type -- --------------------- @@ -6153,7 +6239,6 @@ package body Einfo is begin if Is_Type (Id) and then Base_Type (Id) /= Root_Type (Id) - and then not Is_Generic_Type (Id) and then not Is_Class_Wide_Type (Id) then if not Is_Numeric_Type (Root_Type (Id)) then @@ -7146,6 +7231,7 @@ package body Einfo is W ("Elaboration_Entity_Required", Flag174 (Id)); W ("Elaborate_Body_Desirable", Flag210 (Id)); W ("Entry_Accepted", Flag152 (Id)); + W ("Can_Use_Internal_Rep", Flag229 (Id)); W ("Finalize_Storage_Only", Flag158 (Id)); W ("From_With_Type", Flag159 (Id)); W ("Function_Returns_With_DSP", Flag169 (Id)); @@ -7184,6 +7270,7 @@ package body Einfo is W ("Has_Pragma_Controlled", Flag27 (Id)); W ("Has_Pragma_Elaborate_Body", Flag150 (Id)); W ("Has_Pragma_Inline", Flag157 (Id)); + W ("Has_Pragma_Inline_Always", Flag230 (Id)); W ("Has_Pragma_Pack", Flag121 (Id)); W ("Has_Pragma_Preelab_Init", Flag221 (Id)); W ("Has_Pragma_Pure", Flag203 (Id)); @@ -7208,11 +7295,13 @@ package body Einfo is W ("Has_Stream_Size_Clause", Flag184 (Id)); W ("Has_Subprogram_Descriptor", Flag93 (Id)); W ("Has_Task", Flag30 (Id)); + W ("Has_Thunks", Flag228 (Id)); W ("Has_Unchecked_Union", Flag123 (Id)); W ("Has_Unknown_Discriminants", Flag72 (Id)); W ("Has_Up_Level_Access", Flag215 (Id)); W ("Has_Volatile_Components", Flag87 (Id)); W ("Has_Xref_Entry", Flag182 (Id)); + W ("Implemented_By_Entry", Flag232 (Id)); W ("In_Package_Body", Flag48 (Id)); W ("In_Private_Part", Flag45 (Id)); W ("In_Use", Flag8 (Id)); @@ -7274,6 +7363,7 @@ package body Einfo is W ("Is_Non_Static_Subtype", Flag109 (Id)); W ("Is_Null_Init_Proc", Flag178 (Id)); W ("Is_Obsolescent", Flag153 (Id)); + W ("Is_Only_Out_Parameter", Flag226 (Id)); W ("Is_Optional_Parameter", Flag134 (Id)); W ("Is_Overriding_Operation", Flag39 (Id)); W ("Is_Package_Body_Entity", Flag160 (Id)); @@ -7329,6 +7419,8 @@ package body Einfo is W ("Reachable", Flag49 (Id)); W ("Referenced", Flag156 (Id)); W ("Referenced_As_LHS", Flag36 (Id)); + W ("Referenced_As_Out_Parameter", Flag227 (Id)); + W ("Renamed_In_Spec", Flag231 (Id)); W ("Requires_Overriding", Flag213 (Id)); W ("Return_Present", Flag54 (Id)); W ("Returns_By_Ref", Flag90 (Id)); @@ -8284,7 +8376,7 @@ package body Einfo is case Ekind (Id) is when E_Component | E_Constant => - Write_Str ("Related_Interface"); + Write_Str ("Related_Type"); when E_Generic_Package | E_Package => diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads index a24995c..5b43e1f 100644 --- a/gcc/ada/einfo.ads +++ b/gcc/ada/einfo.ads @@ -1031,18 +1031,16 @@ package Einfo is -- Extra_Formal (Node15) -- Present in formal parameters in the non-generic case. Certain --- parameters require extra implicit information to be passed --- (e.g. the flag indicating if an unconstrained variant record --- argument is constrained, and the accessibility level for --- access parameters. See description of Extra_Constrained, --- Extra_Accessibility fields for further details. Extra formal --- parameters are constructed to represent these values, and --- chained to the end of the list of formals using the --- Extra_Formal field (i.e. the Extra_Formal field of the last --- "real" formal points to the first extra formal, and the --- Extra_Formal field of each extra formal points to the next --- one, with Empty indicating the end of the list of extra --- formals. +-- parameters require extra implicit information to be passed (e.g. the +-- flag indicating if an unconstrained variant record argument is +-- constrained, and the accessibility level for access parameters. See +-- description of Extra_Constrained, Extra_Accessibility fields for +-- further details. Extra formal parameters are constructed to represent +-- these values, and chained to the end of the list of formals using the +-- Extra_Formal field (i.e. the Extra_Formal field of the last "real" +-- formal points to the first extra formal, and the Extra_Formal field of +-- each extra formal points to the next one, with Empty indicating the +-- end of the list of extra formals. -- Extra_Formals (Node28) -- Applies to subprograms and subprogram types, and also in entries @@ -1050,30 +1048,59 @@ package Einfo is -- or entry. Returns Empty if there are no extra formals. -- Extra_Accessibility (Node13) --- Present in formal parameters in the non-generic case if --- expansion is active. Normally Empty, but if a parameter is --- one for which a dynamic accessibility check is required, then --- an extra formal of type Natural is created (see description --- of field Extra_Formal), and the Extra_Accessibility field of --- the formal parameter points to the entity for this extra --- formal. Also present in variables when compiling receiving --- stubs. In this case, a non Empty value means that this --- variable's accessibility depth has been transmitted by the --- caller and must be retrieved through the entity designed by --- this field instead of being computed. +-- Present in formal parameters in the non-generic case if expansion is +-- active. Normally Empty, but if a parameter is one for which a dynamic +-- accessibility check is required, then an extra formal of type +-- Natural is created (see description of field Extra_Formal), and the +-- Extra_Accessibility field of the formal parameter points to the entity +-- for this extra formal. Also present in variables when compiling +-- receiving stubs. In this case, a non Empty value means that this +-- variable's accessibility depth has been transmitted by the caller and +-- must be retrieved through the entity designed by this field instead of +-- being computed. -- Extra_Constrained (Node23) --- Present in formal parameters in the non-generic case if --- expansion is active. Normally Empty, but if a parameter is --- one for which a dynamic indication of its constrained status --- is required, then an extra formal of type Boolean is created --- (see description of field Extra_Formal), and the --- Extra_Constrained field of the formal parameter points to the --- entity for this extra formal. Also present in variables when --- compiling receiving stubs. In this case, a non empty value --- means that this variable's constrained status has been --- transmitted by the caller and must be retrieved through the --- entity designed by this field instead of being computed. +-- Present in formal parameters in the non-generic case if expansion is +-- active. Normally Empty, but if a parameter is one for which a dynamic +-- indication of its constrained status is required, then an extra formal +-- of type Boolean is created (see description of field Extra_Formal), +-- and the Extra_Constrained field of the formal parameter points to the +-- entity for this extra formal. Also present in variables when compiling +-- receiving stubs. In this case, a non empty value means that this +-- variable's constrained status has been transmitted by the caller and +-- must be retrieved through the entity designed by this field instead of +-- being computed. + +-- Can_Use_Internal_Rep (Flag229) +-- Present in Access_Subprogram_Type_Kind nodes. This flag is set by +-- the front end and used by the back end. False means that the back end +-- must represent the type in the same way as Convention-C types (and +-- other foreign-convention types). On many targets, this means that the +-- back end will use dynamically generated trampolines for nested +-- subprograms. True means that the back end can represent the type in +-- some internal way. On the aforementioned targets, this means that the +-- back end will not use dynamically generated trampolines. This flag +-- must be False if Has_Foreign_Convention is True; otherwise, the front +-- end is free to set the policy. +-- +-- Setting this False in all cases corresponds to the traditional back +-- end strategy, where all access-to-subprogram types are represented the +-- same way, independent of the Convention. See also +-- Always_Compatible_Rep in Targparm. +-- +-- Efficiency note: On targets that use dynamically generated +-- trampolines, False generally favors efficiency of top-level +-- subprograms, whereas True generally favors efficiency of nested +-- ones. On other targets, this flag has little or no effect on +-- efficiency. The front end should take this into account. In +-- particular, pragma Favor_Top_Level gives a hint that the flag should +-- be False. +-- +-- Note: We considered using Convention-C for this purpose, but we need +-- this separate flag, because Convention-C implies that for +-- P'[Unrestricted_]Access, P also have convention C. Sometimes we want +-- to have Can_Use_Internal_Rep False for an access type, but allow P to +-- have convention Ada. -- Finalization_Chain_Entity (Node19) -- Present in scopes that can have finalizable entities (blocks, @@ -1162,13 +1189,12 @@ package Einfo is -- corresponding to the specified parameter. -- First_Private_Entity (Node16) --- Present in all entities containing private parts (packages, --- protected types and subtypes, task types and subtypes). The --- entities on the entity chain are in order of declaration, so the --- entries for private entities are at the end of the chain. This --- field points to the first entity for the private part. It is --- Empty if there are no entities declared in the private part or --- if there is no private part. +-- Present in all entities containing private parts (packages, protected +-- types and subtypes, task types and subtypes). The entities on the +-- entity chain are in order of declaration, so the entries for private +-- entities are at the end of the chain. This field points to the first +-- entity for the private part. It is Empty if there are no entities +-- declared in the private part or if there is no private part. -- First_Rep_Item (Node6) -- Present in all entities. If non-empty, points to a linked list of @@ -1180,11 +1206,17 @@ package Einfo is -- kind of rep item on the chain, in which case it is the first one -- that applies to the entity. -- +-- Note: pragmas that can apply to more than one overloadable entity, +-- (Convention, Interface, Inline, Inline_Always, Import, Export, +-- External) are never present on this chain when they apply to +-- overloadable entities, since it is impossible for a given pragma +-- to be on more than one chain at a time. +-- -- For most representation items, the representation information is --- reflected in other fields and flags in the entity. For example if --- a record representation clause is present, the component entities --- reflect the specified information. However, there are some items --- that are only reflected in the chain. These include: +-- reflected in other fields and flags in the entity. For example if a +-- record representation clause is present, the component entities +-- reflect the specified information. However, there are some items that +-- are only reflected in the chain. These include: -- -- Alignment attribute definition clause -- Machine_Attribute pragma @@ -1226,9 +1258,9 @@ package Einfo is -- stored in actual objects of the type. -- First_Subtype (synthesized) --- Applies to all types and subtypes. For types, yields the first --- subtype of the type. For subtypes, yields the first subtype of --- the base type of the subtype. +-- Applies to all types and subtypes. For types, yields the first subtype +-- of the type. For subtypes, yields the first subtype of the base type +-- of the subtype. -- First_Tag_Component (synthesized) -- Applies to tagged record types, returns the entity for the first @@ -1337,10 +1369,10 @@ package Einfo is -- reduce the required size. For example, a type with a range of 1..2 -- takes one bit, using 0 to represent 1 and 1 to represent 2. -- --- Note that in the object and component cases, the flag is only set --- if the type is unbiased, but the object specifies a smaller size --- than the size of the type, forcing biased representation for the --- object, but the subtype is still an unbiased type. +-- Note that in the object and component cases, the flag is only set if +-- the type is unbiased, but the object specifies a smaller size than the +-- size of the type, forcing biased representation for the object, but +-- the subtype is still an unbiased type. -- Has_Completion (Flag26) -- Present in all entities that require a completion (functions, @@ -1440,10 +1472,10 @@ package Einfo is -- linear elaboration of front-end inlining. -- Has_Fully_Qualified_Name (Flag173) --- Present in all entities. Set True if the name in the Chars field --- has been replaced by the fully qualified name, as used for debug --- output. See Exp_Dbug for a full description of the use of this --- flag and also the related flag Has_Qualified_Name. +-- Present in all entities. Set True if the name in the Chars field has +-- been replaced by the fully qualified name, as used for debug output. +-- See Exp_Dbug for a full description of the use of this flag and also +-- the related flag Has_Qualified_Name. -- Has_Gigi_Rep_Item (Flag82) -- Present in all entities. Set if the rep item chain (referenced by @@ -1555,14 +1587,18 @@ package Einfo is -- pragma Elaborate_Body applies to the compilation unit. -- Has_Pragma_Inline (Flag157) --- Present in all entities. Set for functions and procedures for which --- a pragma Inline or Inline_Always applies to the subprogram. Note --- that this flag can be set even if Is_Inlined is not set. This --- happens for pragma Inline (if Inline_Active is False). In other --- words, the flag Has_Pragma_Inline represents the formal semantic --- status, and is used for checking semantic correctness. --- The flag Is_Inlined indicates whether inlining is actually active --- for the entity. +-- Present in all entities. Set for functions and procedures for which a +-- pragma Inline or Inline_Always applies to the subprogram. Note that +-- this flag can be set even if Is_Inlined is not set. This happens for +-- pragma Inline (if Inline_Active is False). In other words, the flag +-- Has_Pragma_Inline represents the formal semantic status, and is used +-- for checking semantic correctness. The flag Is_Inlined indicates +-- whether inlining is actually active for the entity. + +-- Has_Pragma_Inline_Always (Flag230) +-- Present in all entities. Set for functions and procedures for which a +-- pragma Inline_Always applies. Note that if this flag is set, the flag +-- Has_Pragma_Inline is also set. -- Has_Pragma_Pack (Flag121) [implementation base type only] -- Present in all entities. If set, indicates that a valid pragma Pack @@ -1707,6 +1743,10 @@ package Einfo is -- such an object must create the required tasks. Note: the flag is not -- set on access types, even if they designate an object that Has_Task. +-- Has_Thunks (Flag228) +-- Applies to E_Constant entities marked Is_Tag. True for secondary tag +-- referencing a dispatch table whose contents are pointers to thunks. + -- Has_Unchecked_Union (Flag123) [base type only] -- Present in all type entities. Set on unchecked unions themselves -- and (recursively) on any composite type which has a component for @@ -1729,15 +1769,15 @@ package Einfo is -- inherited in certain contexts. -- Has_Volatile_Components (Flag87) [implementation base type only] --- Present in all types and objects. Set only for an array type or --- array object if a valid pragma Volatile_Components or a valid --- pragma Atomic_Components applies to the type or object. Note that --- in the case of an object, this flag is only set on the object if --- there was an explicit pragma for the object. In other words, the --- proper test for whether an object has volatile components is to --- see if either the object or its base type has this flag set. Note --- that in the case of a type the pragma will be chained to the rep --- item chain of the first subtype in the usual manner. +-- Present in all types and objects. Set only for an array type or array +-- object if a valid pragma Volatile_Components or a valid pragma +-- Atomic_Components applies to the type or object. Note that in the case +-- of an object, this flag is only set on the object if there was an +-- explicit pragma for the object. In other words, the proper test for +-- whether an object has volatile components is to see if either the +-- object or its base type has this flag set. Note that in the case of a +-- type the pragma will be chained to the rep item chain of the first +-- subtype in the usual manner. -- Has_Xref_Entry (Flag182) -- Present in all entities. Set if an entity has an entry in the Xref @@ -1763,13 +1803,16 @@ package Einfo is -- resolution and for the generation of debugging information. -- Implementation_Base_Type (synthesized) --- Applies to all types. Similar to Base_Type, but never returns a --- private type when applied to a non-private type. Instead in this case, --- it always returns the Underlying_Type of the base type, so that we --- still have a concrete type. Note: it is allowed to apply --- Implementation_Base_Type to other than a type, in which case it simply +-- Applies to all entities. For types, similar to Base_Type, but never +-- returns a private type when applied to a non-private type. Instead in +-- this case, it always returns the Underlying_Type of the base type, so +-- that we still have a concrete type. For entities other than types, -- returns the entity unchanged. +-- Implemented_By_Entry (Flag232) +-- Applies to functions and procedures. Set if pragma Implemented_By_ +-- Entry is applied on the subprogram entity. + -- In_Package_Body (Flag48) -- Present in package entities. Set on the entity that denotes the -- package (the defining occurrence of the package declaration) while @@ -1802,15 +1845,14 @@ package Einfo is -- is present (since it is meaningless in this case). -- -- An additional special case usage of this field is in JGNAT for --- E_Component and E_Discriminant. JGNAT allows these entities to --- be imported by specifying pragma Import within a component's --- containing record definition. This supports interfacing to --- object fields defined within Java classes, and such pragmas --- are generated by the jvm2ada binding generator tool whenever --- it processes classes with public object fields. A pragma Import --- for a component can define the External_Name of the imported --- Java field (which is generally needed, because Java names are --- case sensitive). +-- E_Component and E_Discriminant. JGNAT allows these entities to be +-- imported by specifying pragma Import within a component's containing +-- record definition. This supports interfacing to object fields defined +-- within Java classes, and such pragmas are generated by the jvm2ada +-- binding generator tool whenever it processes classes with public +-- object fields. A pragma Import for a component can define the +-- External_Name of the imported Java field (which is generally needed, +-- because Java names are case sensitive). -- -- In_Use (Flag8) -- Present in packages and types. Set when analyzing a use clause for @@ -1826,14 +1868,6 @@ package Einfo is -- Is_Abstract_Type (Flag146) -- Present in all types. Set for abstract types. --- Is_Local_Anonymous_Access (Flag194) --- Present in access types. Set for an anonymous access type to indicate --- that the type is created for a record component with an access --- definition, an array component, or a stand-alone object. Such --- anonymous types have an accessibility level equal to that of the --- declaration in which they appear, unlike the anonymous access types --- that are created for access parameters and access discriminants. - -- Is_Access_Constant (Flag69) -- Present in access types and subtypes. Indicates that the keyword -- constant was present in the access type definition. @@ -1855,10 +1889,6 @@ package Einfo is -- Present in objects whose declarations carry the keyword aliased, -- and on record components that have the keyword. --- Is_Always_Inlined (synthesized) --- Present in subprograms. True if there is a pragma Inline_Always for --- the subprogram. - -- Is_AST_Entry (Flag132) -- Present in entry entities. Set if a valid pragma AST_Entry applies -- to the entry. This flag can only be set in OpenVMS versions of GNAT. @@ -1880,13 +1910,13 @@ package Einfo is -- if a pragma Asynchronous applies to the entity. -- Is_Bit_Packed_Array (Flag122) [implementation base type only] --- Present in all entities. This flag is set for a packed array --- type that is bit packed (i.e. the component size is known by the --- front end and is in the range 1-7, 9-15, 17-31, or 33-63). Is_Packed --- is always set if Is_Bit_Packed_Array is set, but it is possible for --- Is_Packed to be set without Is_Bit_Packed_Array for the case of an --- array having one or more index types that are enumeration types --- with non-standard enumeration representations. +-- Present in all entities. This flag is set for a packed array type that +-- is bit packed (i.e. the component size is known by the front end and +-- is in the range 1-7, 9-15, 17-31, or 33-63). Is_Packed is always set +-- if Is_Bit_Packed_Array is set, but it is possible for Is_Packed to be +-- set without Is_Bit_Packed_Array for the case of an array having one or +-- more index types that are enumeration types with non-standard +-- enumeration representations. -- Is_Boolean_Type (synthesized) -- Applies to all entities, true for boolean types and subtypes, @@ -1951,8 +1981,8 @@ package Einfo is -- for further details. -- Is_Concurrent_Type (synthesized) --- Applies to all entities, true for task types and subtypes and --- for protected types and subtypes. +-- Applies to all entities, true for task types and subtypes and for +-- protected types and subtypes. -- Is_Constrained (Flag12) -- Present in types or subtypes which may have index, discriminant @@ -2077,10 +2107,10 @@ package Einfo is -- Present in all entities. Set for generic formal subprograms. -- Is_For_Access_Subtype (Flag118) --- Present in E_Private_Subtype and E_Record_Subtype entities. --- Means the sole purpose of the type is to be designated by an --- Access_Subtype and hence should not be expanded into components --- because the type may not have been found or frozen yet. +-- Present in E_Private_Subtype and E_Record_Subtype entities. Means the +-- sole purpose of the type is to be designated by an Access_Subtype and +-- hence should not be expanded into components because the type may not +-- have been found or frozen yet. -- Is_Frozen (Flag4) -- Present in all type and subtype entities. Set if type or subtype has @@ -2176,14 +2206,23 @@ package Einfo is -- Is_Internal (Flag17) -- Present in all entities. Set to indicate an entity created during -- semantic processing (e.g. an implicit type, or a temporary). The --- current uses of this flag are: 1) to indicate that internal entities --- (such as temporaries generated for the result of an inlined function --- call or dummy variables generated for the debugger) need not be --- initialized, even when scalars are initialized or normalized, and 2) --- to indicate object declarations generated by the expander that are --- implicitly imported or exported, so that they can be appropriately --- marked in Sprint output. - +-- current uses of this flag are: +-- +-- 1) Internal entities (such as temporaries generated for the result +-- of an inlined function call or dummy variables generated for the +-- debugger). Set to indicate that they need not be initialized, even +-- when scalars are initialized or normalized; +-- +-- 2) Predefined primitives of tagged types. Set to mark that they +-- have specific properties: first they are primitives even if they +-- are not defined in the type scope (the freezing point is not +-- necessarily in the same scope), and second the predefined equality +-- can be overridden by a user-defined equality, no body will be +-- generated in this case. +-- +-- 3) Object declarations generated by the expander that are implicitly +-- imported or exported so that they can be marked in Sprint output. +-- -- Is_Interrupt_Handler (Flag89) -- Present in procedures. Set if a pragma Interrupt_Handler applies -- to the procedure. The procedure must be parameterless, and on all @@ -2297,6 +2336,14 @@ package Einfo is -- composite containing a limited component, or a subtype of any of -- these types). +-- Is_Local_Anonymous_Access (Flag194) +-- Present in access types. Set for an anonymous access type to indicate +-- that the type is created for a record component with an access +-- definition, an array component, or a stand-alone object. Such +-- anonymous types have an accessibility level equal to that of the +-- declaration in which they appear, unlike the anonymous access types +-- that are created for access parameters and access discriminants. + -- Is_Machine_Code_Subprogram (Flag137) -- Present in subprogram entities. Set to indicate that the subprogram -- is a machine code subprogram (i.e. its body includes at least one @@ -2343,6 +2390,12 @@ package Einfo is -- Present in all entities. Set for any entity for which a valid pragma -- Obsolescent applies. +-- Is_Only_Out_Parameter (Flag226) +-- Present in formal parameter entities. Set if this parameter is the +-- only OUT parameter for this formal part. If there is more than one +-- out parameter, or if there is some other IN OUT parameter then this +-- flag is not set in any of them. Used in generation of warnings. + -- Is_Optional_Parameter (Flag134) -- Present in parameter entities. Set if the parameter is specified as -- optional by use of a First_Optional_Parameter argument to one of the @@ -2568,10 +2621,10 @@ package Einfo is -- interface. -- Is_Tag (Flag78) --- Present in E_Component entities. For regular tagged type this flag is --- set on the tag component (whose name is Name_uTag) and for CPP_Class --- tagged types, this flag marks the pointer to the main vtable (i.e. the --- one to be extended by derivation) +-- Present in E_Component and E_Constant entities. For regular tagged +-- type this flag is set on the tag component (whose name is Name_uTag) +-- and for CPP_Class tagged types, this flag marks the pointer to the +-- main vtable (i.e. the one to be extended by derivation). -- Is_Tagged_Type (Flag55) -- Present in all entities. Set for an entity for a tagged type. @@ -2593,8 +2646,8 @@ package Einfo is -- at run-time thunks displace the pointer to the object (pointer named -- "this" in the C++ terminology) from a secondary dispatch table to the -- primary dispatch table associated with a given tagged type. Set by --- Expand_Interface_Thunk and used by Expand_Call to handle extra --- actuals associated with accessibility level. +-- Expand_Interface Thunk and used by Expand_Call to handle extra actuals +-- associated with accessibility level. -- Is_True_Constant (Flag163) -- This flag applies to all entities for constants and variables. Set @@ -3163,10 +3216,11 @@ package Einfo is -- which a goto to that label is legal. -- Referenced (Flag156) --- Present in all entities. Set if the entity is referenced, except --- for the case of an appearence of a simple variable, that is not a --- renaming, as the left side of an assignment in which case the flag --- Referenced_As_LHS is set instead. +-- Present in all entities. Set if the entity is referenced, except for +-- the case of an appearence of a simple variable that is not a renaming +-- as the left side of an assignment in which case Referenced_As_LHS is +-- set instead, or a similar appearence as an out parameter actual, in +-- which case As_Out_Parameter_Parameter is set. -- Referenced_As_LHS (Flag36): -- Present in all entities. This flag is set instead of Referenced if a @@ -3175,6 +3229,13 @@ package Einfo is -- we have a separate warning for variables that are only assigned and -- never read. +-- Referenced_As_Out_Parameter (Flag227): +-- Present in all entities. This flag is set instead of Referenced if a +-- simple variable that is not a renaming appears as an actual for an out +-- formal. The reason we distinguish this kind of reference is that +-- we have a separate warning for variables that are only assigned and +-- never read, and out parameters are a special case. + -- Referenced_Object (Node10) -- Present in all type entities. Set non-Empty only for type entities -- constructed for unconstrained objects, or objects that depend on @@ -3201,9 +3262,10 @@ package Einfo is -- wrapper package, but for debugging purposes its external symbol -- must correspond to the name and scope of the related instance. --- Related_Interface (Node26) +-- Related_Type (Node26) -- Present in components and constants associated with dispatch tables. --- Set to point to the entity of the associated interface type. +-- Set to point to the entity of the associated tagged type or interface +-- type. -- Renamed_Entity (Node18) -- Present in exceptions, packages, subprograms and generic units. Set @@ -3211,6 +3273,14 @@ package Einfo is -- renamed entity, or transititively the ultimate renamed entity if -- there is a chain of renaming declarations. Empty if no renaming. +-- Renamed_In_Spec (Flag231) + +-- Present in package entities. If a package renaming occurs within +-- a package spec, then this flag is set on the renamed package. The +-- purpose is to prevent a warning about unused entities in the renamed +-- package. Such a warning would be inappropriate since clients of the +-- package can see the entities in the package via the renaming. + -- Renamed_Object (Node18) -- Present in all objects (constants, variables, components, formal -- parameters, generic formal parameters, and loop parameters). @@ -3575,15 +3645,20 @@ package Einfo is -- Access Kinds -- ------------------ - -- The following five entity kinds are introduced by the corresponding - -- type definitions: + -- The following entity kinds are introduced by the corresponding type + -- definitions: -- E_Access_Type, -- E_General_Access_Type, + -- E_Access_Subprogram_Type, -- E_Anonymous_Access_Subprogram_Type, + -- E_Access_Protected_Subprogram_Type, -- E_Anonymous_Access_Protected_Subprogram_Type -- E_Anonymous_Access_Type. + -- E_Access_Subtype is for an access subtype created by a subtype + -- declaration. + -- In addition, we define the kind E_Allocator_Type to label -- allocators. This is because special resolution rules apply to this -- construct. Eventually the constructs are labeled with the access @@ -4038,6 +4113,12 @@ package Einfo is -- E_Anonymous_Access_Protected_Subprogram_Type E_Anonymous_Access_Type; + subtype Access_Subprogram_Type_Kind is Entity_Kind range + E_Access_Subprogram_Type .. + -- E_Anonymous_Access_Subprogram_Type + -- E_Access_Protected_Subprogram_Type + E_Anonymous_Access_Protected_Subprogram_Type; + subtype Access_Protected_Kind is Entity_Kind range E_Access_Protected_Subprogram_Type .. E_Anonymous_Access_Protected_Subprogram_Type; @@ -4388,6 +4469,7 @@ package Einfo is -- Has_Persistent_BSS (Flag188) -- Has_Pragma_Elaborate_Body (Flag150) -- Has_Pragma_Inline (Flag157) + -- Has_Pragma_Inline_Always (Flag230) -- Has_Pragma_Pack (Flag121) (base type only) -- Has_Pragma_Pure (Flag203) -- Has_Pragma_Pure_Function (Flag179) @@ -4450,6 +4532,7 @@ package Einfo is -- No_Return (Flag113) -- Referenced (Flag156) -- Referenced_As_LHS (Flag36) + -- Referenced_As_Out_Parameter (Flag227) -- Suppress_Elaboration_Warnings (Flag148) -- Suppress_Style_Checks (Flag165) -- Suppress_Value_Tracking_On_Call (Flag217) @@ -4554,12 +4637,14 @@ package Einfo is -- Equivalent_Type (Node18) -- Directly_Designated_Type (Node20) -- Needs_No_Actuals (Flag22) + -- Can_Use_Internal_Rep (Flag229) -- (plus type attributes) -- E_Access_Subprogram_Type -- Equivalent_Type (Node18) (remote types only) -- Directly_Designated_Type (Node20) -- Needs_No_Actuals (Flag22) + -- Can_Use_Internal_Rep (Flag229) -- (plus type attributes) -- E_Access_Type @@ -4571,8 +4656,8 @@ package Einfo is -- Associated_Final_Chain (Node23) -- Has_Pragma_Controlled (Flag27) (base type only) -- Has_Storage_Size_Clause (Flag23) (base type only) - -- Is_Local_Anonymous_Access (Flag194) -- Is_Access_Constant (Flag69) + -- Is_Local_Anonymous_Access (Flag194) -- Is_Pure_Unit_Access_Type (Flag189) -- No_Pool_Assigned (Flag131) (base type only) -- No_Strict_Aliasing (Flag136) (base type only) @@ -4588,6 +4673,11 @@ package Einfo is -- E_Anonymous_Access_Subprogram_Type -- E_Anonymous_Access_Protected_Subprogram_Type + -- Storage_Size_Variable (Node15) ??? is this needed ??? + -- Directly_Designated_Type (Node20) + -- Can_Use_Internal_Rep (Flag229) + -- (plus type attributes) + -- E_Anonymous_Access_Type -- Storage_Size_Variable (Node15) ??? is this needed ??? -- Directly_Designated_Type (Node20) @@ -4652,7 +4742,7 @@ package Einfo is -- Original_Record_Component (Node22) -- Protected_Operation (Node23) -- DT_Offset_To_Top_Func (Node25) - -- Related_Interface (Node26) + -- Related_Type (Node26) -- Has_Biased_Representation (Flag139) -- Has_Per_Object_Constraint (Flag154) -- Is_Atomic (Flag85) @@ -4676,11 +4766,12 @@ package Einfo is -- Renamed_Object (Node18) -- Size_Check_Code (Node19) (constants only) -- Interface_Name (Node21) - -- Related_Interface (Node26) (constants only) + -- Related_Type (Node26) (constants only) -- Has_Alignment_Clause (Flag46) -- Has_Atomic_Components (Flag86) -- Has_Biased_Representation (Flag139) -- Has_Completion (Flag26) (constants only) + -- Has_Thunks (Flag228) (constants only) -- Has_Size_Clause (Flag29) -- Has_Up_Level_Access (Flag215) -- Has_Volatile_Components (Flag87) @@ -4841,6 +4932,7 @@ package Einfo is -- Has_Nested_Block_With_Handler (Flag101) -- Has_Recursive_Call (Flag143) -- Has_Subprogram_Descriptor (Flag93) + -- Implemented_By_Entry (Flag232) (non-generic case only) -- Is_Abstract_Subprogram (Flag19) (non-generic case only) -- Is_Called (Flag102) (non-generic case only) -- Is_Constructor (Flag76) @@ -4920,6 +5012,7 @@ package Einfo is -- Last_Assignment (Node26) (OUT, IN-OUT only) -- Has_Initial_Value (Flag219) -- Is_Controlling_Formal (Flag97) + -- Is_Only_Out_Parameter (Flag226) -- Is_Optional_Parameter (Flag134) -- Low_Bound_Known (Flag205) -- Is_Return_Object (Flag209) @@ -5027,6 +5120,7 @@ package Einfo is -- Is_Private_Descendant (Flag53) -- Is_Visible_Child_Unit (Flag116) -- Is_Wrapper_Package (synth) (non-generic case only) + -- Renamed_In_Spec (Flag231) (non-generic case only) -- Scope_Depth (synth) -- Static_Elaboration_Desired (Flag77) (non-generic case only) @@ -5096,6 +5190,7 @@ package Einfo is -- Has_Master_Entity (Flag21) -- Has_Nested_Block_With_Handler (Flag101) -- Has_Subprogram_Descriptor (Flag93) + -- Implemented_By_Entry (Flag232) (non-generic case only) -- Is_Visible_Child_Unit (Flag116) -- Is_Abstract_Subprogram (Flag19) (non-generic case only) -- Is_Asynchronous (Flag81) @@ -5626,6 +5721,7 @@ package Einfo is function Extra_Constrained (Id : E) return E; function Extra_Formal (Id : E) return E; function Extra_Formals (Id : E) return E; + function Can_Use_Internal_Rep (Id : E) return B; function Finalization_Chain_Entity (Id : E) return E; function Finalize_Storage_Only (Id : E) return B; function First_Entity (Id : E) return E; @@ -5680,6 +5776,7 @@ package Einfo is function Has_Pragma_Controlled (Id : E) return B; function Has_Pragma_Elaborate_Body (Id : E) return B; function Has_Pragma_Inline (Id : E) return B; + function Has_Pragma_Inline_Always (Id : E) return B; function Has_Pragma_Pack (Id : E) return B; function Has_Pragma_Preelab_Init (Id : E) return B; function Has_Pragma_Pure (Id : E) return B; @@ -5703,12 +5800,14 @@ package Einfo is function Has_Stream_Size_Clause (Id : E) return B; function Has_Subprogram_Descriptor (Id : E) return B; function Has_Task (Id : E) return B; + function Has_Thunks (Id : E) return B; function Has_Unchecked_Union (Id : E) return B; function Has_Unknown_Discriminants (Id : E) return B; function Has_Volatile_Components (Id : E) return B; function Has_Xref_Entry (Id : E) return B; function Hiding_Loop_Variable (Id : E) return E; function Homonym (Id : E) return E; + function Implemented_By_Entry (Id : E) return B; function In_Package_Body (Id : E) return B; function In_Private_Part (Id : E) return B; function In_Use (Id : E) return B; @@ -5717,7 +5816,6 @@ package Einfo is function Is_AST_Entry (Id : E) return B; function Is_Abstract_Subprogram (Id : E) return B; function Is_Abstract_Type (Id : E) return B; - function Is_Local_Anonymous_Access (Id : E) return B; function Is_Access_Constant (Id : E) return B; function Is_Ada_2005_Only (Id : E) return B; function Is_Aliased (Id : E) return B; @@ -5762,10 +5860,12 @@ package Einfo is function Is_Known_Valid (Id : E) return B; function Is_Limited_Composite (Id : E) return B; function Is_Limited_Interface (Id : E) return B; + function Is_Local_Anonymous_Access (Id : E) return B; function Is_Machine_Code_Subprogram (Id : E) return B; function Is_Non_Static_Subtype (Id : E) return B; function Is_Null_Init_Proc (Id : E) return B; function Is_Obsolescent (Id : E) return B; + function Is_Only_Out_Parameter (Id : E) return B; function Is_Optional_Parameter (Id : E) return B; function Is_Package_Body_Entity (Id : E) return B; function Is_Packed (Id : E) return B; @@ -5791,6 +5891,7 @@ package Einfo is function Is_Tag (Id : E) return B; function Is_Tagged_Type (Id : E) return B; function Is_Task_Interface (Id : E) return B; + function Is_Thunk (Id : E) return B; function Is_True_Constant (Id : E) return B; function Is_Unchecked_Union (Id : E) return B; function Is_Unsigned_Type (Id : E) return B; @@ -5850,12 +5951,14 @@ package Einfo is function Reachable (Id : E) return B; function Referenced (Id : E) return B; function Referenced_As_LHS (Id : E) return B; + function Referenced_As_Out_Parameter (Id : E) return B; function Referenced_Object (Id : E) return N; function Register_Exception_Call (Id : E) return N; function Related_Array_Object (Id : E) return E; function Related_Instance (Id : E) return E; - function Related_Interface (Id : E) return E; + function Related_Type (Id : E) return E; function Renamed_Entity (Id : E) return N; + function Renamed_In_Spec (Id : E) return B; function Renamed_Object (Id : E) return N; function Renaming_Map (Id : E) return U; function Requires_Overriding (Id : E) return B; @@ -5953,7 +6056,6 @@ package Einfo is function Is_Signed_Integer_Type (Id : E) return B; function Is_Subprogram (Id : E) return B; function Is_Task_Type (Id : E) return B; - function Is_Thunk (Id : E) return B; function Is_Type (Id : E) return B; ------------------------------------- @@ -5985,7 +6087,6 @@ package Einfo is function Has_Private_Ancestor (Id : E) return B; function Has_Private_Declaration (Id : E) return B; function Implementation_Base_Type (Id : E) return E; - function Is_Always_Inlined (Id : E) return B; function Is_Boolean_Type (Id : E) return B; function Is_By_Copy_Type (Id : E) return B; function Is_By_Reference_Type (Id : E) return B; @@ -6162,6 +6263,7 @@ package Einfo is procedure Set_Extra_Constrained (Id : E; V : E); procedure Set_Extra_Formal (Id : E; V : E); procedure Set_Extra_Formals (Id : E; V : E); + procedure Set_Can_Use_Internal_Rep (Id : E; V : B := True); procedure Set_Finalization_Chain_Entity (Id : E; V : E); procedure Set_Finalize_Storage_Only (Id : E; V : B := True); procedure Set_First_Entity (Id : E; V : E); @@ -6215,6 +6317,7 @@ package Einfo is procedure Set_Has_Pragma_Controlled (Id : E; V : B := True); procedure Set_Has_Pragma_Elaborate_Body (Id : E; V : B := True); procedure Set_Has_Pragma_Inline (Id : E; V : B := True); + procedure Set_Has_Pragma_Inline_Always (Id : E; V : B := True); procedure Set_Has_Pragma_Pack (Id : E; V : B := True); procedure Set_Has_Pragma_Preelab_Init (Id : E; V : B := True); procedure Set_Has_Pragma_Pure (Id : E; V : B := True); @@ -6239,12 +6342,14 @@ package Einfo is procedure Set_Has_Stream_Size_Clause (Id : E; V : B := True); procedure Set_Has_Subprogram_Descriptor (Id : E; V : B := True); procedure Set_Has_Task (Id : E; V : B := True); + procedure Set_Has_Thunks (Id : E; V : B := True); procedure Set_Has_Unchecked_Union (Id : E; V : B := True); procedure Set_Has_Unknown_Discriminants (Id : E; V : B := True); procedure Set_Has_Volatile_Components (Id : E; V : B := True); procedure Set_Has_Xref_Entry (Id : E; V : B := True); procedure Set_Hiding_Loop_Variable (Id : E; V : E); procedure Set_Homonym (Id : E; V : E); + procedure Set_Implemented_By_Entry (Id : E; V : B := True); procedure Set_In_Package_Body (Id : E; V : B := True); procedure Set_In_Private_Part (Id : E; V : B := True); procedure Set_In_Use (Id : E; V : B := True); @@ -6253,7 +6358,6 @@ package Einfo is procedure Set_Is_AST_Entry (Id : E; V : B := True); procedure Set_Is_Abstract_Subprogram (Id : E; V : B := True); procedure Set_Is_Abstract_Type (Id : E; V : B := True); - procedure Set_Is_Local_Anonymous_Access (Id : E; V : B := True); procedure Set_Is_Access_Constant (Id : E; V : B := True); procedure Set_Is_Ada_2005_Only (Id : E; V : B := True); procedure Set_Is_Aliased (Id : E; V : B := True); @@ -6304,10 +6408,12 @@ package Einfo is procedure Set_Is_Limited_Composite (Id : E; V : B := True); procedure Set_Is_Limited_Interface (Id : E; V : B := True); procedure Set_Is_Limited_Record (Id : E; V : B := True); + procedure Set_Is_Local_Anonymous_Access (Id : E; V : B := True); procedure Set_Is_Machine_Code_Subprogram (Id : E; V : B := True); procedure Set_Is_Non_Static_Subtype (Id : E; V : B := True); procedure Set_Is_Null_Init_Proc (Id : E; V : B := True); procedure Set_Is_Obsolescent (Id : E; V : B := True); + procedure Set_Is_Only_Out_Parameter (Id : E; V : B := True); procedure Set_Is_Optional_Parameter (Id : E; V : B := True); procedure Set_Is_Overriding_Operation (Id : E; V : B := True); procedure Set_Is_Package_Body_Entity (Id : E; V : B := True); @@ -6394,12 +6500,14 @@ package Einfo is procedure Set_Reachable (Id : E; V : B := True); procedure Set_Referenced (Id : E; V : B := True); procedure Set_Referenced_As_LHS (Id : E; V : B := True); + procedure Set_Referenced_As_Out_Parameter (Id : E; V : B := True); procedure Set_Referenced_Object (Id : E; V : N); procedure Set_Register_Exception_Call (Id : E; V : N); procedure Set_Related_Array_Object (Id : E; V : E); procedure Set_Related_Instance (Id : E; V : E); - procedure Set_Related_Interface (Id : E; V : E); + procedure Set_Related_Type (Id : E; V : E); procedure Set_Renamed_Entity (Id : E; V : N); + procedure Set_Renamed_In_Spec (Id : E; V : B := True); procedure Set_Renamed_Object (Id : E; V : N); procedure Set_Renaming_Map (Id : E; V : U); procedure Set_Requires_Overriding (Id : E; V : B := True); @@ -6598,8 +6706,14 @@ package Einfo is procedure Record_Rep_Item (E : Entity_Id; N : Node_Id); -- N is the node for either a representation pragma or an attribute - -- definition clause that applies to entity E. This procedure links - -- the node N onto the Rep_Item chain for entity E. + -- definition clause that applies to entity E. This procedure links the + -- node N onto the Rep_Item chain for entity E. Note that it is an error to + -- call this procedure with E being overloadable, and N being a pragma that + -- can apply to multiple overloadable entities (i.e. Convention, Interface, + -- Inline, Inline_Always, Import, Export, External). This is not allowed + -- even if in fact the entity is not overloaded, since we can't rely on + -- it being present in the overloaded case, it is not useful to have it + -- present in the non-overloaded case. ------------------------------- -- Miscellaneous Subprograms -- @@ -6760,6 +6874,7 @@ package Einfo is pragma Inline (Extra_Constrained); pragma Inline (Extra_Formal); pragma Inline (Extra_Formals); + pragma Inline (Can_Use_Internal_Rep); pragma Inline (Finalization_Chain_Entity); pragma Inline (First_Entity); pragma Inline (First_Index); @@ -6811,6 +6926,7 @@ package Einfo is pragma Inline (Has_Pragma_Controlled); pragma Inline (Has_Pragma_Elaborate_Body); pragma Inline (Has_Pragma_Inline); + pragma Inline (Has_Pragma_Inline_Always); pragma Inline (Has_Pragma_Pack); pragma Inline (Has_Pragma_Preelab_Init); pragma Inline (Has_Pragma_Pure); @@ -6835,6 +6951,7 @@ package Einfo is pragma Inline (Has_Stream_Size_Clause); pragma Inline (Has_Subprogram_Descriptor); pragma Inline (Has_Task); + pragma Inline (Has_Thunks); pragma Inline (Has_Unchecked_Union); pragma Inline (Has_Unknown_Discriminants); pragma Inline (Has_Up_Level_Access); @@ -6842,6 +6959,7 @@ package Einfo is pragma Inline (Has_Xref_Entry); pragma Inline (Hiding_Loop_Variable); pragma Inline (Homonym); + pragma Inline (Implemented_By_Entry); pragma Inline (In_Package_Body); pragma Inline (In_Private_Part); pragma Inline (In_Use); @@ -6850,7 +6968,6 @@ package Einfo is pragma Inline (Is_AST_Entry); pragma Inline (Is_Abstract_Subprogram); pragma Inline (Is_Abstract_Type); - pragma Inline (Is_Local_Anonymous_Access); pragma Inline (Is_Access_Constant); pragma Inline (Is_Ada_2005_Only); pragma Inline (Is_Access_Type); @@ -6925,12 +7042,14 @@ package Einfo is pragma Inline (Is_Limited_Composite); pragma Inline (Is_Limited_Interface); pragma Inline (Is_Limited_Record); + pragma Inline (Is_Local_Anonymous_Access); pragma Inline (Is_Machine_Code_Subprogram); pragma Inline (Is_Modular_Integer_Type); pragma Inline (Is_Named_Number); pragma Inline (Is_Non_Static_Subtype); pragma Inline (Is_Null_Init_Proc); pragma Inline (Is_Obsolescent); + pragma Inline (Is_Only_Out_Parameter); pragma Inline (Is_Numeric_Type); pragma Inline (Is_Object); pragma Inline (Is_Optional_Parameter); @@ -7032,12 +7151,14 @@ package Einfo is pragma Inline (Reachable); pragma Inline (Referenced); pragma Inline (Referenced_As_LHS); + pragma Inline (Referenced_As_Out_Parameter); pragma Inline (Referenced_Object); pragma Inline (Register_Exception_Call); pragma Inline (Related_Array_Object); pragma Inline (Related_Instance); - pragma Inline (Related_Interface); + pragma Inline (Related_Type); pragma Inline (Renamed_Entity); + pragma Inline (Renamed_In_Spec); pragma Inline (Renamed_Object); pragma Inline (Renaming_Map); pragma Inline (Requires_Overriding); @@ -7165,6 +7286,7 @@ package Einfo is pragma Inline (Set_Extra_Constrained); pragma Inline (Set_Extra_Formal); pragma Inline (Set_Extra_Formals); + pragma Inline (Set_Can_Use_Internal_Rep); pragma Inline (Set_Finalization_Chain_Entity); pragma Inline (Set_First_Entity); pragma Inline (Set_First_Index); @@ -7216,6 +7338,7 @@ package Einfo is pragma Inline (Set_Has_Pragma_Controlled); pragma Inline (Set_Has_Pragma_Elaborate_Body); pragma Inline (Set_Has_Pragma_Inline); + pragma Inline (Set_Has_Pragma_Inline_Always); pragma Inline (Set_Has_Pragma_Pack); pragma Inline (Set_Has_Pragma_Preelab_Init); pragma Inline (Set_Has_Pragma_Pure); @@ -7240,6 +7363,7 @@ package Einfo is pragma Inline (Set_Has_Stream_Size_Clause); pragma Inline (Set_Has_Subprogram_Descriptor); pragma Inline (Set_Has_Task); + pragma Inline (Set_Has_Thunks); pragma Inline (Set_Has_Unchecked_Union); pragma Inline (Set_Has_Unknown_Discriminants); pragma Inline (Set_Has_Up_Level_Access); @@ -7247,6 +7371,7 @@ package Einfo is pragma Inline (Set_Has_Xref_Entry); pragma Inline (Set_Hiding_Loop_Variable); pragma Inline (Set_Homonym); + pragma Inline (Set_Implemented_By_Entry); pragma Inline (Set_In_Package_Body); pragma Inline (Set_In_Private_Part); pragma Inline (Set_In_Use); @@ -7255,7 +7380,6 @@ package Einfo is pragma Inline (Set_Is_AST_Entry); pragma Inline (Set_Is_Abstract_Subprogram); pragma Inline (Set_Is_Abstract_Type); - pragma Inline (Set_Is_Local_Anonymous_Access); pragma Inline (Set_Is_Access_Constant); pragma Inline (Set_Is_Ada_2005_Only); pragma Inline (Set_Is_Aliased); @@ -7306,10 +7430,12 @@ package Einfo is pragma Inline (Set_Is_Limited_Composite); pragma Inline (Set_Is_Limited_Interface); pragma Inline (Set_Is_Limited_Record); + pragma Inline (Set_Is_Local_Anonymous_Access); pragma Inline (Set_Is_Machine_Code_Subprogram); pragma Inline (Set_Is_Non_Static_Subtype); pragma Inline (Set_Is_Null_Init_Proc); pragma Inline (Set_Is_Obsolescent); + pragma Inline (Set_Is_Only_Out_Parameter); pragma Inline (Set_Is_Optional_Parameter); pragma Inline (Set_Is_Overriding_Operation); pragma Inline (Set_Is_Package_Body_Entity); @@ -7396,12 +7522,14 @@ package Einfo is pragma Inline (Set_Reachable); pragma Inline (Set_Referenced); pragma Inline (Set_Referenced_As_LHS); + pragma Inline (Set_Referenced_As_Out_Parameter); pragma Inline (Set_Referenced_Object); pragma Inline (Set_Register_Exception_Call); pragma Inline (Set_Related_Array_Object); pragma Inline (Set_Related_Instance); - pragma Inline (Set_Related_Interface); + pragma Inline (Set_Related_Type); pragma Inline (Set_Renamed_Entity); + pragma Inline (Set_Renamed_In_Spec); pragma Inline (Set_Renamed_Object); pragma Inline (Set_Renaming_Map); pragma Inline (Set_Requires_Overriding); -- cgit v1.1