diff mbox series

[Ada] Spurious visibility error in subprogram body in with_clause

Message ID 20201130141711.GA117683@adacore.com
State New
Headers show
Series [Ada] Spurious visibility error in subprogram body in with_clause | expand

Commit Message

Pierre-Marie de Rodat Nov. 30, 2020, 2:17 p.m. UTC
Compiler rejects a use of a name in a subprogram body that appears in a
with_clause, when the name is that of an inherited function for a local
derived type, and is hidden by an explicit declaration of a
non-overloadable homonym, and other homonyms exist in the environment of
the subprogram body.

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

gcc/ada/

	* sem_util.adb (Enter_Name): When an inherited operation for a
	local derived type is hidden by an explicit declaration of a
	non-overloadable entity in the same scope, make the inherited
	operation non-visible to prevent its accidental use elsewhere.
diff mbox series

Patch

diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -8288,6 +8288,13 @@  package body Sem_Util is
                   else
                      Set_Name_Entity_Id (Chars (E), Homonym (E));
                   end if;
+
+                  --  The inherited operation cannot be retrieved
+                  --  by name, even though it may remain accesssible
+                  --  in some cases involving subprogram bodies without
+                  --  specs appearing in with_clauses..
+
+                  Set_Is_Immediately_Visible (E, False);
                end if;
             end;