[Ada] Remove bypass for instance bodies from Is_Visible_Component

Message ID 20200609081006.GA73818@adacore.com
State New
Headers show
  • [Ada] Remove bypass for instance bodies from Is_Visible_Component
Related show

Commit Message

Pierre-Marie de Rodat June 9, 2020, 8:10 a.m.
This removes an obsolete bypass present for long in the predicate
Is_Visible_Component, which is responsible for determining whether
a component present in a private tagged record type is visible in
its extensions.  This bypass would essentially always return true
in bodies of instances, but there is no real basis to do so.

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

2020-06-09  Eric Botcazou  <ebotcazou@adacore.com>


	* sem_ch3.adb (Is_Visible_Component): Do not special-case
	bodies of instances.


--- gcc/ada/sem_ch3.adb
+++ gcc/ada/sem_ch3.adb
@@ -18762,39 +18762,6 @@  package body Sem_Ch3 is
          return True;
-      --  In the body of an instantiation, check the visibility of a component
-      --  in case it has a homograph that is a primitive operation of a private
-      --  type which was not visible in the generic unit.
-      --  Should Is_Prefixed_Call be propagated from template to instance???
-      elsif In_Instance_Body then
-         if not Is_Tagged_Type (Original_Type)
-           or else not Is_Private_Type (Original_Type)
-         then
-            return True;
-         else
-            declare
-               Subp_Elmt : Elmt_Id;
-            begin
-               Subp_Elmt := First_Elmt (Primitive_Operations (Original_Type));
-               while Present (Subp_Elmt) loop
-                  --  The component is hidden by a primitive operation
-                  if Chars (Node (Subp_Elmt)) = Chars (C) then
-                     return False;
-                  end if;
-                  Next_Elmt (Subp_Elmt);
-               end loop;
-               return True;
-            end;
-         end if;
       --  If the component has been declared in an ancestor which is currently
       --  a private type, then it is not visible. The same applies if the
       --  component's containing type is not in an open scope and the original