From: Piotr Trojanek <troja...@adacore.com>

To reliably retrieve the nominal unconstrained type of object declared in
extended return statement we need to rely on the Original_Node.

gcc/ada/ChangeLog:

        * sem_ch3.adb (Check_Return_Subtype_Indication): Use Original_Node.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/sem_ch3.adb | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index f25941d72a8..5354d82bd7d 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -4204,11 +4204,7 @@ package body Sem_Ch3 is
          --  to recover the nominal unconstrained type.
 
          if Is_Constr_Subt_For_U_Nominal (Obj_Typ) then
-            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;
+            Obj_Typ := Entity (Original_Node (Object_Definition (Obj_Decl)));
             pragma Assert (not Is_Constrained (Obj_Typ));
          end if;
 
-- 
2.43.0

Reply via email to