aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2022-06-24 19:28:53 +0200
committerPierre-Marie de Rodat <derodat@adacore.com>2022-07-13 10:01:21 +0000
commit258814a99e74fcc1ab9cccb16b4d14c997d83690 (patch)
tree494f48ab3edd0d17a82afcc3d75c0e54d61a0585
parent36ed32caf8708a1fb646cdf8e92f2c1b86c68ae9 (diff)
downloadgcc-258814a99e74fcc1ab9cccb16b4d14c997d83690.zip
gcc-258814a99e74fcc1ab9cccb16b4d14c997d83690.tar.gz
gcc-258814a99e74fcc1ab9cccb16b4d14c997d83690.tar.bz2
[Ada] Also deal with private actual types in latest change
gcc/ada/ * gcc-interface/decl.cc (Gigi_Cloned_Subtype): Handle private case.
-rw-r--r--gcc/ada/gcc-interface/decl.cc13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/ada/gcc-interface/decl.cc b/gcc/ada/gcc-interface/decl.cc
index 8449c99..53c8461 100644
--- a/gcc/ada/gcc-interface/decl.cc
+++ b/gcc/ada/gcc-interface/decl.cc
@@ -5171,6 +5171,19 @@ Gigi_Cloned_Subtype (Entity_Id gnat_entity)
&& Present (Generic_Parent_Type (gnat_decl))
&& Is_Entity_Name (Subtype_Indication (gnat_decl)))
return Entity (Subtype_Indication (gnat_decl));
+
+ /* Likewise for the full view of such subtypes when they are private. */
+ if (Is_Itype (gnat_entity))
+ {
+ gnat_decl = Associated_Node_For_Itype (gnat_entity);
+ if (Present (gnat_decl)
+ && Nkind (gnat_decl) == N_Subtype_Declaration
+ && Is_Private_Type (Defining_Identifier (gnat_decl))
+ && Full_View (Defining_Identifier (gnat_decl)) == gnat_entity
+ && Present (Generic_Parent_Type (gnat_decl))
+ && Is_Entity_Name (Subtype_Indication (gnat_decl)))
+ return Entity (Subtype_Indication (gnat_decl));
+ }
break;
default: