diff options
author | Sebastian Poeplau <poeplau@adacore.com> | 2023-11-07 13:28:25 +0100 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2023-11-28 10:35:47 +0100 |
commit | d2f2b9e6f9bcc2398f7e9a5a42dfa55053bdb0bf (patch) | |
tree | e067076967a117d163fd494d02aacdc4a49e12b4 /gcc/ada | |
parent | 8ba9430bc41fcf60de936746ebfa27928bcdabc3 (diff) | |
download | gcc-d2f2b9e6f9bcc2398f7e9a5a42dfa55053bdb0bf.zip gcc-d2f2b9e6f9bcc2398f7e9a5a42dfa55053bdb0bf.tar.gz gcc-d2f2b9e6f9bcc2398f7e9a5a42dfa55053bdb0bf.tar.bz2 |
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.
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/einfo-utils.adb | 5 | ||||
-rw-r--r-- | gcc/ada/einfo-utils.ads | 2 |
2 files changed, 7 insertions, 0 deletions
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; |