diff options
author | Ed Schonberg <schonberg@adacore.com> | 2019-08-12 09:01:43 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2019-08-12 09:01:43 +0000 |
commit | 8e4ca4fcffbe6d3855f67cd02e0bb2a40d62fa10 (patch) | |
tree | 27d718c27b20a3167293c49845c134957c325ed9 | |
parent | fba9fcae321660fdc760fd293d92970e52489706 (diff) | |
download | gcc-8e4ca4fcffbe6d3855f67cd02e0bb2a40d62fa10.zip gcc-8e4ca4fcffbe6d3855f67cd02e0bb2a40d62fa10.tar.gz gcc-8e4ca4fcffbe6d3855f67cd02e0bb2a40d62fa10.tar.bz2 |
[Ada] Crash on illegal left-hand side in assignment of renamed variable
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.
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.
From-SVN: r274305
-rw-r--r-- | gcc/ada/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ada/sem_util.adb | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/renaming15.adb | 32 |
4 files changed, 43 insertions, 0 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 64f4c6b..74ceb50 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2019-08-12 Ed Schonberg <schonberg@adacore.com> + + * sem_util.adb (Is_Expaned_Priority_Attribute): Check whether + call comes from a rewritten attribute before comparing name with + Get_Ceiling run-time subprogram. + 2019-08-12 Eric Botcazou <ebotcazou@adacore.com> * exp_util.ads (Component_May_Be_Bit_Aligned): Small comment diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 42085c7..54ac0a4 100644 --- a/gcc/ada/sem_util.adb +++ b/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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ee65d1b..9c1bd07 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-08-12 Ed Schonberg <schonberg@adacore.com> + + * gnat.dg/renaming15.adb: New testcase. + 2019-08-12 Eric Botcazou <ebotcazou@adacore.com> * gnat.dg/slice10.adb: New testcase. diff --git a/gcc/testsuite/gnat.dg/renaming15.adb b/gcc/testsuite/gnat.dg/renaming15.adb new file mode 100644 index 0000000..a0b13cd --- /dev/null +++ b/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; |