This AI allows names that denote values rather than objects to
nevertheless be renamed using an object renaming.
Tested on x86_64-pc-linux-gnu, committed on trunk
gcc/ada/
* sem_ch8.adb (Analyze_Object_Renaming): Allow values in Ada
2020 mode.
diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb
--- a/gcc/ada/sem_ch8.adb
+++ b/gcc/ada/sem_ch8.adb
@@ -918,7 +918,8 @@ package body Sem_Ch8 is
if No (Etype (Nam))
or else Etype (Nam) = Standard_Void_Type
then
- Error_Msg_N ("object name expected in renaming", Nam);
+ Error_Msg_N
+ ("object name or value expected in renaming", Nam);
Set_Ekind (Id, E_Variable);
Set_Etype (Id, Any_Type);
@@ -965,7 +966,8 @@ package body Sem_Ch8 is
-- as overloaded procedures named in the object renaming).
if No (It.Typ) then
- Error_Msg_N ("object name expected in renaming", Nam);
+ Error_Msg_N
+ ("object name or value expected in renaming", Nam);
Set_Ekind (Id, E_Variable);
Set_Etype (Id, Any_Type);
@@ -996,6 +998,12 @@ package body Sem_Ch8 is
T := It1.Typ;
end;
end if;
+
+ if Etype (Nam) = Standard_Exception_Type then
+ Error_Msg_N
+ ("exception requires a subtype mark in renaming", Nam);
+ return;
+ end if;
end if;
-- The object renaming declaration may become Ghost if it renames a
@@ -1396,8 +1404,19 @@ package body Sem_Ch8 is
and then Nkind (Original_Node (Nam)) /= N_Attribute_Reference
then
null;
- else
- Error_Msg_N ("expect object name in renaming", Nam);
+
+ -- A named number can only be renamed without a subtype mark
+
+ elsif Nkind (Nam) in N_Real_Literal | N_Integer_Literal
+ and then Present (Subtype_Mark (N))
+ and then Present (Original_Entity (Nam))
+ then
+ Error_Msg_N ("incompatible types in renaming", Nam);
+
+ -- AI12-0383: Names that denote values can be renamed
+
+ elsif Ada_Version < Ada_2020 then
+ Error_Msg_N ("value in renaming requires -gnat2020", Nam);
end if;
Set_Etype (Id, T2);