[Ada] Failure to detect trivial infinite recursion
authorHristian Kirtchev <kirtchev@adacore.com>
Fri, 5 Jul 2019 07:03:00 +0000 (07:03 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Fri, 5 Jul 2019 07:03:00 +0000 (07:03 +0000)
This patch includes delay statements in the set of control flow
statements since their expressions may have side effects, which in turn
may affect an infinite recursion.

2019-07-05  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* sem_res.adb (Is_Control_Flow_Statement): Delay statements
contain an expression, which in turn may have side effects and
affect the infinite recursion. As a result, delay statements
should not be treated specially.

From-SVN: r273118

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

index 65197d54c52955fa8e5ac7f9eb2da3f5613ece4a..9658895ee273b9fa7f3044f8f3ba83d3f67d0c5e 100644 (file)
@@ -1,3 +1,10 @@
+2019-07-05  Hristian Kirtchev  <kirtchev@adacore.com>
+
+       * sem_res.adb (Is_Control_Flow_Statement): Delay statements
+       contain an expression, which in turn may have side effects and
+       affect the infinite recursion. As a result, delay statements
+       should not be treated specially.
+
 2019-07-05  Arnaud Charlet  <charlet@adacore.com>
 
        * libgnarl/s-linux.ads, libgnarl/s-linux__alpha.ads,
index 8dc8eebcaf2edbec5f6b73de27bb1781eb41e833..b86e7cce4b697d9557190d32de16a33c0fb2fcfe 100644 (file)
@@ -816,19 +816,11 @@ package body Sem_Res is
 
       function Is_Control_Flow_Statement (N : Node_Id) return Boolean is
       begin
-         --  Delay statements do not affect the control flow because they
-         --  simply postpone the execution of all subsequent statements.
+         --  It is assumed that all statements may affect the control flow in
+         --  some way. A raise statement may be expanded into a non-statement
+         --  node.
 
-         if Nkind (N) in N_Delay_Statement then
-            return False;
-
-         --  Otherwise it is assumed that all other statements may affect the
-         --  control flow in some way. A raise statement may be expanded into
-         --  a non-statement node.
-
-         else
-            return Is_Statement (N) or else Is_Raise_Statement (N);
-         end if;
+         return Is_Statement (N) or else Is_Raise_Statement (N);
       end Is_Control_Flow_Statement;
 
       --------------------------------