diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2007-06-06 12:41:12 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2007-06-06 12:41:12 +0200 |
commit | 6790c86527ca742b0cbe8542398e5fb498ec8a5b (patch) | |
tree | e0ccd59b7253eb4af45b23d2ced58a2fe183922d /gcc/ada/restrict.adb | |
parent | 38c2fd0ca96783d989c5244439f5cb7862c17097 (diff) | |
download | gcc-6790c86527ca742b0cbe8542398e5fb498ec8a5b.zip gcc-6790c86527ca742b0cbe8542398e5fb498ec8a5b.tar.gz gcc-6790c86527ca742b0cbe8542398e5fb498ec8a5b.tar.bz2 |
restrict.ads, [...] (No_Exception_Handlers_Set): Only return true if configurable run-time or No_Run_Time is set.
2007-04-20 Arnaud Charlet <charlet@adacore.com>
* restrict.ads, restrict.adb (No_Exception_Handlers_Set): Only return
true if configurable run-time or No_Run_Time is set.
(Set_Restriction): Avoid setting restriction No_Elaboration_Code when
processing an unit which is not the one being compiled.
From-SVN: r125443
Diffstat (limited to 'gcc/ada/restrict.adb')
-rw-r--r-- | gcc/ada/restrict.adb | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/gcc/ada/restrict.adb b/gcc/ada/restrict.adb index c13537d..03905ec 100644 --- a/gcc/ada/restrict.adb +++ b/gcc/ada/restrict.adb @@ -6,7 +6,7 @@ -- -- -- 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- -- @@ -30,7 +30,6 @@ with Errout; use Errout; 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; @@ -416,7 +415,10 @@ package body Restrict is 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; ---------------------------------- @@ -625,6 +627,23 @@ package body Restrict is 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 |