-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2006, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2007, 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- --
with Fname; use Fname;
with Fname.UF; use Fname.UF;
with Lib; use Lib;
-with Namet; use Namet;
with Opt; use Opt;
with Sinfo; use Sinfo;
with Sinput; use Sinput;
function No_Exception_Handlers_Set return Boolean is
begin
- return Restrictions.Set (No_Exception_Handlers);
+ return (No_Run_Time_Mode or else Configurable_Run_Time_Mode)
+ and then (Restrictions.Set (No_Exception_Handlers)
+ or else
+ Restrictions.Set (No_Exception_Propagation));
end No_Exception_Handlers_Set;
----------------------------------
N : Node_Id)
is
begin
+ -- Restriction No_Elaboration_Code must be enforced on a unit by unit
+ -- basis. Hence, we avoid setting the restriction when processing an
+ -- unit which is not the main one being compiled (or its corresponding
+ -- spec). It can happen, for example, when processing an inlined body
+ -- (the package containing the inlined subprogram is analyzed,
+ -- including its pragma Restrictions).
+
+ -- This seems like a very nasty kludge??? This is not the only per unit
+ -- restriction why is this treated specially ???
+
+ if R = No_Elaboration_Code
+ and then Current_Sem_Unit /= Main_Unit
+ and then Cunit (Current_Sem_Unit) /= Library_Unit (Cunit (Main_Unit))
+ then
+ return;
+ end if;
+
Restrictions.Set (R) := True;
if Restricted_Profile_Cached and Restricted_Profile_Result then
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2006, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2007, 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- --
-- This package deals with the implementation of the Restrictions pragma
+with Namet; use Namet;
with Rident; use Rident;
with Table;
with Types; use Types;
function No_Exception_Handlers_Set return Boolean;
-- Test to see if current restrictions settings specify that no exception
-- handlers are present. This function is called by Gigi when it needs to
- -- expand an AT END clean up identifier with no exception handler.
+ -- expand an AT END clean up identifier with no exception handler. True
+ -- will be returned if the configurable run-time is activated, and either
+ -- of the restrictions No_Exception_Handlers or No_Exception_Propagation is
+ -- set. In the latter case, the source may contain handlers but they either
+ -- get converted using the local goto transformation or deleted.
function Process_Restriction_Synonyms (N : Node_Id) return Name_Id;
-- Id is a node whose Chars field contains the name of a restriction.