From c223b7646bff69adeea080fdddc499b30179efec Mon Sep 17 00:00:00 2001 From: Ed Schonberg Date: Thu, 10 Oct 2019 15:23:01 +0000 Subject: [PATCH] [Ada] Spurious visibility error in predicate in generic instance 2019-10-10 Ed Schonberg 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 | 14 +++++--------- gcc/ada/sem_cat.adb | 12 +++++++++--- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 1788f19..50654f0 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,10 +1,6 @@ -2019-10-10 Patrick Bernardi +2019-10-10 Ed Schonberg - * 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 diff --git a/gcc/ada/sem_cat.adb b/gcc/ada/sem_cat.adb index 663dca4..780fec9 100644 --- a/gcc/ada/sem_cat.adb +++ b/gcc/ada/sem_cat.adb @@ -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; -- 2.7.4