aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorSebastian Poeplau <poeplau@adacore.com>2023-11-07 13:28:25 +0100
committerMarc Poulhiès <poulhies@adacore.com>2023-11-28 10:35:47 +0100
commitd2f2b9e6f9bcc2398f7e9a5a42dfa55053bdb0bf (patch)
treee067076967a117d163fd494d02aacdc4a49e12b4 /gcc/ada
parent8ba9430bc41fcf60de936746ebfa27928bcdabc3 (diff)
downloadgcc-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.adb5
-rw-r--r--gcc/ada/einfo-utils.ads2
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;