From 999acab61b42c6641f7be13aa6a6452587106d43 Mon Sep 17 00:00:00 2001 From: Ed Schonberg Date: Tue, 29 May 2018 09:42:29 +0000 Subject: [PATCH] [Ada] Unnesting: handle statement sequences that include an At_End handler 2018-05-29 Ed Schonberg gcc/ada/ * exp_unst.adb (Visit_Node): Handle statement sequences that include an At_End handler. From-SVN: r260885 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/exp_unst.adb | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 0d478b01bb1..ec135506857 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2018-05-29 Ed Schonberg + + * exp_unst.adb (Visit_Node): Handle statement sequences that include an + At_End handler. + 2018-05-29 Eric Botcazou * repinfo.adb (List_Entities): Also recurse into blocks without label. diff --git a/gcc/ada/exp_unst.adb b/gcc/ada/exp_unst.adb index b1383f9546c..38e32cb7ef1 100644 --- a/gcc/ada/exp_unst.adb +++ b/gcc/ada/exp_unst.adb @@ -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 -- 2.30.2