aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2021-05-31 16:32:14 +0200
committerPierre-Marie de Rodat <derodat@adacore.com>2021-07-08 13:34:21 +0000
commita9c3a4975013a9c3e29c03af5a1d0772d81aba12 (patch)
tree0359614370dfbc93fe4e687c7788b328fb5a4706
parent73f841cfca82827a60b9a4da8400f6686c85d3ec (diff)
downloadgcc-a9c3a4975013a9c3e29c03af5a1d0772d81aba12.zip
gcc-a9c3a4975013a9c3e29c03af5a1d0772d81aba12.tar.gz
gcc-a9c3a4975013a9c3e29c03af5a1d0772d81aba12.tar.bz2
[Ada] Fix violation of No_Implicit_Loops restriction for enumeration type
gcc/ada/ * exp_imgv.adb: Add with and use clause for Restrict and Rident. (Build_Enumeration_Image_Tables): Do not generate the hash function if the No_Implicit_Loops restriction is active.
-rw-r--r--gcc/ada/exp_imgv.adb11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/ada/exp_imgv.adb b/gcc/ada/exp_imgv.adb
index 6e17a5c..d2605fb 100644
--- a/gcc/ada/exp_imgv.adb
+++ b/gcc/ada/exp_imgv.adb
@@ -37,6 +37,8 @@ with Namet; use Namet;
with Nmake; use Nmake;
with Nlists; use Nlists;
with Opt; use Opt;
+with Restrict; use Restrict;
+with Rident; use Rident;
with Rtsfind; use Rtsfind;
with Sem_Aux; use Sem_Aux;
with Sem_Res; use Sem_Res;
@@ -160,6 +162,8 @@ package body Exp_Imgv is
Expression => Make_Aggregate (Loc, Expressions => V)));
end Append_Table_To;
+ -- Start of Build_Enumeration_Image_Tables
+
begin
-- Nothing to do for types other than a root enumeration type
@@ -247,7 +251,7 @@ package body Exp_Imgv is
Append_Table_To (Act, Eind, Nlit, Ityp, Ind);
-- If the number of literals is not greater than Threshold, then we are
- -- done. Otherwise we compute a (perfect) hash function for use by the
+ -- done. Otherwise we generate a (perfect) hash function for use by the
-- Value attribute.
if Nlit > Threshold then
@@ -283,11 +287,12 @@ package body Exp_Imgv is
-- If the unit where the type is declared is the main unit, and the
-- number of literals is greater than Threshold_For_Size when we are
- -- optimizing for size, and -gnatd_h is not specified, try to compute
- -- the hash function.
+ -- optimizing for size, and the restriction No_Implicit_Loops is not
+ -- active, and -gnatd_h is not specified, generate the hash function.
if In_Main_Unit
and then (Optimize_Size = 0 or else Nlit > Threshold_For_Size)
+ and then not Restriction_Active (No_Implicit_Loops)
and then not Debug_Flag_Underscore_H
then
declare