[Ada] Do not issue restriction violations on ignored ghost code
authorYannick Moy <moy@adacore.com>
Mon, 16 Dec 2019 10:33:41 +0000 (10:33 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 16 Dec 2019 10:33:41 +0000 (10:33 +0000)
2019-12-16  Yannick Moy  <moy@adacore.com>

gcc/ada/

* exp_ch6.adb: Fix comment.
* sem_res.adb (Resolve_Call): Do not check No_Recursion
restriction or indirectly No_Secondary_Stack restriction, when
inside an ignored ghost subprogram.

From-SVN: r279419

gcc/ada/ChangeLog
gcc/ada/exp_ch6.adb
gcc/ada/sem_res.adb

index c86fd3f9dbfe7d93cb7de5d7e6fba4794291df4d..e1952da7941fff74925fc445f863b956f9521f29 100644 (file)
@@ -1,3 +1,10 @@
+2019-12-16  Yannick Moy  <moy@adacore.com>
+
+       * exp_ch6.adb: Fix comment.
+       * sem_res.adb (Resolve_Call): Do not check No_Recursion
+       restriction or indirectly No_Secondary_Stack restriction, when
+       inside an ignored ghost subprogram.
+
 2019-12-16  Arnaud Charlet  <charlet@adacore.com>
 
        * impunit.adb: Add a-nbnbin, a-nbnbre, a-nubinu to Ada 2020
index 62934c3d44e2de6373a9189d84443698bb2b39b9..b50e5d0127ca4271879e804939e88c5d1815a334 100644 (file)
@@ -6934,8 +6934,8 @@ package body Exp_Ch6 is
       elsif Is_Thunk (Current_Scope) and then Is_Incomplete_Type (Exptyp) then
          return;
 
-      --  A return statement from a Ghost function does not use the secondary
-      --  stack (or any other one).
+      --  A return statement from an ignored Ghost function does not use the
+      --  secondary stack (or any other one).
 
       elsif not Requires_Transient_Scope (R_Type)
         or else Is_Ignored_Ghost_Entity (Scope_Id)
index 2628a5ab8e5d7f1ba4740ca24c1acd50dea564ae..32d9fadac07969aed2c4d3414e1ce6f976954974 100644 (file)
@@ -6675,7 +6675,9 @@ package body Sem_Res is
                   --  checkable, the case of calling an immediately containing
                   --  subprogram is easy to catch.
 
-                  Check_Restriction (No_Recursion, N);
+                  if not Is_Ignored_Ghost_Entity (Nam) then
+                     Check_Restriction (No_Recursion, N);
+                  end if;
 
                   --  If the recursive call is to a parameterless subprogram,
                   --  then even if we can't statically detect infinite
@@ -6820,9 +6822,13 @@ package body Sem_Res is
       then
          null;
 
+      --  A return statement from an ignored Ghost function does not use the
+      --  secondary stack (or any other one).
+
       elsif Expander_Active
         and then Ekind_In (Nam, E_Function, E_Subprogram_Type)
         and then Requires_Transient_Scope (Etype (Nam))
+        and then not Is_Ignored_Ghost_Entity (Nam)
       then
          Establish_Transient_Scope (N, Manage_Sec_Stack => True);