From: Sebastian Poeplau <poep...@adacore.com> 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. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/einfo-utils.adb | 5 +++++ gcc/ada/einfo-utils.ads | 2 ++ 2 files changed, 7 insertions(+) diff --git a/gcc/ada/einfo-utils.adb b/gcc/ada/einfo-utils.adb index 88f4d4be7c8..46177acc7f8 100644 --- a/gcc/ada/einfo-utils.adb +++ b/gcc/ada/einfo-utils.adb @@ -201,6 +201,11 @@ package body Einfo.Utils is 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; diff --git a/gcc/ada/einfo-utils.ads b/gcc/ada/einfo-utils.ads index 742ca220080..5589276e22f 100644 --- a/gcc/ada/einfo-utils.ads +++ b/gcc/ada/einfo-utils.ads @@ -96,6 +96,8 @@ package Einfo.Utils is 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; -- 2.42.0