]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Improve retrieval of nominal unconstrained type in extended return
authorPiotr Trojanek <trojanek@adacore.com>
Wed, 11 Jun 2025 14:41:00 +0000 (16:41 +0200)
committerMarc Poulhiès <dkm@gcc.gnu.org>
Thu, 3 Jul 2025 08:16:27 +0000 (10:16 +0200)
When extended return statement declares object using an explicit subtype
indication, then it is better to recover the original unconstrained type using
the explicit subtype indication. This appears to be necessary for subtypes with
predicates.

gcc/ada/ChangeLog:

* sem_ch3.adb (Check_Return_Subtype_Indication): Use type from
explicit subtype indication, when possible.

gcc/ada/sem_ch3.adb

index 98a8fa563919798cd4512f986fa1fc59b78636c2..f25941d72a8379a22816f155fbd78c59bbd58eee 100644 (file)
@@ -4204,7 +4204,11 @@ package body Sem_Ch3 is
          --  to recover the nominal unconstrained type.
 
          if Is_Constr_Subt_For_U_Nominal (Obj_Typ) then
-            Obj_Typ := Etype (Obj_Typ);
+            if Nkind (Object_Definition (Obj_Decl)) = N_Subtype_Indication then
+               Obj_Typ := Entity (Subtype_Mark (Object_Definition (Obj_Decl)));
+            else
+               Obj_Typ := Etype (Obj_Typ);
+            end if;
             pragma Assert (not Is_Constrained (Obj_Typ));
          end if;