[Ada] Guard against access to wrong fields in Is_Renaming
authorGhjuvan Lacambre <lacambre@adacore.com>
Wed, 3 Jun 2020 09:09:20 +0000 (11:09 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Wed, 15 Jul 2020 13:42:53 +0000 (09:42 -0400)
gcc/ada/

* sem_util.adb (Is_Renaming): Add ekind checks.

gcc/ada/sem_util.adb

index 480e6f1..59073b0 100644 (file)
@@ -6422,8 +6422,28 @@ package body Sem_Util is
 
       function Is_Renaming (N : Node_Id) return Boolean is
       begin
-         return
-           Is_Entity_Name (N) and then Present (Renamed_Entity (Entity (N)));
+         if not Is_Entity_Name (N) then
+            return False;
+         end if;
+
+         case Ekind (Entity (N)) is
+            when E_Variable | E_Constant =>
+               return Present (Renamed_Object (Entity (N)));
+
+            when E_Exception
+               | E_Function
+               | E_Generic_Function
+               | E_Generic_Package
+               | E_Generic_Procedure
+               | E_Operator
+               | E_Package
+               | E_Procedure
+            =>
+               return Present (Renamed_Entity (Entity (N)));
+
+            when others =>
+               return False;
+         end case;
       end Is_Renaming;
 
       -----------------------