[Ada] Ignore out of range values for System.Priority in CodePeer mode
authorArnaud Charlet <charlet@adacore.com>
Wed, 30 May 2018 08:56:54 +0000 (08:56 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 30 May 2018 08:56:54 +0000 (08:56 +0000)
2018-05-30  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* checks.adb (Apply_Scalar_Range_Check):
* sem_eval.adb (Check_Non_Static_Context, Out_Of_Range): Ignore out of
range values for System.Priority in CodePeer mode since the actual
target compiler may provide a wider range.

From-SVN: r260929

gcc/ada/ChangeLog
gcc/ada/checks.adb
gcc/ada/sem_eval.adb

index 729caee2f59eed75c79623f6ac79b019a64264b7..026d3ef1cd1af32c73bc15d033bf9984d282bcc7 100644 (file)
@@ -1,3 +1,10 @@
+2018-05-30  Arnaud Charlet  <charlet@adacore.com>
+
+       * checks.adb (Apply_Scalar_Range_Check):
+       * sem_eval.adb (Check_Non_Static_Context, Out_Of_Range): Ignore out of
+       range values for System.Priority in CodePeer mode since the actual
+       target compiler may provide a wider range.
+
 2018-05-30  Ed Schonberg  <schonberg@adacore.com>
 
        * exp_unst.adb: Search specification of main unit as well, for
index 9fb775f500a56f8554d5472141c91cbe07917152..8fc81e9e840f874dd7b1fc4f63232124f7542473 100644 (file)
@@ -3065,7 +3065,16 @@ package body Checks is
                      --  If definitely not in range, warn
 
                      elsif Lov > Hi or else Hiv < Lo then
-                        Bad_Value;
+                        --  Ignore out of range values for System.Priority in
+                        --  CodePeer mode since the actual target compiler may
+                        --  provide a wider range.
+
+                        if not CodePeer_Mode
+                          or else Target_Typ /= RTE (RE_Priority)
+                        then
+                           Bad_Value;
+                        end if;
+
                         return;
 
                      --  Otherwise we don't know
index 48e141d64a67b9deb59b6dcef76485f9eb833c22..b216dabb19db2ff19ccd99f51b079d4a64ae6a9e 100644 (file)
@@ -574,8 +574,16 @@ package body Sem_Eval is
             null;
 
          elsif Is_Out_Of_Range (N, T, Assume_Valid => True) then
-            Apply_Compile_Time_Constraint_Error
-              (N, "value not in range of}<<", CE_Range_Check_Failed);
+            --  Ignore out of range values for System.Priority in CodePeer
+            --  mode since the actual target compiler may provide a wider
+            --  range.
+
+            if CodePeer_Mode and then T = RTE (RE_Priority) then
+               Set_Do_Range_Check (N, False);
+            else
+               Apply_Compile_Time_Constraint_Error
+                 (N, "value not in range of}<<", CE_Range_Check_Failed);
+            end if;
 
          elsif Checks_On then
             Enable_Range_Check (N);
@@ -5437,9 +5445,11 @@ package body Sem_Eval is
               First_Rep_Item (Parent (N)));
             Rewrite (N, Make_Integer_Literal (Sloc (N), Uint_1));
 
-         --  All cases except the special array case
+         --  All cases except the special array case.
+         --  No message if we are dealing with System.Priority values in
+         --  CodePeer mode where the target runtime may have more priorities.
 
-         else
+         elsif not CodePeer_Mode or else Etype (N) /= RTE (RE_Priority) then
             Apply_Compile_Time_Constraint_Error
               (N, "value not in range of}", CE_Range_Check_Failed);
          end if;