* [Ada] Crash on illegal left-hand side in assignment of renamed variable
@ 2019-08-12 9:10 Pierre-Marie de Rodat
0 siblings, 0 replies; only message in thread
From: Pierre-Marie de Rodat @ 2019-08-12 9:10 UTC (permalink / raw)
To: gcc-patches; +Cc: Ed Schonberg
[-- Attachment #1: Type: text/plain, Size: 590 bytes --]
This patch fixes a crash on an assignment where the left-hand side is a
renaming of a function call that does not involve ceiling priorities.
This avoids a compiler crash in some cases, and prevents a useless
retrieval and compilation of run-time packages.
Tested on x86_64-pc-linux-gnu, committed on trunk
2019-08-12 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_util.adb (Is_Expaned_Priority_Attribute): Check whether
call comes from a rewritten attribute before comparing name with
Get_Ceiling run-time subprogram.
gcc/testsuite/
* gnat.dg/renaming15.adb: New testcase.
[-- Attachment #2: patch.diff --]
[-- Type: text/x-diff, Size: 1456 bytes --]
--- gcc/ada/sem_util.adb
+++ gcc/ada/sem_util.adb
@@ -14669,6 +14669,7 @@ package body Sem_Util is
return
Nkind (E) = N_Function_Call
and then not Configurable_Run_Time_Mode
+ and then Nkind (Original_Node (E)) = N_Attribute_Reference
and then (Entity (Name (E)) = RTE (RE_Get_Ceiling)
or else Entity (Name (E)) = RTE (RO_PE_Get_Ceiling));
end Is_Expanded_Priority_Attribute;
--- /dev/null
new file mode 100644
+++ gcc/testsuite/gnat.dg/renaming15.adb
@@ -0,0 +1,32 @@
+-- { dg-do compile }
+
+with Ada.Containers.Hashed_Maps;
+with Ada.Text_IO;
+
+procedure Renaming15 is
+ use Ada.Containers;
+
+ subtype String_T is String (1 .. 3);
+
+ function Hash (Aircraft_Id : Integer) return Hash_Type is
+ (Hash_Type (Aircraft_Id) * (2 ** 31 - 1));
+ function Equal (Left, Right : Integer) return Boolean is (Left = Right);
+ package Radar_Map is new Hashed_Maps (Integer, String_T, Hash, Equal);
+
+ Radars : Radar_Map.Map;
+
+ procedure Change_Elem_Value is
+ begin
+ for C in Radars.Iterate loop
+ declare
+ E : String_T renames Radar_Map.Element (C);
+ begin
+ E := "Xyz"; -- { dg-error "left hand side of assignment must be a variable" }
+ Ada.Text_IO.Put_Line (E);
+ end;
+ end loop;
+ end Change_Elem_Value;
+begin
+ Radars.Include (1, "jjj");
+ Change_Elem_Value;
+end Renaming15;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2019-08-12 9:10 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-12 9:10 [Ada] Crash on illegal left-hand side in assignment of renamed variable Pierre-Marie de Rodat
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).