When emitting code for architectures with tagged pointers, it is useful
to be able to recognize values representing addresses because they
require special handling. This commits adds the predicate
Is_Address_Compatible_Type, which differs from the node attribute
Is_Descendant_Of_Address by also taking Standard_Address into account.
gcc/ada/
* einfo-utils.ads, einfo-utils.adb (Is_Address_Compatible_Type):
New function.
and then Ekind (Directly_Designated_Type (Id)) = E_Subprogram_Type;
end Is_Access_Subprogram_Type;
+ function Is_Address_Compatible_Type (Id : E) return B is
+ begin
+ return Is_Descendant_Of_Address (Id) or else Id = Standard_Address;
+ end Is_Address_Compatible_Type;
+
function Is_Aggregate_Type (Id : E) return B is
begin
return Ekind (Id) in Aggregate_Kind;
function Is_Access_Type (Id : E) return B with Inline;
function Is_Access_Protected_Subprogram_Type (Id : E) return B with Inline;
function Is_Access_Subprogram_Type (Id : E) return B with Inline;
+ function Is_Address_Compatible_Type (Id : E) return B with Inline;
+ -- Check whether the type represents an address
function Is_Aggregate_Type (Id : E) return B with Inline;
function Is_Anonymous_Access_Type (Id : E) return B with Inline;
function Is_Array_Type (Id : E) return B with Inline;