sem_ch7.adb (Uninstall_Declarations): Exchange full and private views of a private...
authorArnaud Charlet <charlet@gcc.gnu.org>
Thu, 10 Feb 2005 13:56:10 +0000 (14:56 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Thu, 10 Feb 2005 13:56:10 +0000 (14:56 +0100)
* sem_ch7.adb (Uninstall_Declarations): Exchange full and private
views of a private type after handling its private dependents, to
maintain proper stack discipline between entry and exit from the
package.

From-SVN: r94821

gcc/ada/sem_ch7.adb

index 5ffa86396c41654c90826909bf674a14095d758d..b56917d4badfd77943b585273eb5ed17987fcb85 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2004, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -1905,7 +1905,6 @@ package body Sem_Ch7 is
             end if;
 
             Priv_Elmt := First_Elmt (Private_Dependents (Id));
-            Exchange_Declarations (Id);
 
             --  Swap out the subtypes and derived types of Id that were
             --  compiled in this scope, or installed previously by
@@ -1937,6 +1936,10 @@ package body Sem_Ch7 is
                Next_Elmt (Priv_Elmt);
             end loop;
 
+            --  Now restore the type itself to its private view.
+
+            Exchange_Declarations (Id);
+
          elsif Ekind (Id) = E_Incomplete_Type
            and then No (Full_View (Id))
          then