This patch corrects the verification of 'Address clauses to avoid
processing a clause where the prefix of the attribute is a generic
formal object.

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

2019-07-08  Hristian Kirtchev  <kirtc...@adacore.com>

gcc/ada/

        * sem_ch13.adb (Analyze_Attribute_Definition_Clause): Do not
        register an address clause when its prefix denotes a generic
        formal object.

gcc/testsuite/

        * gnat.dg/addr13.adb, gnat.dg/addr13.ads: New testcase.
--- gcc/ada/sem_ch13.adb
+++ gcc/ada/sem_ch13.adb
@@ -5145,6 +5145,7 @@ package body Sem_Ch13 is
                      --  aspect case properly.
 
                      if Is_Object (O_Ent)
+                       and then not Is_Generic_Formal (O_Ent)
                        and then not Is_Generic_Type (Etype (U_Ent))
                        and then Address_Clause_Overlay_Warnings
                      then

--- /dev/null
new file mode 100644
+++ gcc/testsuite/gnat.dg/addr13.adb
@@ -0,0 +1,9 @@
+--  { dg-do compile }
+
+package body Addr13 is
+   procedure Overlay is
+      Over : Integer with Address => Gen_Obj'Address;
+   begin
+      Over := 123;
+   end Overlay;
+end Addr13;

--- /dev/null
new file mode 100644
+++ gcc/testsuite/gnat.dg/addr13.ads
@@ -0,0 +1,5 @@
+generic
+   Gen_Obj : in out Integer;
+package Addr13 is
+   procedure Overlay;
+end Addr13;

Reply via email to