From 44d8d2bb3bc0b39bff52d12e0d48ebc57116a399 Mon Sep 17 00:00:00 2001 From: Ed Schonberg Date: Thu, 11 Oct 2001 23:54:52 +0000 Subject: [PATCH] exp_ch7.adb (Find_Final_List): for a type appearing in a with_type clause... * exp_ch7.adb (Find_Final_List): for a type appearing in a with_type clause, return the gobal finalization list, for lack of anthing else. From-SVN: r46210 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/exp_ch7.adb | 19 +++++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 16ecc43422f..7e563c5feb4 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2001-10-11 Ed Schonberg + + * exp_ch7.adb (Find_Final_List): for a type appearing in a with_type + clause, return the gobal finalization list, for lack of anthing else. + 2001-10-11 Ed Schonberg * exp_ch7.adb (Make_Transient_Block): if statement is within diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb index 03e83603a1e..825a44d336a 100644 --- a/gcc/ada/exp_ch7.adb +++ b/gcc/ada/exp_ch7.adb @@ -1140,14 +1140,21 @@ package body Exp_Ch7 is -- Case of a dynamically allocated object. The final list is the -- corresponding list controller (The next entity in the scope of - -- the access type with the right type) + -- the access type with the right type). If the type comes from a + -- With_Type clause, no controller was created, and we use the + -- global chain instead. elsif Is_Access_Type (E) then - return - Make_Selected_Component (Loc, - Prefix => - New_Reference_To (Associated_Final_Chain (Base_Type (E)), Loc), - Selector_Name => Make_Identifier (Loc, Name_F)); + if not From_With_Type (E) then + return + Make_Selected_Component (Loc, + Prefix => + New_Reference_To + (Associated_Final_Chain (Base_Type (E)), Loc), + Selector_Name => Make_Identifier (Loc, Name_F)); + else + return New_Reference_To (RTE (RE_Global_Final_List), Sloc (E)); + end if; else if Is_Dynamic_Scope (E) then -- 2.30.2