[Ada] Unnesting: handle statement sequences that include an At_End handler
authorEd Schonberg <schonberg@adacore.com>
Tue, 29 May 2018 09:42:29 +0000 (09:42 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 29 May 2018 09:42:29 +0000 (09:42 +0000)
2018-05-29  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_unst.adb (Visit_Node): Handle statement sequences that include an
At_End handler.

From-SVN: r260885

gcc/ada/ChangeLog
gcc/ada/exp_unst.adb

index 0d478b01bb1d179295591eec278f7d7a8528315e..ec135506857e6b9b1f41d7a2e7f2b39e002b6c7d 100644 (file)
@@ -1,3 +1,8 @@
+2018-05-29  Ed Schonberg  <schonberg@adacore.com>
+
+       * exp_unst.adb (Visit_Node): Handle statement sequences that include an
+       At_End handler.
+
 2018-05-29  Eric Botcazou  <ebotcazou@adacore.com>
 
        * repinfo.adb (List_Entities): Also recurse into blocks without label.
index b1383f9546c221022c21ce9af65068dbe27e7ff3..38e32cb7ef14feb112e636d4a476316ada68a5b2 100644 (file)
@@ -676,6 +676,16 @@ package body Exp_Unst is
                   end loop;
                end;
 
+            elsif Nkind (N) = N_Handled_Sequence_Of_Statements
+              and then Present (At_End_Proc (N))
+            then
+
+               --  An At_End_Proc means there's a call from this block
+               --  to that subprogram.
+
+               Append_Unique_Call ((N, Current_Subprogram,
+                                     Entity (At_End_Proc (N))));
+
             --  Handle a 'Access as a (potential) call
 
             elsif Nkind (N) = N_Attribute_Reference then
@@ -850,10 +860,10 @@ package body Exp_Unst is
                  and then Chars (Enclosing_Subprogram (Ent)) /= Name_uParent
                  and then
 
-                   --  Constants, variables and exceptions are potentially
+                   --  Constants and variables are potentially
                    --  uplevel references to global declarations.
 
-                   (Ekind_In (Ent, E_Constant, E_Exception, E_Variable)
+                   (Ekind_In (Ent, E_Constant, E_Variable)
 
                      --  Formals are interesting, but not if being used as mere
                      --  names of parameters for name notation calls.
@@ -1817,6 +1827,7 @@ package body Exp_Unst is
          begin
             if Present (STT.ARECnF)
               and then Nkind (CTJ.N) /= N_Attribute_Reference
+              and then Nkind (CTJ.N) /= N_Handled_Sequence_Of_Statements
             then
                --  CTJ.N is a call to a subprogram which may require a pointer
                --  to an activation record. The subprogram containing the call