Code cleanups.

From-SVN: r244412
This commit is contained in:
Arnaud Charlet 2017-01-13 11:39:38 +01:00
parent 3abbc5c240
commit 3603fa5cfb
2 changed files with 30 additions and 4 deletions

View File

@ -1085,8 +1085,10 @@ package body Contracts is
--------------------------------
procedure Analyze_Previous_Contracts (Body_Decl : Node_Id) is
Body_Id : constant Entity_Id := Defining_Entity (Body_Decl);
Par : Node_Id;
Body_Id : constant Entity_Id := Defining_Entity (Body_Decl);
Orig_Decl : constant Node_Id := Original_Node (Body_Decl);
Par : Node_Id;
begin
-- A body that is in the process of being inlined appears from source,
@ -1109,6 +1111,29 @@ package body Contracts is
Freeze_Id => Defining_Entity (Body_Decl));
exit;
-- Do not look for an enclosing package body when the construct which
-- causes freezing is a body generated for an expression function and
-- it appears within a package spec. This ensures that the traversal
-- will not reach too far up the parent chain and attempt to freeze a
-- package body which should not be frozen.
-- package body Enclosing_Body
-- with Refined_State => (State => Var)
-- is
-- package Nested is
-- type Some_Type is ...;
-- function Cause_Freezing return ...;
-- private
-- function Cause_Freezing is (...);
-- end Nested;
--
-- Var : Nested.Some_Type;
elsif Nkind (Par) = N_Package_Declaration
and then Nkind (Orig_Decl) = N_Expression_Function
then
exit;
end if;
Par := Parent (Par);

View File

@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 2015, Free Software Foundation, Inc. --
-- Copyright (C) 2015-2016, 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- --
@ -131,7 +131,8 @@ package Contracts is
procedure Analyze_Previous_Contracts (Body_Decl : Node_Id);
-- Analyze the contracts of all source constructs found in the declarative
-- list which contains entry, package, protected, subprogram, or task body
-- denoted by Body_Decl. The analysis stops once Body_Decl is reached.
-- denoted by Body_Decl. The analysis stops once Body_Decl is reached. In
-- addition, analyze the contract of the nearest enclosing package body.
procedure Analyze_Protected_Contract (Prot_Id : Entity_Id);
-- Analyze all delayed pragmas chained on the contract of protected unit