This patch verifies that when Default_Storage_Pools is specified by means of
an aspect, the entity to which it applies is a package or a subprogram.

Compiling pck2.ads must yield:

   pck2.ads:4:11: aspect must apply to package or subprogram

---
with GNAT.Debug_Pools;
package Pck2 is
   Pool : GNAT.Debug_Pools.Debug_Pool
     with Default_Storage_Pool => Pool;
end Pck2;

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

2016-04-20  Ed Schonberg  <schonb...@adacore.com>

        * sem_prag.adb (Analyze_Pragma, case Default_Storage_Pool):
        If the pragma comes from an aspect specification, verify that
        the aspect applies to an entity with a declarative part.

Index: sem_prag.adb
===================================================================
--- sem_prag.adb        (revision 235202)
+++ sem_prag.adb        (working copy)
@@ -13582,6 +13582,17 @@
                Check_Is_In_Decl_Part_Or_Package_Spec;
             end if;
 
+            if From_Aspect_Specification (N) then
+               declare
+                  E : constant Entity_Id := Entity (Corresponding_Aspect (N));
+               begin
+                  if not In_Open_Scopes (E) then
+                     Error_Msg_N
+                       ("aspect must apply to package or subprogram", N);
+                  end if;
+               end;
+            end if;
+
             if Present (Arg1) then
                Pool := Get_Pragma_Arg (Arg1);
 

Reply via email to