Commit 78bc7fe6 by Ed Schonberg Committed by Arnaud Charlet

freeze.adb: Freeze profile in ASIS mode.

2016-04-21  Ed Schonberg  <schonberg@adacore.com>

	* freeze.adb: Freeze profile in ASIS mode.

From-SVN: r235309
parent 6dc87f5f
2016-04-21 Ed Schonberg <schonberg@adacore.com>
* freeze.adb: Freeze profile in ASIS mode.
2016-04-21 Hristian Kirtchev <kirtchev@adacore.com> 2016-04-21 Hristian Kirtchev <kirtchev@adacore.com>
* sem_aux.ads, sem_aux.adb (Has_Rep_Item): New variant. * sem_aux.ads, sem_aux.adb (Has_Rep_Item): New variant.
......
...@@ -1909,15 +1909,16 @@ package body Freeze is ...@@ -1909,15 +1909,16 @@ package body Freeze is
------------------- -------------------
procedure Freeze_Before procedure Freeze_Before
(N : Node_Id; (N : Node_Id;
T : Entity_Id; T : Entity_Id;
F_P : Boolean := True) Do_Freeze_Profile : Boolean := True)
is is
-- Freeze T, then insert the generated Freeze nodes before the node N. -- Freeze T, then insert the generated Freeze nodes before the node N.
-- The flag F_P is used when T is an overloadable entity, and indicates -- Flag Freeze_Profile is used when T is an overloadable entity, and
-- whether its profile should be frozen at the same time. -- indicates whether its profile should be frozen at the same time.
Freeze_Nodes : constant List_Id := Freeze_Entity (T, N, F_P); Freeze_Nodes : constant List_Id :=
Freeze_Entity (T, N, Do_Freeze_Profile);
begin begin
if Ekind (T) = E_Function then if Ekind (T) = E_Function then
...@@ -1934,9 +1935,9 @@ package body Freeze is ...@@ -1934,9 +1935,9 @@ package body Freeze is
------------------- -------------------
function Freeze_Entity function Freeze_Entity
(E : Entity_Id; (E : Entity_Id;
N : Node_Id; N : Node_Id;
F_P : Boolean := True) return List_Id Do_Freeze_Profile : Boolean := True) return List_Id
is is
Loc : constant Source_Ptr := Sloc (N); Loc : constant Source_Ptr := Sloc (N);
Atype : Entity_Id; Atype : Entity_Id;
...@@ -5000,15 +5001,19 @@ package body Freeze is ...@@ -5000,15 +5001,19 @@ package body Freeze is
-- any extra formal parameters are created since we now know -- any extra formal parameters are created since we now know
-- whether the subprogram will use a foreign convention. -- whether the subprogram will use a foreign convention.
-- In Ada 2012, freezing a subprogram does not always freeze -- In Ada 2012, freezing a subprogram does not always freeze the
-- the corresponding profile (see AI05-019). An attribute -- corresponding profile (see AI05-019). An attribute reference
-- reference is not a freezing point of the profile. The boolean -- is not a freezing point of the profile. Flag Do_Freeze_Profile
-- Flag F_P indicates whether the profile should be frozen now. -- indicates whether the profile should be frozen now.
-- Other constructs that should not freeze ??? -- Other constructs that should not freeze ???
-- This processing doesn't apply to internal entities (see below) -- This processing doesn't apply to internal entities (see below)
-- In ASIS mode the profile is frozen unconditionally, to prevent
-- backend anomalies.
if not Is_Internal (E) and then F_P then if not Is_Internal (E)
and then (Do_Freeze_Profile or ASIS_Mode)
then
if not Freeze_Profile (E) then if not Freeze_Profile (E) then
Ghost_Mode := Save_Ghost_Mode; Ghost_Mode := Save_Ghost_Mode;
return Result; return Result;
......
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