Commit 57747aec by Ed Schonberg Committed by Arnaud Charlet

freeze.adb (Freeze_Entity): For an access formal that is an access to subprogram...

2005-11-14  Ed Schonberg  <schonberg@adacore.com>

	* 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.

From-SVN: r106979
parent 6aea4c39
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- 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 -- -- 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- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -2257,6 +2257,9 @@ package body Freeze is ...@@ -2257,6 +2257,9 @@ package body Freeze is
Error_Msg_N Error_Msg_N
("(Ada 2005): invalid use of unconstrained tagged" ("(Ada 2005): invalid use of unconstrained tagged"
& " incomplete type", E); & " incomplete type", E);
elsif Ekind (F_Type) = E_Subprogram_Type then
Freeze_And_Append (F_Type, Loc, Result);
end if; end if;
end if; end if;
...@@ -3001,7 +3004,7 @@ package body Freeze is ...@@ -3001,7 +3004,7 @@ package body Freeze is
end if; end if;
-- For access to a protected subprogram, freeze the equivalent -- 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). -- or if this is an anonymous type used just for resolution).
elsif Ekind (E) = E_Access_Protected_Subprogram_Type then elsif Ekind (E) = E_Access_Protected_Subprogram_Type then
...@@ -3031,9 +3034,7 @@ package body Freeze is ...@@ -3031,9 +3034,7 @@ package body Freeze is
end if; end if;
end; end;
if Operating_Mode = Generate_Code if Present (Equivalent_Type (E)) then
and then Present (Equivalent_Type (E))
then
Freeze_And_Append (Equivalent_Type (E), Loc, Result); Freeze_And_Append (Equivalent_Type (E), Loc, Result);
end if; end if;
end if; end if;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment