From 88ad52c90d5aa992fbbcba44f91faccdc02150ef Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Wed, 30 May 2018 08:56:54 +0000 Subject: [PATCH] [Ada] Ignore out of range values for System.Priority in CodePeer mode 2018-05-30 Arnaud Charlet 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 | 7 +++++++ gcc/ada/checks.adb | 11 ++++++++++- gcc/ada/sem_eval.adb | 18 ++++++++++++++---- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 729caee2f59..026d3ef1cd1 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2018-05-30 Arnaud Charlet + + * 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 * exp_unst.adb: Search specification of main unit as well, for diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index 9fb775f500a..8fc81e9e840 100644 --- a/gcc/ada/checks.adb +++ b/gcc/ada/checks.adb @@ -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 diff --git a/gcc/ada/sem_eval.adb b/gcc/ada/sem_eval.adb index 48e141d64a6..b216dabb19d 100644 --- a/gcc/ada/sem_eval.adb +++ b/gcc/ada/sem_eval.adb @@ -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;