From d2f2b9e6f9bcc2398f7e9a5a42dfa55053bdb0bf Mon Sep 17 00:00:00 2001 From: Sebastian Poeplau Date: Tue, 7 Nov 2023 13:28:25 +0100 Subject: ada: Add new predicate Is_Address_Compatible_Type 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. --- gcc/ada/einfo-utils.adb | 5 +++++ gcc/ada/einfo-utils.ads | 2 ++ 2 files changed, 7 insertions(+) (limited to 'gcc/ada') diff --git a/gcc/ada/einfo-utils.adb b/gcc/ada/einfo-utils.adb index 88f4d4b..46177ac 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 742ca22..5589276 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; -- cgit v1.1