aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/einfo.adb15
-rw-r--r--gcc/ada/einfo.ads292
-rw-r--r--gcc/ada/exp_attr.adb12
-rw-r--r--gcc/ada/exp_ch6.adb128
-rw-r--r--gcc/ada/sem_ch6.adb31
-rw-r--r--gcc/ada/sinfo.adb32
-rw-r--r--gcc/ada/sinfo.ads50
7 files changed, 382 insertions, 178 deletions
diff --git a/gcc/ada/einfo.adb b/gcc/ada/einfo.adb
index fad1780..013fab9 100644
--- a/gcc/ada/einfo.adb
+++ b/gcc/ada/einfo.adb
@@ -483,7 +483,8 @@ package body Einfo is
-- Used_As_Generic_Actual Flag222
-- Is_Descendent_Of_Address Flag223
-- Is_Raised Flag224
- -- (unused) Flag225
+ -- Is_Thunk Flag225
+ --
-- (unused) Flag226
-- (unused) Flag227
-- (unused) Flag228
@@ -1966,6 +1967,12 @@ package body Einfo is
return Flag200 (Id);
end Is_Task_Interface;
+ function Is_Thunk (Id : E) return B is
+ begin
+ pragma Assert (Is_Subprogram (Id));
+ return Flag225 (Id);
+ end Is_Thunk;
+
function Is_True_Constant (Id : E) return B is
begin
return Flag163 (Id);
@@ -4291,6 +4298,11 @@ package body Einfo is
Set_Flag200 (Id, V);
end Set_Is_Task_Interface;
+ procedure Set_Is_Thunk (Id : E; V : B := True) is
+ begin
+ Set_Flag225 (Id, V);
+ end Set_Is_Thunk;
+
procedure Set_Is_True_Constant (Id : E; V : B := True) is
begin
Set_Flag163 (Id, V);
@@ -7264,6 +7276,7 @@ package body Einfo is
W ("Is_Tag", Flag78 (Id));
W ("Is_Tagged_Type", Flag55 (Id));
W ("Is_Task_Interface", Flag200 (Id));
+ W ("Is_Thunk", Flag225 (Id));
W ("Is_True_Constant", Flag163 (Id));
W ("Is_Unchecked_Union", Flag117 (Id));
W ("Is_Unsigned_Type", Flag144 (Id));
diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads
index b95165b..0a6b35a 100644
--- a/gcc/ada/einfo.ads
+++ b/gcc/ada/einfo.ads
@@ -1383,9 +1383,9 @@ package Einfo is
-- or Is_Controlled is set for at least one component).
-- Has_Convention_Pragma (Flag119)
--- Present in an entity for which a Convention, Import, or Export
--- pragma has been given. Used to prevent more than one such pragma
--- appearing for a given entity (RM B.1(45)).
+-- Present in all entities. Set true for an entity for which a valid
+-- Convention, Import, or Export pragma has been given. Used to prevent
+-- more than one such pragma appearing for a given entity (RM B.1(45)).
-- Has_Delayed_Freeze (Flag18)
-- Present in all entities. Set to indicate that an explicit freeze
@@ -1446,10 +1446,10 @@ package Einfo is
-- flag and also the related flag Has_Qualified_Name.
-- Has_Gigi_Rep_Item (Flag82)
--- This flag is set if the rep item chain (referenced by First_Rep_Item
--- and linked through the Next_Rep_Item chain) contains a representation
--- item that needs to be specially processed by Gigi, i.e. one of the
--- following items:
+-- Present in all entities. Set if the rep item chain (referenced by
+-- First_Rep_Item and linked through the Next_Rep_Item chain) contains a
+-- representation item that needs to be specially processed by Gigi, i.e.
+-- one of the following items:
--
-- Machine_Attribute pragma
-- Linker_Alias pragma
@@ -1597,15 +1597,6 @@ package Einfo is
-- (but unlike the case with pragma Unreferenced, it is ok to reference
-- such an object and no warning is generated.
--- Known_To_Have_Preelab_Init (Flag207)
--- Present in all type and subtype entities. If set, then the type is
--- known to have preelaborable initialization. In the case of a partial
--- view of a private type, it is only possible for this to be set if a
--- pragma Preelaborable_Initialization is given for the type. For other
--- types, it is never set if the type does not have preelaborable
--- initialization, it may or may not be set if the type does have
--- preelaborable initialization.
-
-- Has_Primitive_Operations (Flag120) [base type only]
-- Present in all type entities. Set if at least one primitive operation
-- is defined for the type.
@@ -1697,10 +1688,10 @@ package Einfo is
-- storage size clause cannot be given to a derived type.
-- Has_Stream_Size_Clause (Flag184)
--- This flag is present in all entities. It is set for types which have a
--- Stream_Size clause attribute. Used to prevent multiple Stream_Size
--- clauses for a given entity, and also whether it is necessary to check
--- for a stream size clause.
+-- Present in all entities. It is set for types which have a Stream_Size
+-- clause attribute. Used to prevent multiple Stream_Size clauses for a
+-- given entity, and also whether it is necessary to check for a stream
+-- size clause.
-- Has_Subprogram_Descriptor (Flag93)
-- This flag is set on entities for which zero-cost exception subprogram
@@ -1725,17 +1716,17 @@ package Einfo is
-- the flag Has_Unchecked_Union set.
-- Has_Unknown_Discriminants (Flag72)
--- Present in all type entities. Types can have unknown discriminants
--- either from their declaration or through type derivation. The use
--- of this flag exactly meets the spec in RM 3.7(26). Note that all
--- class-wide types are considered to have unknown discriminants.
--- Note that both Has_Discriminants and Has_Unknown_Discriminants may
--- be true for a type. Class-wide types and their subtypes have
--- unknown discriminants and can have declared ones as well. Private
--- types declared with unknown discriminants may have a full view that
--- has explicit discriminants, and both flag will be set on the partial
--- view, to insure that discriminants are properly inherited in certain
--- contexts.
+-- Present in all entities. Set for types with unknown discriminants.
+-- Types can have unknown discriminants either from their declaration or
+-- through type derivation. The use of this flag exactly meets the spec
+-- in RM 3.7(26). Note that all class-wide types are considered to have
+-- unknown discriminants. Note that both Has_Discriminants and
+-- Has_Unknown_Discriminants may be true for a type. Class-wide types and
+-- their subtypes have unknown discriminants and can have declared ones
+-- as well. Private types declared with unknown discriminants may have a
+-- full view that has explicit discriminants, and both flag will be set
+-- on the partial view, to insure that discriminants are properly
+-- 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
@@ -1749,13 +1740,13 @@ package Einfo is
-- item chain of the first subtype in the usual manner.
-- Has_Xref_Entry (Flag182)
--- This flag is set if an entity has an entry in the Xref information
--- generated in ali files. This is true for all source entities in the
--- extended main source file. It is also true of entities in other
--- packages that are referenced directly or indirectly from the main
--- source file (indirect reference occurs when the main source file
--- references an entity with a type reference. See package Lib.Xref
--- for further details).
+-- Present in all entities. Set if an entity has an entry in the Xref
+-- information generated in ali files. This is true for all source
+-- entities in the extended main source file. It is also true of entities
+-- in other packages that are referenced directly or indirectly from the
+-- main source file (indirect reference occurs when the main source file
+-- references an entity with a type reference. See package Lib.Xref for
+-- further details).
-- Hiding_Loop_Variable (Node8)
-- Present in variables. Set only if a variable of a discrete type is
@@ -1780,9 +1771,10 @@ package Einfo is
-- returns the entity unchanged.
-- In_Package_Body (Flag48)
--- Set on the entity that denotes the package (the defining occurrence
--- of the package declaration) while analyzing and expanding the package
--- body. Reset on completion of analysis/expansion.
+-- Present in package entities. Set on the entity that denotes the
+-- package (the defining occurrence of the package declaration) while
+-- analyzing and expanding the package body. Reset on completion of
+-- analysis/expansion.
-- In_Private_Part (Flag45)
-- Present in all entities. Can be set only in package entities and
@@ -1854,7 +1846,7 @@ package Einfo is
-- Applies to all entities, true for access types and subtypes
-- Is_Ada_2005_Only (Flag185)
--- Applies to all entities, true if a valid pragma Ada_05 applies to the
+-- Present in all entities, true if a valid pragma Ada_05 applies to the
-- entity which specifically names the entity, indicating that the entity
-- is Ada 2005 only. Note that this flag is not set if the entity is part
-- of a unit compiled with the normal no-argument form of pragma Ada_05.
@@ -1914,7 +1906,7 @@ package Einfo is
-- inlining.
-- Is_Character_Type (Flag63)
--- Present in all entities, true for character types and subtypes,
+-- Present in all entities. Set for character types and subtypes,
-- i.e. enumeration types that have at least one character literal.
-- Is_Child_Unit (Flag73)
@@ -1936,13 +1928,13 @@ package Einfo is
-- parent, we do not consider them to be separate units for this flag).
-- Is_Completely_Hidden (Flag103)
--- A flag set on an E_Discriminant entity. This flag can be set only
--- for girder discriminants of untagged types. When set, the entity
--- is a girder discriminant of a derived untagged type which is not
--- directly visible in the derived type because the derived type or
--- one of its ancestors have renamed the discriminants in the root
--- type. Note that there are girder discriminants which are not
--- Completely_Hidden (e.g. the discriminants of a root type).
+-- Present in all entities. This flag can be set only for E_Discriminant
+-- entities. This flag can be set only for girder discriminants of
+-- untagged types. When set, the entity is a girder discriminant of a
+-- derived untagged type which is not directly visible in the derived
+-- type because the derived type or one of its ancestors have renamed the
+-- discriminants in the root type. Note: there are girder discriminants
+-- which are not Completely_Hidden (e.g. discriminants of a root type).
-- Is_Composite_Type (synthesized)
-- Applies to all entities, true for all composite types and
@@ -1974,9 +1966,10 @@ package Einfo is
-- that the constructed subtype itself will be constrained.
-- Is_Constr_Subt_For_UN_Aliased (Flag141)
--- This flag can only be set if Is_Constr_Subt_For_U_Nominal is set. It
--- indicates that in addition the object concerned is aliased. This flag
--- is used by Gigi to determine whether a template must be constructed.
+-- Present in all types and subtypes. This flag can be set only if
+-- Is_Constr_Subt_For_U_Nominal is also set. It indicates that in
+-- addition the object concerned is aliased. This flag is used by
+-- Gigi to determine whether a template must be constructed.
-- Is_Constructor (Flag76)
-- Present in function and procedure entities. Set if a pragma
@@ -1988,7 +1981,7 @@ package Einfo is
-- Ada.Finalization.Limited_Controlled.
-- Is_Controlling_Formal (Flag97)
--- Present in all Formal_Kind entity. Marks the controlling parameters
+-- Present in all Formal_Kind entities. Marks the controlling parameters
-- of dispatching operations.
-- Is_CPP_Class (Flag74)
@@ -2004,10 +1997,10 @@ package Einfo is
-- Always false if argument is not a type.
-- Is_Descendent_Of_Address (Flag223)
--- Applies to all types. Indicates that a type is an address type that
--- is visibly a numeric type. Used for semantic checks on VMS to remove
--- ambiguities in universal integer expressions that may have an address
--- interpretation
+-- Present in all type and subtype entities. Indicates that a type is an
+-- address type that is visibly a numeric type. Used for semantic checks
+-- on VMS to remove ambiguities in universal integer expressions that may
+-- have an address interpretation
-- Is_Discrete_Type (synthesized)
-- Applies to all entities, true for all discrete types and subtypes
@@ -2017,7 +2010,7 @@ package Einfo is
-- and all fixed-point types and subtypes.
-- Is_Discrim_SO_Function (Flag176)
--- Present in all entities, set only in E_Function entities that Layout
+-- Present in all entities. Set only in E_Function entities that Layout
-- creates to compute discriminant-dependent dynamic size/offset values.
-- Is_Dispatching_Operation (Flag6)
@@ -2081,7 +2074,7 @@ package Einfo is
-- Applies to all entities, true for generic IN and IN OUT parameters
-- Is_Formal_Subprogram (Flag111)
--- Defined on all entities, true for generic formal subprograms.
+-- Present in all entities. Set for generic formal subprograms.
-- Is_For_Access_Subtype (Flag118)
-- Present in E_Private_Subtype and E_Record_Subtype entities.
@@ -2090,12 +2083,13 @@ package Einfo is
-- because the type may not have been found or frozen yet.
-- Is_Frozen (Flag4)
--- Present in all type entities. Set if the type has been frozen.
+-- Present in all type and subtype entities. Set if type or subtype has
+-- been frozen.
-- Is_Generic_Actual_Type (Flag94)
--- Present in the subtype declaration that renames the generic formal
--- as a subtype of the actual. Guarantees that the subtype is not static
--- within the instance.
+-- Present in all type and subtype entities. Set in the subtype
+-- declaration that renames the generic formal as a subtype of the
+-- actual. Guarantees that the subtype is not static within the instance.
-- Is_Generic_Instance (Flag130)
-- Present in all entities. Set to indicate that the entity is an
@@ -2171,7 +2165,7 @@ package Einfo is
-- Applies to all entities, true for integer types and subtypes
-- Is_Interface (Flag186)
--- Present in record types and subtypes to indicate that the current
+-- Present in record types and subtypes. Set to indicate that the current
-- entity corresponds with an abstract interface. Because abstract
-- interfaces are conceptually a special kind of abstract tagged types
-- we represent them by means of tagged record types and subtypes
@@ -2182,10 +2176,11 @@ 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 temporaries
--- generated for the result of an inlined function call need not be
--- initialized, even when scalars are initialized or normalized, and
--- 2) to indicate object declarations generated by the expander that are
+-- 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.
@@ -2205,14 +2200,14 @@ package Einfo is
-- to intrinsic, which causes intrinsic code to be generated.
-- Is_Itype (Flag91)
--- Present in all entities, set for Itypes. If it is set, then the
--- declaration for the type does not appear explicitly in the tree.
--- Instead gigi will elaborate the type when it is first used.
--- Has_Delayed_Freeze can be set for Itypes, and the meaning is that
--- the first use (the one which causes the type to be defined) will
--- be the freeze node. Note that an important restriction on Itypes
--- is that the first use of such a type (the one that causes it to be
--- defined) must be in the same scope as the type.
+-- Present in all entities. Set to indicate that a type is an Itype,
+-- which means that the declaration for the type does not appear
+-- explicitly in the tree. Instead gigi will elaborate the type when it
+-- is first used. Has_Delayed_Freeze can be set for Itypes, and the
+-- meaning is that the first use (the one which causes the type to be
+-- defined) will be the freeze node. Note that an important restriction
+-- on Itypes is that the first use of such a type (the one that causes it
+-- to be defined) must be in the same scope as the type.
-- Is_Known_Non_Null (Flag37)
-- Present in all entities. Relevant (and can be set True) only for
@@ -2280,7 +2275,7 @@ package Einfo is
-- Thus this flag has no meaning to the back end.
-- Is_Limited_Composite (Flag106)
--- Present in all entities. True for composite types that have a
+-- Present in all entities. Set for composite types that have a
-- limited component. Used to enforce the rule that operations on
-- the composite type that depend on the full view of the component
-- do not become visible until the immediate scope of the composite
@@ -2312,20 +2307,20 @@ package Einfo is
-- Applies to all entities. True if entity is a modular integer type
-- Is_Non_Static_Subtype (Flag109)
--- This flag is present in all type and subtype entities. It is set in
--- some (but not all) cases in which a subtype is known to be non-static.
--- Before this flag was added, the computation of whether a subtype was
--- static was entirely synthesized, by looking at the bounds, and the
--- immediate subtype parent. However, this method does not work for some
--- Itypes that have no parent set (and the only way to find the immediate
+-- Present in all type and subtype entities. It is set in some (but not
+-- all) cases in which a subtype is known to be non-static. Before this
+-- flag was added, the computation of whether a subtype was static was
+-- entirely synthesized, by looking at the bounds, and the immediate
+-- subtype parent. However, this method does not work for some Itypes
+-- that have no parent set (and the only way to find the immediate
-- subtype parent is to go through the tree). For now, this flay is set
-- conservatively, i.e. if it is set then for sure the subtype is non-
-- static, but if it is not set, then the type may or may not be static.
--- Thus the test for a static subtype is that this flag is clear AND
--- that the bounds are static AND that the parent subtype (if available
--- to be tested) is static. Eventually we should make sure this flag
--- is always set right, at which point, these comments can be removed,
--- and the tests for static subtypes greatly simplified.
+-- Thus the test for a static subtype is that this flag is clear AND that
+-- the bounds are static AND that the parent subtype (if available to be
+-- tested) is static. Eventually we should make sure this flag is always
+-- set right, at which point, these comments can be removed, and the
+-- tests for static subtypes greatly simplified.
-- Is_Null_Init_Proc (Flag178)
-- Present in procedure entities. Set for generated init proc procedures
@@ -2436,9 +2431,9 @@ package Einfo is
-- indicators in bodies.
-- Is_Primitive_Wrapper (Flag195)
--- Present in E_Procedures. Primitive wrappers are Expander-generated
--- procedures that wrap entries of protected or task types implementing
--- a limited interface.
+-- Present in all entities. Set for procedure entries that are used as
+-- primitive wrappers. which are generated by the expander to wrap
+-- entries of protected or task types implementing a limited interface.
-- Is_Private_Composite (Flag107)
-- Present in composite types that have a private component. Used to
@@ -2505,12 +2500,12 @@ package Einfo is
-- includes class-wide types and subtypes (which are also records)
-- Is_Remote_Call_Interface (Flag62)
--- Present in all entities, set in E_Package and E_Generic_Package
+-- Present in all entities. Set in E_Package and E_Generic_Package
-- entities to which a pragma Remote_Call_Interace is applied, and
-- also in all entities within such packages.
-- Is_Remote_Types (Flag61)
--- Present in all entities, set in E_Package and E_Generic_Package
+-- Present in all entities. Set in E_Package and E_Generic_Package
-- entities to which a pragma Remote_Types is applied, and also in
-- all entities within such packages.
@@ -2530,14 +2525,14 @@ package Einfo is
-- calls. Note that build-in-place is allowed for other types, too.
-- Is_Return_Object (Flag209)
--- Applies to all object entities. True if the object is the return
+-- Present in all object entities. True if the object is the return
-- object of an extended_return_statement; False otherwise.
-- Is_Scalar_Type (synthesized)
-- Applies to all entities, true for scalar types and subtypes
-- Is_Shared_Passive (Flag60)
--- Present in all entities, set in E_Package and E_Generic_Package
+-- Present in all entities. Set in E_Package and E_Generic_Package
-- entities to which a pragma Shared_Passive is applied, and also in
-- all entities within such packages.
@@ -2573,33 +2568,43 @@ package Einfo is
-- interface.
-- Is_Tag (Flag78)
--- Present in E_Component. 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 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, true for an entity for a tagged type.
+-- Present in all entities. Set for an entity for a tagged type.
-- Is_Task_Interface (Flag200)
-- Present in types that are interfaces. True is interface is declared
--- as such, or if it is derived from task interfaces.
+-- as such, or if it is derived from task interfaces.
-- Is_Task_Record_Type (synthesized)
--- Applies to all entities, true if Is_Concurrent_Record_Type
+-- Applies to all entities. True if Is_Concurrent_Record_Type
-- Corresponding_Concurrent_Type is a task type.
-- Is_Task_Type (synthesized)
--- Applies to all entities, true for task types and subtypes
+-- Applies to all entities. True for task types and subtypes
+
+-- Is_Thunk (Flag225)
+-- True for subprograms that are thunks. Thunks are small subprograms
+-- built by the expander for tagged types that cover interface types;
+-- 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.
-- Is_True_Constant (Flag163)
--- This flag is set in constants and variables which have an initial
--- value specified but which are never assigned, partially or in the
--- whole. For variables, it means that the variable was initialized
--- but never modified, and hence can be treated as a constant by the
--- code generator. For a constant, it means that the constant was not
--- modified by generated code (e.g. to set a discriminant in an init
--- proc). Assignments by user or generated code will reset this flag.
+-- This flag applies to all entities for constants and variables. Set
+-- in constants and variables which have an initial value specified but
+-- which are never assigned, partially or in the whole. For variables, it
+-- means that the variable was initialized but never modified, and hence
+-- can be treated as a constant by the code generator. For a constant, it
+-- means that the constant was not modified by generated code (e.g. to
+-- set a discriminant in an init proc). Assignments by user or generated
+-- code will reset this flag.
--
-- Note: there is one situation in which the back end does not permit
-- this flag to be set, even if no assignments are generated. This is
@@ -2672,8 +2677,9 @@ package Einfo is
-- created as a wrapper for a subprogram instantiation.
-- Itype_Printed (Flag202)
--- Set in Itypes if the Itype has been printed by Sprint. This is used to
--- avoid printing an Itype more than once.
+-- Present in all type and subtype entities. Set in Itypes if the Itype
+-- has been printed by Sprint. This is used to avoid printing an Itype
+-- more than once.
-- Kill_Elaboration_Checks (Flag32)
-- Present in all entities. Set by the expander to kill elaboration
@@ -2696,6 +2702,15 @@ package Einfo is
-- that the result is permanent and cannot be undone by a subsequent
-- pragma Unsuppress.
+-- Known_To_Have_Preelab_Init (Flag207)
+-- Present in all type and subtype entities. If set, then the type is
+-- known to have preelaborable initialization. In the case of a partial
+-- view of a private type, it is only possible for this to be set if a
+-- pragma Preelaborable_Initialization is given for the type. For other
+-- types, it is never set if the type does not have preelaborable
+-- initialization, it may or may not be set if the type does have
+-- preelaborable initialization.
+
-- Last_Assignment (Node20)
-- Present in entities for variables. Set for a local variable to point
-- to the left side of an assignment statement assigning a value to the
@@ -2810,7 +2825,7 @@ package Einfo is
-- used to resolve various cases of entry calls.
--
-- Never_Set_In_Source (Flag115)
--- Present in all entities, but relevant only for variables and
+-- Present in all entities, but can be set only for variables and
-- parameters. This flag is set if the object is never assigned a value
-- in user source code, either by assignment or by being used as an out
-- or in out parameter. Note that this flag is not reset from using an
@@ -3147,16 +3162,17 @@ package Einfo is
-- which a goto to that label is legal.
-- Referenced (Flag156)
--- Present in all entities, set if the entity is referenced, except
+-- 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.
-- Referenced_As_LHS (Flag36):
--- This flag is set instead of Referenced if a simple variable that is
--- not a renaming appears as the left side of an assignment. The reason
--- we distinguish this kind of reference is that we have a separate
--- warning for variables that are only assigned and never read.
+-- Present in all entities. This flag is set instead of Referenced if a
+-- simple variable that is not a renaming appears as the left side of an
+-- assignment. The reason we distinguish this kind of reference is that
+-- we have a separate warning for variables that are only assigned and
+-- never read.
-- Referenced_Object (Node10)
-- Present in all type entities. Set non-Empty only for type entities
@@ -3426,7 +3442,7 @@ package Einfo is
-- or a copy of the low bound of the index base type if not.
-- Suppress_Elaboration_Warnings (Flag148)
--- Present in all entities, relevant only for subprogram entities and
+-- Present in all entities, can be set only for subprogram entities and
-- for variables. If this flag is set then Sem_Elab will not generate
-- elaboration warnings for the subprogram or variable. Suppression of
-- such warnings is automatic for subprograms for which elaboration
@@ -3537,9 +3553,9 @@ package Einfo is
-- must be released on exit unless Sec_Stack_Needed_For_Return is set.
-- Vax_Float (Flag151) [base type only]
--- Present in all type entities. Set only on the base type of float
--- types with Vax format. The particular format is determined by the
--- Digits_Value value which is 6,9,15 for F_Float, D_Float, G_Float.
+-- Present in all type and subtype entities. Set only on the base type of
+-- float types with Vax format. The particular format is determined by
+-- the Digits_Value value which is 6,9,15 for F_Float, D_Float, G_Float.
-- Warnings_Off (Flag96)
-- Present in all entities. Set if a pragma Warnings (Off, entity-name)
@@ -4364,20 +4380,25 @@ package Einfo is
-- Has_Persistent_BSS (Flag188)
-- Has_Pragma_Elaborate_Body (Flag150)
-- Has_Pragma_Inline (Flag157)
+ -- Has_Pragma_Pack (Flag121) (base type only)
-- Has_Pragma_Pure (Flag203)
-- Has_Pragma_Pure_Function (Flag179)
-- Has_Pragma_Unreferenced (Flag180)
-- Has_Private_Declaration (Flag155)
-- Has_Qualified_Name (Flag161)
+ -- Has_Stream_Size_Clause (Flag184)
-- Has_Unknown_Discriminants (Flag72)
-- Has_Xref_Entry (Flag182)
+ -- In_Private_Part (Flag45)
-- Is_Ada_2005_Only (Flag185)
-- Is_Bit_Packed_Array (Flag122) (base type only)
+ -- Is_Character_Type (Flag63)
-- Is_Child_Unit (Flag73)
-- Is_Compilation_Unit (Flag149)
-- Is_Completely_Hidden (Flag103)
-- Is_Discrim_SO_Function (Flag176)
-- Is_Dispatching_Operation (Flag6)
+ -- Is_Entry_Formal (Flag52)
-- Is_Exported (Flag99)
-- Is_First_Subtype (Flag70)
-- Is_Formal_Subprogram (Flag111)
@@ -4404,8 +4425,10 @@ package Einfo is
-- Is_Pure (Flag44)
-- Is_Remote_Call_Interface (Flag62)
-- Is_Remote_Types (Flag61)
+ -- Is_Renaming_Of_Object (Flag112)
-- Is_Shared_Passive (Flag60)
-- Is_Statically_Allocated (Flag28)
+ -- Is_Tagged_Type (Flag55)
-- Is_Unchecked_Union (Flag117)
-- Is_Visible_Formal (Flag206)
-- Is_VMS_Exception (Flag133)
@@ -4415,6 +4438,7 @@ package Einfo is
-- Low_Bound_Known (Flag205)
-- Materialize_Entity (Flag168)
-- Needs_Debug_Info (Flag147)
+ -- Never_Set_In_Source (Flag115)
-- No_Return (Flag113)
-- Referenced (Flag156)
-- Referenced_As_LHS (Flag36)
@@ -4422,6 +4446,7 @@ package Einfo is
-- Suppress_Style_Checks (Flag165)
-- Suppress_Value_Tracking_On_Call (Flag217)
-- Used_As_Generic_Actual (Flag222)
+ -- Warnings_Off (Flag96)
-- Was_Hidden (Flag196)
-- Declaration_Node (synth)
@@ -4467,7 +4492,6 @@ package Einfo is
-- Has_Specified_Stream_Output (Flag191)
-- Has_Specified_Stream_Read (Flag192)
-- Has_Specified_Stream_Write (Flag193)
- -- Has_Stream_Size_Clause (Flag184)
-- Has_Task (Flag30) (base type only)
-- Has_Unchecked_Union (Flag123) (base type only)
-- Has_Volatile_Components (Flag87) (base type only)
@@ -4488,8 +4512,6 @@ package Einfo is
-- Is_Non_Static_Subtype (Flag109)
-- Is_Packed (Flag51) (base type only)
-- Is_Private_Composite (Flag107)
- -- Is_Renaming_Of_Object (Flag112)
- -- Is_Tagged_Type (Flag55)
-- Is_Unsigned_Type (Flag144)
-- Is_Volatile (Flag16)
-- Itype_Printed (Flag202) (itypes only)
@@ -4573,12 +4595,11 @@ package Einfo is
-- Packed_Array_Type (Node23)
-- Component_Alignment (special) (base type only)
-- Has_Component_Size_Clause (Flag68) (base type only)
- -- Has_Pragma_Pack (Flag121) (base type only)
-- Is_Aliased (Flag15)
-- Is_Constrained (Flag12)
-- Next_Index (synth)
-- Number_Dimensions (synth)
- -- (plus type attributes)
+ -- (plus type attributes)
-- E_Block
-- Block_Node (Node11)
@@ -4655,12 +4676,10 @@ package Einfo is
-- Has_Size_Clause (Flag29)
-- Has_Up_Level_Access (Flag215)
-- Has_Volatile_Components (Flag87)
- -- In_Private_Part (Flag45)
-- Is_Atomic (Flag85)
-- Is_Eliminated (Flag124)
-- Is_True_Constant (Flag163)
-- Is_Volatile (Flag16)
- -- Never_Set_In_Source (Flag115)
-- Treat_As_Volatile (Flag41)
-- Is_Return_Object (Flag209)
-- Address_Clause (synth)
@@ -4826,6 +4845,7 @@ package Einfo is
-- Is_Primitive (Flag218)
-- Is_Private_Descendant (Flag53)
-- Is_Pure (Flag44)
+ -- Is_Thunk (Flag225)
-- Is_Visible_Child_Unit (Flag116)
-- Needs_No_Actuals (Flag22)
-- Requires_Overriding (Flag213) (non-generic case only)
@@ -4856,7 +4876,6 @@ package Einfo is
-- Default_Value (Node20)
-- Protected_Formal (Node22)
-- Is_Controlling_Formal (Flag97)
- -- Is_Entry_Formal (Flag52)
-- Is_Return_Object (Flag209)
-- Parameter_Mode (synth)
@@ -4891,10 +4910,8 @@ package Einfo is
-- Extra_Constrained (Node23)
-- Has_Initial_Value (Flag219)
-- Is_Controlling_Formal (Flag97)
- -- Is_Entry_Formal (Flag52)
-- Is_Optional_Parameter (Flag134)
-- Low_Bound_Known (Flag205)
- -- Never_Set_In_Source (Flag115)
-- Is_Return_Object (Flag209)
-- Parameter_Mode (synth)
@@ -4947,6 +4964,7 @@ package Einfo is
-- Is_Intrinsic_Subprogram (Flag64)
-- Is_Overriding_Operation (Flag39)
-- Is_Primitive (Flag218)
+ -- Is_Thunk (Flag225)
-- Default_Expressions_Processed (Flag108)
-- E_Ordinary_Fixed_Point_Type
@@ -4994,7 +5012,6 @@ package Einfo is
-- Has_RACW (Flag214) (non-generic case only)
-- Has_Subprogram_Descriptor (Flag93)
-- In_Package_Body (Flag48)
- -- In_Private_Part (Flag45)
-- In_Use (Flag8)
-- Is_Instantiated (Flag126)
-- Is_Private_Descendant (Flag53)
@@ -5085,6 +5102,7 @@ package Einfo is
-- Is_Primitive_Wrapper (Flag195) (non-generic case only)
-- Is_Private_Descendant (Flag53)
-- Is_Pure (Flag44)
+ -- Is_Thunk (Flag225)
-- Is_Valued_Procedure (Flag127)
-- Is_Visible_Child_Unit (Flag116)
-- Needs_No_Actuals (Flag22)
@@ -5275,13 +5293,11 @@ package Einfo is
-- Has_Initial_Value (Flag219)
-- Has_Size_Clause (Flag29)
-- Has_Volatile_Components (Flag87)
- -- In_Private_Part (Flag45)
-- Is_Atomic (Flag85)
-- Is_Eliminated (Flag124)
-- Is_Shared_Passive (Flag60)
-- Is_True_Constant (Flag163)
-- Is_Volatile (Flag16)
- -- Never_Set_In_Source (Flag115)
-- Treat_As_Volatile (Flag41)
-- Is_Return_Object (Flag209)
-- Has_Up_Level_Access (Flag215)
@@ -5926,6 +5942,7 @@ 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;
-------------------------------------
@@ -6306,6 +6323,7 @@ package Einfo is
procedure Set_Is_Tag (Id : E; V : B := True);
procedure Set_Is_Tagged_Type (Id : E; V : B := True);
procedure Set_Is_Task_Interface (Id : E; V : B := True);
+ procedure Set_Is_Thunk (Id : E; V : B := True);
procedure Set_Is_True_Constant (Id : E; V : B := True);
procedure Set_Is_Unchecked_Union (Id : E; V : B := True);
procedure Set_Is_Unsigned_Type (Id : E; V : B := True);
@@ -6940,6 +6958,7 @@ package Einfo is
pragma Inline (Is_Task_Interface);
pragma Inline (Is_True_Constant);
pragma Inline (Is_Task_Type);
+ pragma Inline (Is_Thunk);
pragma Inline (Is_Type);
pragma Inline (Is_Unchecked_Union);
pragma Inline (Is_Unsigned_Type);
@@ -7305,6 +7324,7 @@ package Einfo is
pragma Inline (Set_Is_Tag);
pragma Inline (Set_Is_Tagged_Type);
pragma Inline (Set_Is_Task_Interface);
+ pragma Inline (Set_Is_Thunk);
pragma Inline (Set_Is_True_Constant);
pragma Inline (Set_Is_Unchecked_Union);
pragma Inline (Set_Is_Unsigned_Type);
diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb
index 272d8e2..8564bea 100644
--- a/gcc/ada/exp_attr.adb
+++ b/gcc/ada/exp_attr.adb
@@ -637,12 +637,10 @@ package body Exp_Attr is
pragma Assert (Present (Formal));
Rewrite (N,
- Unchecked_Convert_To
- (Typ, New_Occurrence_Of (Formal, Loc)));
+ Unchecked_Convert_To (Typ,
+ New_Occurrence_Of (Formal, Loc)));
Set_Etype (N, Typ);
- return;
-
-- The expression must appear in a default expression, (which
-- in the initialization procedure is the right-hand side of an
-- assignment), and not in a discriminant constraint.
@@ -667,8 +665,6 @@ package body Exp_Attr is
Analyze_And_Resolve (N, Typ);
end if;
-
- return;
end if;
end;
@@ -702,8 +698,8 @@ package body Exp_Attr is
-- Note: Limit the expansion of an attribute applied to a
-- dereference of an access parameter so that it's only done
-- for 'Access. This fixes a problem with 'Unrestricted_Access
- -- that leads to errors in the case where the attribute
- -- type is access-to-variable and the access parameter is
+ -- that leads to errors in the case where the attribute type
+ -- is access-to-variable and the access parameter is
-- access-to-constant. The conversion is only done to get
-- accessibility checks, so it makes sense to limit it to
-- 'Access (and consistent with existing comment).
diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb
index 161c863..7296b8a 100644
--- a/gcc/ada/exp_ch6.adb
+++ b/gcc/ada/exp_ch6.adb
@@ -1679,25 +1679,8 @@ package body Exp_Ch6 is
procedure Expand_Call (N : Node_Id) is
Loc : constant Source_Ptr := Sloc (N);
- Remote : constant Boolean := Is_Remote_Call (N);
- Subp : Entity_Id;
- Orig_Subp : Entity_Id := Empty;
- Parent_Subp : Entity_Id;
- Parent_Formal : Entity_Id;
- Actual : Node_Id;
- Formal : Entity_Id;
- Prev : Node_Id := Empty;
-
- Prev_Orig : Node_Id;
- -- Original node for an actual, which may have been rewritten. If the
- -- actual is a function call that has been transformed from a selected
- -- component, the original node is unanalyzed. Otherwise, it carries
- -- semantic information used to generate additional actuals.
-
- Scop : Entity_Id;
Extra_Actuals : List_Id := No_List;
-
- CW_Interface_Formals_Present : Boolean := False;
+ Prev : Node_Id := Empty;
procedure Add_Actual_Parameter (Insert_Param : Node_Id);
-- Adds one entry to the end of the actual parameter list. Used for
@@ -1878,6 +1861,26 @@ package body Exp_Ch6 is
raise Program_Error;
end Inherited_From_Formal;
+ -- Local variables
+
+ Remote : constant Boolean := Is_Remote_Call (N);
+ Actual : Node_Id;
+ Formal : Entity_Id;
+ Orig_Subp : Entity_Id := Empty;
+ Param_Count : Natural := 0;
+ Parent_Formal : Entity_Id;
+ Parent_Subp : Entity_Id;
+ Scop : Entity_Id;
+ Subp : Entity_Id;
+
+ Prev_Orig : Node_Id;
+ -- Original node for an actual, which may have been rewritten. If the
+ -- actual is a function call that has been transformed from a selected
+ -- component, the original node is unanalyzed. Otherwise, it carries
+ -- semantic information used to generate additional actuals.
+
+ CW_Interface_Formals_Present : Boolean := False;
+
-- Start of processing for Expand_Call
begin
@@ -1998,8 +2001,9 @@ package body Exp_Ch6 is
-- We also generate any required range checks for actuals as we go
-- through the loop, since this is a convenient place to do this.
- Formal := First_Formal (Subp);
- Actual := First_Actual (N);
+ Formal := First_Formal (Subp);
+ Actual := First_Actual (N);
+ Param_Count := 1;
while Present (Formal) loop
-- Generate range check if required (not activated yet ???)
@@ -2136,7 +2140,35 @@ package body Exp_Ch6 is
Prev_Orig := Prev;
end if;
- if Is_Entity_Name (Prev_Orig) then
+ -- Ada 2005 (AI-251): Thunks must propagate the extra actuals
+ -- of accessibility levels.
+
+ if Ekind (Current_Scope) in Subprogram_Kind
+ and then Is_Thunk (Current_Scope)
+ then
+ declare
+ Parm_Ent : Entity_Id;
+
+ begin
+ if Is_Controlling_Actual (Actual) then
+
+ -- Find the corresponding actual of the thunk
+
+ Parm_Ent := First_Entity (Current_Scope);
+ for J in 2 .. Param_Count loop
+ Next_Entity (Parm_Ent);
+ end loop;
+
+ else pragma Assert (Is_Entity_Name (Actual));
+ Parm_Ent := Entity (Actual);
+ end if;
+
+ Add_Extra_Actual
+ (New_Occurrence_Of (Extra_Accessibility (Parm_Ent), Loc),
+ Extra_Accessibility (Formal));
+ end;
+
+ elsif Is_Entity_Name (Prev_Orig) then
-- When passing an access parameter, or a renaming of an access
-- parameter, as the actual to another access parameter we need
@@ -2191,11 +2223,12 @@ package body Exp_Ch6 is
Extra_Accessibility (Formal));
end if;
+ -- All cases other than thunks
+
else
case Nkind (Prev_Orig) is
when N_Attribute_Reference =>
-
case Get_Attribute_Id (Attribute_Name (Prev_Orig)) is
-- For X'Access, pass on the level of the prefix X
@@ -2411,6 +2444,7 @@ package body Exp_Ch6 is
<<Skip_Extra_Actual_Generation>>
+ Param_Count := Param_Count + 1;
Next_Actual (Actual);
Next_Formal (Formal);
end loop;
@@ -5038,6 +5072,18 @@ package body Exp_Ch6 is
Func_Call := Expression (Func_Call);
end if;
+ -- If the call has already been processed to add build-in-place actuals
+ -- then return. This should not normally occur in an allocator context,
+ -- but we add the protection as a defensive measure.
+
+ if Is_Expanded_Build_In_Place_Call (Func_Call) then
+ return;
+ end if;
+
+ -- Mark the call as processed as a build-in-place call
+
+ Set_Is_Expanded_Build_In_Place_Call (Func_Call);
+
Loc := Sloc (Function_Call);
if Is_Entity_Name (Name (Func_Call)) then
@@ -5179,6 +5225,20 @@ package body Exp_Ch6 is
Func_Call := Expression (Func_Call);
end if;
+ -- If the call has already been processed to add build-in-place actuals
+ -- then return. One place this can occur is for calls to build-in-place
+ -- functions that occur within a call to a protected operation, where
+ -- due to rewriting and expansion of the protected call there can be
+ -- more than one call to Expand_Actuals for the same set of actuals.
+
+ if Is_Expanded_Build_In_Place_Call (Func_Call) then
+ return;
+ end if;
+
+ -- Mark the call as processed as a build-in-place call
+
+ Set_Is_Expanded_Build_In_Place_Call (Func_Call);
+
Loc := Sloc (Function_Call);
if Is_Entity_Name (Name (Func_Call)) then
@@ -5293,6 +5353,18 @@ package body Exp_Ch6 is
Func_Call := Expression (Func_Call);
end if;
+ -- If the call has already been processed to add build-in-place actuals
+ -- then return. This should not normally occur in an assignment context,
+ -- but we add the protection as a defensive measure.
+
+ if Is_Expanded_Build_In_Place_Call (Func_Call) then
+ return;
+ end if;
+
+ -- Mark the call as processed as a build-in-place call
+
+ Set_Is_Expanded_Build_In_Place_Call (Func_Call);
+
Loc := Sloc (Function_Call);
if Is_Entity_Name (Name (Func_Call)) then
@@ -5403,6 +5475,18 @@ package body Exp_Ch6 is
Func_Call := Expression (Func_Call);
end if;
+ -- If the call has already been processed to add build-in-place actuals
+ -- then return. This should not normally occur in an object declaration,
+ -- but we add the protection as a defensive measure.
+
+ if Is_Expanded_Build_In_Place_Call (Func_Call) then
+ return;
+ end if;
+
+ -- Mark the call as processed as a build-in-place call
+
+ Set_Is_Expanded_Build_In_Place_Call (Func_Call);
+
Loc := Sloc (Function_Call);
if Is_Entity_Name (Name (Func_Call)) then
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 8d23318..2cb621b 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -1961,6 +1961,37 @@ package body Sem_Ch6 is
Check_Anonymous_Return;
+ -- Set the Protected_Formal field of each extra formal of the protected
+ -- subprogram to reference the corresponding extra formal of the
+ -- subprogram that implements it. For regular formals this occurs when
+ -- the protected subprogram's declaration is expanded, but the extra
+ -- formals don't get created until the subprogram is frozen. We need to
+ -- do this before analyzing the protected subprogram's body so that any
+ -- references to the original subprogram's extra formals will be changed
+ -- refer to the implementing subprogram's formals (see Expand_Formal).
+
+ if Present (Spec_Id)
+ and then Is_Protected_Type (Scope (Spec_Id))
+ and then Present (Protected_Body_Subprogram (Spec_Id))
+ then
+ declare
+ Impl_Subp : constant Entity_Id :=
+ Protected_Body_Subprogram (Spec_Id);
+ Prot_Ext_Formal : Entity_Id := Extra_Formals (Spec_Id);
+ Impl_Ext_Formal : Entity_Id := Extra_Formals (Impl_Subp);
+
+ begin
+ while Present (Prot_Ext_Formal) loop
+ pragma Assert (Present (Impl_Ext_Formal));
+
+ Set_Protected_Formal (Prot_Ext_Formal, Impl_Ext_Formal);
+
+ Next_Formal_With_Extras (Prot_Ext_Formal);
+ Next_Formal_With_Extras (Impl_Ext_Formal);
+ end loop;
+ end;
+ end if;
+
-- Now we can go on to analyze the body
HSS := Handled_Statement_Sequence (N);
diff --git a/gcc/ada/sinfo.adb b/gcc/ada/sinfo.adb
index f664f92..b7bf39e 100644
--- a/gcc/ada/sinfo.adb
+++ b/gcc/ada/sinfo.adb
@@ -185,6 +185,14 @@ package body Sinfo is
return Node4 (N);
end Actual_Designated_Subtype;
+ function Address_Warning_Posted
+ (N : Node_Id) return Boolean is
+ begin
+ pragma Assert (False
+ or else NT (N).Nkind = N_Attribute_Definition_Clause);
+ return Flag18 (N);
+ end Address_Warning_Posted;
+
function Aggregate_Bounds
(N : Node_Id) return Node_Id is
begin
@@ -1590,6 +1598,14 @@ package body Sinfo is
return Flag8 (N);
end Is_Entry_Barrier_Function;
+ function Is_Expanded_Build_In_Place_Call
+ (N : Node_Id) return Boolean is
+ begin
+ pragma Assert (False
+ or else NT (N).Nkind = N_Function_Call);
+ return Flag11 (N);
+ end Is_Expanded_Build_In_Place_Call;
+
function Is_Folded_In_Parser
(N : Node_Id) return Boolean is
begin
@@ -2901,6 +2917,14 @@ package body Sinfo is
Set_Node4 (N, Val);
end Set_Actual_Designated_Subtype;
+ procedure Set_Address_Warning_Posted
+ (N : Node_Id; Val : Boolean := True) is
+ begin
+ pragma Assert (False
+ or else NT (N).Nkind = N_Attribute_Definition_Clause);
+ Set_Flag18 (N, Val);
+ end Set_Address_Warning_Posted;
+
procedure Set_Aggregate_Bounds
(N : Node_Id; Val : Node_Id) is
begin
@@ -4297,6 +4321,14 @@ package body Sinfo is
Set_Flag8 (N, Val);
end Set_Is_Entry_Barrier_Function;
+ procedure Set_Is_Expanded_Build_In_Place_Call
+ (N : Node_Id; Val : Boolean := True) is
+ begin
+ pragma Assert (False
+ or else NT (N).Nkind = N_Function_Call);
+ Set_Flag11 (N, Val);
+ end Set_Is_Expanded_Build_In_Place_Call;
+
procedure Set_Is_Folded_In_Parser
(N : Node_Id; Val : Boolean := True) is
begin
diff --git a/gcc/ada/sinfo.ads b/gcc/ada/sinfo.ads
index 749dd80..8528156 100644
--- a/gcc/ada/sinfo.ads
+++ b/gcc/ada/sinfo.ads
@@ -475,17 +475,6 @@ package Sinfo is
-- refers to a node or is posted on its source location, and has the
-- effect of inhibiting further messages involving this same node.
- -- Local_Raise_Statements (Elist1)
- -- This field is present in exception handler nodes. It is set to
- -- No_Elist in the normal case. If there is at least one raise statement
- -- which can potentially be handled as a local raise, then this field
- -- points to a list of raise nodes, which are calls to a routine to raise
- -- an exception. These are raise nodes which can be optimized into gotos
- -- if the handler turns out to meet the conditions which permit this
- -- transformation. Note that this does NOT include instances of the
- -- N_Raise_xxx_Error nodes since the transformation of these nodes is
- -- handled by the back end (using the N_Push/N_Pop mechanism).
-
-- Has_Dynamic_Length_Check (Flag10-Sem)
-- This flag is present on all nodes. It is set to indicate that one of
-- the routines in unit Checks has generated a length check action which
@@ -573,6 +562,11 @@ package Sinfo is
-- the designated type is an unconstrained packed array and the
-- dereference is the prefix of a 'Size attribute reference.
+ -- Address_Warning_Posted (Flag18-Sem)
+ -- Present in N_Attribute_Definition nodes. Set to indicate that we have
+ -- posted a warning for the address clause regarding size or alignment
+ -- issues. Used to inhibit multiple redundant messages.
+
-- Aggregate_Bounds (Node3-Sem)
-- Present in array N_Aggregate nodes. If the aggregate contains
-- component associations this field points to an N_Range node whose
@@ -1167,6 +1161,11 @@ package Sinfo is
-- of an entry barrier from a protected entry body. It is used for the
-- circuitry checking for incorrect use of Current_Task.
+ -- Is_Expanded_Build_In_Place_Call (Flag11-Sem)
+ -- This flag is set in an N_Function_Call node to indicate that the extra
+ -- actuals to support a build-in-place style of call have been added to
+ -- the call.
+
-- Is_In_Discriminant_Check (Flag11-Sem)
-- This flag is present in a selected component, and is used to indicate
-- that the reference occurs within a discriminant check. The
@@ -1282,6 +1281,17 @@ package Sinfo is
-- described above). Instead for a child unit, implicit with's are
-- generated for all parents.
+ -- Local_Raise_Statements (Elist1)
+ -- This field is present in exception handler nodes. It is set to
+ -- No_Elist in the normal case. If there is at least one raise statement
+ -- which can potentially be handled as a local raise, then this field
+ -- points to a list of raise nodes, which are calls to a routine to raise
+ -- an exception. These are raise nodes which can be optimized into gotos
+ -- if the handler turns out to meet the conditions which permit this
+ -- transformation. Note that this does NOT include instances of the
+ -- N_Raise_xxx_Error nodes since the transformation of these nodes is
+ -- handled by the back end (using the N_Push/N_Pop mechanism).
+
-- Loop_Actions (List2-Sem)
-- A list present in Component_Association nodes in array aggregates.
-- Used to collect actions that must be executed within the loop because
@@ -4295,6 +4305,7 @@ package Sinfo is
-- actual parameter part)
-- First_Named_Actual (Node4-Sem)
-- Controlling_Argument (Node1-Sem) (set to Empty if not dispatching)
+ -- Is_Expanded_Build_In_Place_Call (Flag11-Sem)
-- Do_Tag_Check (Flag13-Sem)
-- No_Elaboration_Check (Flag14-Sem)
-- Parameter_List_Truncated (Flag17-Sem)
@@ -6114,6 +6125,7 @@ package Sinfo is
-- Next_Rep_Item (Node5-Sem)
-- From_At_Mod (Flag4-Sem)
-- Check_Address_Alignment (Flag11-Sem)
+ -- Address_Warning_Posted (Flag18-Sem)
---------------------------------------------
-- 13.4 Enumeration representation clause --
@@ -7426,6 +7438,9 @@ package Sinfo is
function Actual_Designated_Subtype
(N : Node_Id) return Node_Id; -- Node4
+ function Address_Warning_Posted
+ (N : Node_Id) return Boolean; -- Flag18
+
function Aggregate_Bounds
(N : Node_Id) return Node_Id; -- Node3
@@ -7873,6 +7888,9 @@ package Sinfo is
function Is_Entry_Barrier_Function
(N : Node_Id) return Boolean; -- Flag8
+ function Is_Expanded_Build_In_Place_Call
+ (N : Node_Id) return Boolean; -- Flag11
+
function Is_Folded_In_Parser
(N : Node_Id) return Boolean; -- Flag4
@@ -8287,6 +8305,9 @@ package Sinfo is
procedure Set_Actual_Designated_Subtype
(N : Node_Id; Val : Node_Id); -- Node4
+ procedure Set_Address_Warning_Posted
+ (N : Node_Id; Val : Boolean := True); -- Flag18
+
procedure Set_Aggregate_Bounds
(N : Node_Id; Val : Node_Id); -- Node3
@@ -8731,6 +8752,9 @@ package Sinfo is
procedure Set_Is_Entry_Barrier_Function
(N : Node_Id; Val : Boolean := True); -- Flag8
+ procedure Set_Is_Expanded_Build_In_Place_Call
+ (N : Node_Id; Val : Boolean := True); -- Flag11
+
procedure Set_Is_Folded_In_Parser
(N : Node_Id; Val : Boolean := True); -- Flag4
@@ -10677,6 +10701,7 @@ package Sinfo is
pragma Inline (Activation_Chain_Entity);
pragma Inline (Acts_As_Spec);
pragma Inline (Actual_Designated_Subtype);
+ pragma Inline (Address_Warning_Posted);
pragma Inline (Aggregate_Bounds);
pragma Inline (Aliased_Present);
pragma Inline (All_Others);
@@ -10826,6 +10851,7 @@ package Sinfo is
pragma Inline (Is_Controlling_Actual);
pragma Inline (Is_Dynamic_Coextension);
pragma Inline (Is_Entry_Barrier_Function);
+ pragma Inline (Is_Expanded_Build_In_Place_Call);
pragma Inline (Is_Folded_In_Parser);
pragma Inline (Is_In_Discriminant_Check);
pragma Inline (Is_Machine_Number);
@@ -10961,6 +10987,7 @@ package Sinfo is
pragma Inline (Set_Activation_Chain_Entity);
pragma Inline (Set_Acts_As_Spec);
pragma Inline (Set_Actual_Designated_Subtype);
+ pragma Inline (Set_Address_Warning_Posted);
pragma Inline (Set_Aggregate_Bounds);
pragma Inline (Set_Aliased_Present);
pragma Inline (Set_All_Others);
@@ -11108,6 +11135,7 @@ package Sinfo is
pragma Inline (Set_Is_Controlling_Actual);
pragma Inline (Set_Is_Dynamic_Coextension);
pragma Inline (Set_Is_Entry_Barrier_Function);
+ pragma Inline (Set_Is_Expanded_Build_In_Place_Call);
pragma Inline (Set_Is_Folded_In_Parser);
pragma Inline (Set_Is_In_Discriminant_Check);
pragma Inline (Set_Is_Machine_Number);