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  <de...@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.

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;

Reply via email to