OSDN Git Service

* exp_ch7.adb (Find_Final_List): for a type appearing in a with_type
authorbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 11 Oct 2001 23:54:52 +0000 (23:54 +0000)
committerbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 11 Oct 2001 23:54:52 +0000 (23:54 +0000)
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
gcc/ada/exp_ch7.adb

index 16ecc43..7e563c5 100644 (file)
@@ -1,5 +1,10 @@
 2001-10-11  Ed Schonberg <schonber@gnat.com>
 
+       * 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 <schonber@gnat.com>
+
        * exp_ch7.adb (Make_Transient_Block): if statement is within 
        exception handler, always use new transient scope to place Clean 
        procedure.
index 03e8360..825a44d 100644 (file)
@@ -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