diff options
author | Yannick Moy <moy@adacore.com> | 2019-12-12 12:38:19 +0100 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-06-02 04:58:01 -0400 |
commit | 0b8eceff72120b5378423fbc2475a95f4730edad (patch) | |
tree | 1f896405e267df442df7d1bc947927bdf595f7fa /gcc | |
parent | a92db2624549f119a6f5c1e19c3013768b6bad3e (diff) | |
download | gcc-0b8eceff72120b5378423fbc2475a95f4730edad.zip gcc-0b8eceff72120b5378423fbc2475a95f4730edad.tar.gz gcc-0b8eceff72120b5378423fbc2475a95f4730edad.tar.bz2 |
[Ada] Allow GNATprove to set overflow mode
2020-06-02 Yannick Moy <moy@adacore.com>
gcc/ada/
* sem_prag.adb, sem_prag.ads (Set_Overflow_Mode): New procedure
to set overflow mode.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/sem_prag.adb | 62 | ||||
-rw-r--r-- | gcc/ada/sem_prag.ads | 5 |
2 files changed, 65 insertions, 2 deletions
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 936d699..77cd051 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -32303,6 +32303,64 @@ package body Sem_Prag is Generate_Reference (Entity (With_Item), N, Set_Ref => False); end Set_Elab_Unit_Name; + ----------------------- + -- Set_Overflow_Mode -- + ----------------------- + + procedure Set_Overflow_Mode (N : Node_Id) is + + function Get_Overflow_Mode (Arg : Node_Id) return Overflow_Mode_Type; + -- Function to process one pragma argument, Arg + + ----------------------- + -- Get_Overflow_Mode -- + ----------------------- + + function Get_Overflow_Mode (Arg : Node_Id) return Overflow_Mode_Type is + Argx : constant Node_Id := Get_Pragma_Arg (Arg); + + begin + if Chars (Argx) = Name_Strict then + return Strict; + + elsif Chars (Argx) = Name_Minimized then + return Minimized; + + elsif Chars (Argx) = Name_Eliminated then + return Eliminated; + + else + raise Program_Error; + end if; + end Get_Overflow_Mode; + + -- Local variables + + Arg1 : constant Node_Id := First (Pragma_Argument_Associations (N)); + Arg2 : constant Node_Id := Next (Arg1); + + -- Start of processing for Set_Overflow_Mode + + begin + -- Process first argument + + Scope_Suppress.Overflow_Mode_General := + Get_Overflow_Mode (Arg1); + + -- Case of only one argument + + if No (Arg2) then + Scope_Suppress.Overflow_Mode_Assertions := + Scope_Suppress.Overflow_Mode_General; + + -- Case of two arguments present + + else + Scope_Suppress.Overflow_Mode_Assertions := + Get_Overflow_Mode (Arg2); + end if; + end Set_Overflow_Mode; + ------------------- -- Test_Case_Arg -- ------------------- @@ -32399,9 +32457,9 @@ package body Sem_Prag is return Empty; end Test_Case_Arg; - ----------------------------------------- + -------------------------------------------- -- Defer_Compile_Time_Warning_Error_To_BE -- - ----------------------------------------- + -------------------------------------------- procedure Defer_Compile_Time_Warning_Error_To_BE (N : Node_Id) is Arg1 : constant Node_Id := First (Pragma_Argument_Associations (N)); diff --git a/gcc/ada/sem_prag.ads b/gcc/ada/sem_prag.ads index 88c103a..5709b3d 100644 --- a/gcc/ada/sem_prag.ads +++ b/gcc/ada/sem_prag.ads @@ -530,6 +530,11 @@ package Sem_Prag is -- the value of the Interface_Name. Otherwise it is encoded as needed by -- particular operating systems. See the body for details of the encoding. + procedure Set_Overflow_Mode (N : Node_Id); + -- Sets Sem.Scope_Suppress according to the overflow modes specified in + -- the pragma Overflow_Mode passed in argument. This should only be called + -- after N has been successfully analyzed. + function Test_Case_Arg (Prag : Node_Id; Arg_Nam : Name_Id; |