re PR ada/66205 (gnatbind generates invalid code when finalization is enabled in...
authorSimon Wright <simon@pushface.org>
Wed, 6 Dec 2017 09:42:57 +0000 (09:42 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 6 Dec 2017 09:42:57 +0000 (09:42 +0000)
PR ada/66205
* bindgen.adb (Gen_AdaFinal): If the restriction No_Task_Termination is
set, generate a null body.

From-SVN: r255441

gcc/ada/ChangeLog
gcc/ada/bindgen.adb

index 2619b16..3168ba4 100644 (file)
@@ -1,3 +1,9 @@
+2017-12-06  Simon Wright  <simon@pushface.org>
+
+       PR ada/66205
+       * bindgen.adb (Gen_AdaFinal): If the restriction No_Task_Termination is
+       set, generate a null body.
+
 2017-12-05  Piotr Trojanek  <trojanek@adacore.com>
 
        * sem_util.adb (Contains_Refined_State): Remove.
index e3d875b..44d521e 100644 (file)
@@ -450,6 +450,18 @@ package body Bindgen is
    begin
       WBI ("   procedure " & Ada_Final_Name.all & " is");
 
+      --  If task termination is not allowed, as is the case in restricted
+      --  runtimes, such as Ravenscar or ZFP, but may not be the case for all
+      --  configurable runtimes, we do not need program-level finalization.
+
+      if Cumulative_Restrictions.Set (No_Task_Termination) then
+         WBI ("   begin");
+         WBI ("      null;");
+         WBI ("   end " & Ada_Final_Name.all & ";");
+         WBI ("");
+         return;
+      end if;
+
       --  Call s_stalib_adafinal to await termination of tasks and so on. We
       --  want to do this if there is a main program, either in Ada or in some
       --  other language. (Note that Bind_Main_Program is True for Ada mains,