[Ada] Spurious visibility error in predicate in generic instance
authorEd Schonberg <schonberg@adacore.com>
Thu, 10 Oct 2019 15:23:01 +0000 (15:23 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 10 Oct 2019 15:23:01 +0000 (15:23 +0000)
2019-10-10  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_cat.adb (Set_Categorization_From_Pragma): Do not modify
any visibility settings if there are no compilation_unit pragmas
following the package declaration. Add comments for future
cleanup.

From-SVN: r276812

gcc/ada/ChangeLog
gcc/ada/sem_cat.adb

index 1788f19293ed1b187eea52b423c80173620c5fd4..50654f060461495b5e28dd1dd1e0e25ec4e612d9 100644 (file)
@@ -1,10 +1,6 @@
-2019-10-10  Patrick Bernardi  <bernardi@adacore.com>
+2019-10-10  Ed Schonberg  <schonberg@adacore.com>
 
-       * bindgen.adb (System_Secondary_Stack_Package_In_Closure):
-       Renamed flag System_Secondary_Stack_Used to be clearer of what
-       it represents.
-       (Gen_Adainit): Refactor secondary stack related code to make it
-       clearer.
-       * rtsfind.adb (Load_RTU): Don't set Sec_Stack_Used flag here
-       (RTE): Set Sec_Stack_Used if the System.Secondary_Stack is
-       referenced, but not if we're ignoring ghost code.
\ No newline at end of file
+       * sem_cat.adb (Set_Categorization_From_Pragma): Do not modify
+       any visibility settings if there are no compilation_unit pragmas
+       following the package declaration. Add comments for future
+       cleanup.
\ No newline at end of file
index 663dca4ea85d6d250b24094a330134e293a8b7f9..780fec94980df06f91814bf802667e26c26a3e6b 100644 (file)
@@ -721,9 +721,15 @@ package body Sem_Cat is
       --  The purpose is to set categorization flags before analyzing the
       --  unit itself, so as to diagnose violations of categorization as
       --  we process each declaration, even though the pragma appears after
-      --  the unit.
-
-      if Nkind (P) /= N_Compilation_Unit then
+      --  the unit. This processing is only needsd if compilation unit
+      --  pragmas are present.
+      --  Note: this code may be incorrect in the unlikely case a child
+      --  genericc unit is instantiated as a child of its (non-generic)
+      --  parent, so that generic and insstance are siblings,
+
+      if Nkind (P) /= N_Compilation_Unit
+         or else No (First (Pragmas_After (Aux_Decls_Node (P))))
+      then
          return;
       end if;