From ad9b787efbfff948a2d4484b556c2f9c33feda19 Mon Sep 17 00:00:00 2001 From: bosch 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, return the gobal finalization list, for lack of anthing else. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@46210 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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 16ecc43..7e563c5 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,10 @@ 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 exception handler, always use new transient scope to place Clean procedure. diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb index 03e8360..825a44d 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.7.4