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>
* sem_aux.ads, sem_aux.adb (Has_Rep_Item): New variant.
......
......@@ -1911,13 +1911,14 @@ package body Freeze is
procedure Freeze_Before
(N : Node_Id;
T : Entity_Id;
F_P : Boolean := True)
Do_Freeze_Profile : Boolean := True)
is
-- 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
-- whether its profile should be frozen at the same time.
-- Flag Freeze_Profile is used when T is an overloadable entity, and
-- 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
if Ekind (T) = E_Function then
......@@ -1936,7 +1937,7 @@ package body Freeze is
function Freeze_Entity
(E : Entity_Id;
N : Node_Id;
F_P : Boolean := True) return List_Id
Do_Freeze_Profile : Boolean := True) return List_Id
is
Loc : constant Source_Ptr := Sloc (N);
Atype : Entity_Id;
......@@ -5000,15 +5001,19 @@ package body Freeze is
-- any extra formal parameters are created since we now know
-- whether the subprogram will use a foreign convention.
-- In Ada 2012, freezing a subprogram does not always freeze
-- the corresponding profile (see AI05-019). An attribute
-- reference is not a freezing point of the profile. The boolean
-- Flag F_P indicates whether the profile should be frozen now.
-- In Ada 2012, freezing a subprogram does not always freeze the
-- corresponding profile (see AI05-019). An attribute reference
-- is not a freezing point of the profile. Flag Do_Freeze_Profile
-- indicates whether the profile should be frozen now.
-- Other constructs that should not freeze ???
-- 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
Ghost_Mode := Save_Ghost_Mode;
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