[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Wed, 25 Nov 2015 15:30:09 +0000 (16:30 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 25 Nov 2015 15:30:09 +0000 (16:30 +0100)
2015-11-25  Eric Botcazou  <ebotcazou@adacore.com>

* gnatlink.adb (Gnatlink): Do not reinstate -fsjlj for the linker
from the switches saved in the ALI file but from the exception
settings.

2015-11-25  Arnaud Charlet  <charlet@adacore.com>

* lib-xref-spark_specific.adb
(Add_SPARK_Scope): Take entry families into account.
* a-exetim.ads, a-exetim-default.ads, a-exetim-mingw.ads (Clock,
Clock_For_Interrupts): preconditions added.
* a-extiin.ads (Clock): preconditions added.
* par-ch3.adb (P_Declarative_Items): In case of misplaced
aspect specifications, ensure that flag Done is properly set to
continue parsing.

From-SVN: r230879

gcc/ada/ChangeLog
gcc/ada/a-exetim-default.ads
gcc/ada/a-exetim-mingw.ads
gcc/ada/a-exetim.ads
gcc/ada/a-extiin.ads
gcc/ada/gnatlink.adb
gcc/ada/lib-xref-spark_specific.adb
gcc/ada/par-ch3.adb

index db50698b443891b62bffe30006fbf838515a8b14..d7df276aa1a2ee77a5823b81eee0d5661aae0928 100644 (file)
@@ -1,3 +1,20 @@
+2015-11-25  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnatlink.adb (Gnatlink): Do not reinstate -fsjlj for the linker
+       from the switches saved in the ALI file but from the exception
+       settings.
+
+2015-11-25  Arnaud Charlet  <charlet@adacore.com>
+
+       * lib-xref-spark_specific.adb
+       (Add_SPARK_Scope): Take entry families into account.
+       * a-exetim.ads, a-exetim-default.ads, a-exetim-mingw.ads (Clock,
+       Clock_For_Interrupts): preconditions added.
+       * a-extiin.ads (Clock): preconditions added.
+       * par-ch3.adb (P_Declarative_Items): In case of misplaced
+       aspect specifications, ensure that flag Done is properly set to
+       continue parsing.
+
 2015-11-25  Arnaud Charlet  <charlet@adacore.com>
 
        * exp_util.adb (Remove_Side_Effects): Minimize extra temporaries
index 5877fc535fe6bcd96c9129a9ee1d01118cbd441b..50b9bc50fab55d71d07a45cd9ad1389c935b21a3 100644 (file)
@@ -47,13 +47,16 @@ is
    CPU_Time_Unit  : constant := Ada.Real_Time.Time_Unit;
    CPU_Tick       : constant Ada.Real_Time.Time_Span;
 
+   use type Ada.Task_Identification.Task_Id;
+
    function Clock
      (T : Ada.Task_Identification.Task_Id :=
         Ada.Task_Identification.Current_Task)
       return CPU_Time
    with
      Volatile_Function,
-     Global => Ada.Real_Time.Clock_Time;
+     Global => Ada.Real_Time.Clock_Time,
+     Pre    => T /= Ada.Task_Identification.Null_Task_Id;
 
    function "+"
      (Left  : CPU_Time;
@@ -105,9 +108,12 @@ is
    Interrupt_Clocks_Supported          : constant Boolean := False;
    Separate_Interrupt_Clocks_Supported : constant Boolean := False;
 
+   pragma Warnings (Off, "check will fail at run time");
    function Clock_For_Interrupts return CPU_Time with
      Volatile_Function,
-     Global => Ada.Real_Time.Clock_Time;
+     Global => Ada.Real_Time.Clock_Time,
+     Pre    => Interrupt_Clocks_Supported;
+   pragma Warnings (On, "check will fail at run time");
 
 private
    pragma SPARK_Mode (Off);
index 8e1e764e50bf5411112380fa48904a6a4eb380b0..5ba3e08c386683f0d0cb7b1208946e11d3df9d9c 100644 (file)
@@ -49,13 +49,16 @@ is
    CPU_Time_Unit  : constant := 0.000001;
    CPU_Tick       : constant Ada.Real_Time.Time_Span;
 
+   use type Ada.Task_Identification.Task_Id;
+
    function Clock
      (T : Ada.Task_Identification.Task_Id :=
         Ada.Task_Identification.Current_Task)
       return CPU_Time
    with
      Volatile_Function,
-     Global => Ada.Real_Time.Clock_Time;
+     Global => Ada.Real_Time.Clock_Time,
+     Pre    => T /= Ada.Task_Identification.Null_Task_Id;
 
    function "+"
      (Left  : CPU_Time;
@@ -105,9 +108,12 @@ is
    Interrupt_Clocks_Supported          : constant Boolean := False;
    Separate_Interrupt_Clocks_Supported : constant Boolean := False;
 
+   pragma Warnings (Off, "check will fail at run time");
    function Clock_For_Interrupts return CPU_Time with
      Volatile_Function,
-     Global => Ada.Real_Time.Clock_Time;
+     Global => Ada.Real_Time.Clock_Time,
+     Pre    => Interrupt_Clocks_Supported;
+   pragma Warnings (On, "check will fail at run time");
 
 private
    pragma SPARK_Mode (Off);
index 951c3ed09e9a7f79a8894fb2fc0c12934e79712c..d75b6befb6f7dd90622a5b2413025ffa35c5ea91 100644 (file)
@@ -38,13 +38,16 @@ is
    CPU_Time_Unit  : constant := 0.000001;
    CPU_Tick       : constant Ada.Real_Time.Time_Span;
 
+   use type Ada.Task_Identification.Task_Id;
+
    function Clock
      (T : Ada.Task_Identification.Task_Id :=
         Ada.Task_Identification.Current_Task)
       return CPU_Time
    with
      Volatile_Function,
-     Global => Ada.Real_Time.Clock_Time;
+     Global => Ada.Real_Time.Clock_Time,
+     Pre    => T /= Ada.Task_Identification.Null_Task_Id;
 
    function "+"
      (Left  : CPU_Time;
@@ -96,9 +99,12 @@ is
    Interrupt_Clocks_Supported          : constant Boolean := False;
    Separate_Interrupt_Clocks_Supported : constant Boolean := False;
 
+   pragma Warnings (Off, "check will fail at run time");
    function Clock_For_Interrupts return CPU_Time with
      Volatile_Function,
-     Global => Ada.Real_Time.Clock_Time;
+     Global => Ada.Real_Time.Clock_Time,
+     Pre    => Interrupt_Clocks_Supported;
+   pragma Warnings (On, "check will fail at run time");
 
 private
    pragma SPARK_Mode (Off);
index e35c32df37d8c3273ab6c4b9c275e47491de9756..a4edb8f28e7600f9cadd5ca1047c52cca9af88b1 100644 (file)
@@ -25,7 +25,8 @@ is
    function Clock (Interrupt : Ada.Interrupts.Interrupt_ID) return CPU_Time
    with
      Volatile_Function,
-     Global => Ada.Real_Time.Clock_Time;
+     Global => Ada.Real_Time.Clock_Time,
+     Pre    => Separate_Interrupt_Clocks_Supported;
 
    function Supported (Interrupt : Ada.Interrupts.Interrupt_ID) return Boolean
    with
index 67b07b23e3cff61474717620ff3a68ac04094e41..0d190eb1a31111849febb75d6dc4f2c9195f2d3e 100644 (file)
@@ -1588,6 +1588,16 @@ begin
                   end if;
                end;
             end loop;
+
+            --  Pass -fsjlj to the linker with back-end SJLJ exceptions
+
+            if not ALIs.Table (A).Frontend_Exceptions
+              and then not ALIs.Table (A).Zero_Cost_Exceptions
+            then
+               Linker_Options.Increment_Last;
+               Linker_Options.Table
+                (Linker_Options.Last) := new String'("-fsjlj");
+            end if;
          end if;
       end;
    end if;
index b570725369ce7224eb1c5c308c7db9ec5fae60c5..c857b0f6944a266a801705c86b9b44e7b93daead 100644 (file)
@@ -260,6 +260,7 @@ package body SPARK_Specific is
 
       case Ekind (E) is
          when E_Entry
+            | E_Entry_Family
             | E_Function
             | E_Generic_Function
             | E_Generic_Package
@@ -330,7 +331,7 @@ package body SPARK_Specific is
 
       function Is_SPARK_Scope (E : Entity_Id) return Boolean;
       --  Return whether the entity or reference scope meets requirements for
-      --  being an SPARK scope.
+      --  being a SPARK scope.
 
       function Lt (Op1 : Natural; Op2 : Natural) return Boolean;
       --  Comparison function for Sort call
index 5859bcea05b8ffae1d9a17f2bbf171a4dfb66d3b..3863c5a56f3db62a5b9b9715a1ed00999eccd767 100644 (file)
@@ -4441,13 +4441,13 @@ package body Ch3 is
 
                else
                   Error_Msg_SC ("aspect specifications not allowed here");
+               end if;
 
-                  --  Assume that this is a misplaced aspect specification
-                  --  within a declarative list. After discarding the
-                  --  misplaced aspects we can continue the scan.
+               --  Assume that this is a misplaced aspect specification within
+               --  a declarative list. After discarding the misplaced aspects
+               --  we can continue the scan.
 
-                  Done := False;
-               end if;
+               Done := False;
 
                declare
                   Dummy_Node : constant Node_Id :=