OSDN Git Service

2005-11-14 Ed Schonberg <schonberg@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 15 Nov 2005 13:58:51 +0000 (13:58 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 15 Nov 2005 13:58:51 +0000 (13:58 +0000)
* freeze.adb (Freeze_Entity): For an access formal that is an access
to subprogram, freeze the anonymous subprogram type at the same time,
to prevent later freezing in the wrong scope, such as the enclosing
subprogram body.
(Freeze_Entity): Freeze the equivalent_type of an access_to_protected_
subprogram whenever available.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@106979 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/freeze.adb

index 31f5bb1..6252fe8 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2005 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- --
@@ -2257,6 +2257,9 @@ package body Freeze is
                            Error_Msg_N
                              ("(Ada 2005): invalid use of unconstrained tagged"
                               & " incomplete type", E);
+
+                        elsif Ekind (F_Type) = E_Subprogram_Type then
+                           Freeze_And_Append (F_Type, Loc, Result);
                         end if;
                      end if;
 
@@ -3001,7 +3004,7 @@ package body Freeze is
             end if;
 
          --  For access to a protected subprogram, freeze the equivalent
-         --  type (however this is not set if we are not generating code)
+         --  type (however this is not set if we are not generating code
          --  or if this is an anonymous type used just for resolution).
 
          elsif Ekind (E) = E_Access_Protected_Subprogram_Type then
@@ -3031,9 +3034,7 @@ package body Freeze is
                end if;
             end;
 
-            if Operating_Mode = Generate_Code
-              and then Present (Equivalent_Type (E))
-            then
+            if Present (Equivalent_Type (E)) then
                Freeze_And_Append (Equivalent_Type (E), Loc, Result);
             end if;
          end if;