aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/exp_util.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/exp_util.adb')
-rw-r--r--gcc/ada/exp_util.adb16
1 files changed, 11 insertions, 5 deletions
diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
index 4f98779..2172ce7 100644
--- a/gcc/ada/exp_util.adb
+++ b/gcc/ada/exp_util.adb
@@ -6190,11 +6190,17 @@ package body Exp_Util is
Utyp := Corresponding_Record_Type (Root_Type (Btyp));
else
- Utyp := Underlying_Type (Root_Type (Btyp));
-
- if Is_Protected_Type (Utyp) then
- Utyp := Corresponding_Record_Type (Utyp);
- end if;
+ declare
+ Root : constant Entity_Id := Underlying_Type (Root_Type (Btyp));
+ begin
+ if Is_Protected_Type (Root) then
+ Utyp := Corresponding_Record_Type (Root);
+ else
+ while No (TSS (Utyp, TSS_Finalize_Address)) loop
+ Utyp := Underlying_Type (Base_Type (Etype (Utyp)));
+ end loop;
+ end if;
+ end;
end if;
end if;