From 40242256f156e91244d770ac422e6e244b99152b Mon Sep 17 00:00:00 2001 From: Simon Wright Date: Wed, 6 Dec 2017 09:42:57 +0000 Subject: [PATCH] re PR ada/66205 (gnatbind generates invalid code when finalization is enabled in restricted runtime) 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 | 6 ++++++ gcc/ada/bindgen.adb | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 2619b162c3a..3168ba48501 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2017-12-06 Simon Wright + + PR ada/66205 + * bindgen.adb (Gen_AdaFinal): If the restriction No_Task_Termination is + set, generate a null body. + 2017-12-05 Piotr Trojanek * sem_util.adb (Contains_Refined_State): Remove. diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb index e3d875bc8cc..44d521e8c46 100644 --- a/gcc/ada/bindgen.adb +++ b/gcc/ada/bindgen.adb @@ -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, -- 2.30.2