Renamed_Entity is only valid for a few entities, using it on any entity
passed to Is_Renaming can result in crashes. Fixing this requires
making sure that Is_Renaming only uses Renamed_Entity on entities where
this is allowed and uses Is_Renaming_Of_Object everywhere else.
Tested on x86_64-pc-linux-gnu, committed on trunk
gcc/ada/
* sem_util.adb (Is_Renaming): Add ekind checks.
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
@@ -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;
-----------------------