[Ada] Inconsistent scope chain due to quantified expression
authorHristian Kirtchev <kirtchev@adacore.com>
Thu, 11 Jan 2018 08:50:18 +0000 (08:50 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 11 Jan 2018 08:50:18 +0000 (08:50 +0000)
This patch corrects the minor decoration performed on invariant procedures in
case the procedure is not inserted into the tree and analyzed. The decoration
now constructs a proper first/next/last entity chain containing the single
formal parameter which represents the object of the related type. The chain
then ensures that any other entities generated by the [pre]analysis of the
invariant expression will be properly added to the chain.

The issue was discovered during the development of the GNATprove tool and
is not visible to end users. No simple test is available because this would
require a debug session.

2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* exp_util.adb (Build_Invariant_Procedure_Declaration): Set the last
entity of the generated invariant procedure in order to construct a
proper entity chain.

From-SVN: r256483

gcc/ada/ChangeLog
gcc/ada/exp_util.adb

index 88e6ed58c77e478aa793d512569ab3bf6bc1ced3..88e2ee247370f00cf5008bdb4b19588efd24f2e7 100644 (file)
@@ -1,3 +1,9 @@
+2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>
+
+       * exp_util.adb (Build_Invariant_Procedure_Declaration): Set the last
+       entity of the generated invariant procedure in order to construct a
+       proper entity chain.
+
 2018-01-11  Piotr Trojanek  <trojanek@adacore.com>
 
        * sem_ch13.adb (Build_Predicate_Functions): Fix minor issues in
index f768e201e93c1ee2a6fdf077725aa94c4b0a2bf4..9ccaa78bc5ddcf98cb1f844de4c7d5b21b948662 100644 (file)
@@ -3466,6 +3466,7 @@ package body Exp_Util is
       Set_Scope (Obj_Id, Proc_Id);
 
       Set_First_Entity (Proc_Id, Obj_Id);
+      Set_Last_Entity  (Proc_Id, Obj_Id);
 
       --  Generate:
       --    procedure <Work_Typ>[Partial_]Invariant (_object : <Obj_Typ>);