diff mbox

[Ada] Do not complain about restricted references within defining units

Message ID 20140521124003.GA15799@adacore.com
State New
Headers show

Commit Message

Arnaud Charlet May 21, 2014, 12:40 p.m. UTC
Restrictions No_Abort_Statements and No_Dynamic_Attachment follow exactly
the RM rule which forbids any references to certain entities. But this
should not apply to the units in which these entities are declared, since
otherwise, for example, a pragma Inline for one of these entities is a
violation of this restriction. This patch avoids complaining about any
reference to restricted entities from within their own extended units.

Given a gnat.adc file containing

pragma Restrictions (No_Abort_Statements);

with this patch, you can compile s-taside.ads using -gnatc -gnatg
and the compilation does not flag a restriction violation.

Tested on x86_64-pc-linux-gnu, committed on trunk

2014-05-21  Robert Dewar  <dewar@adacore.com>

	* sem_util.adb (Set_Entity_With_Checks): Don't complain about
	references to restricted entities within the units in which they
	are declared.
diff mbox

Patch

Index: sem_util.adb
===================================================================
--- sem_util.adb	(revision 210695)
+++ sem_util.adb	(working copy)
@@ -15877,6 +15877,11 @@ 
 
       if Restriction_Check_Required (No_Abort_Statements)
         and then (Is_RTE (Val, RE_Abort_Task))
+
+        --  A special extra check, don't complain about a reference from within
+        --  the Ada.Task_Identification package itself!
+
+        and then not In_Same_Extended_Unit (N, Val)
       then
          Check_Restriction (No_Abort_Statements, Post_Node);
       end if;
@@ -15892,6 +15897,10 @@ 
                   Is_RTE (Val, RE_Exchange_Handler) or else
                   Is_RTE (Val, RE_Detach_Handler)   or else
                   Is_RTE (Val, RE_Reference))
+        --  A special extra check, don't complain about a reference from within
+        --  the Ada.Interrupts package itself!
+
+        and then not In_Same_Extended_Unit (N, Val)
       then
          Check_Restriction (No_Dynamic_Attachment, Post_Node);
       end if;