From: Ed Schonberg Date: Tue, 29 May 2018 09:42:29 +0000 (+0000) Subject: [Ada] Unnesting: handle statement sequences that include an At_End handler X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=999acab61b42c6641f7be13aa6a6452587106d43;p=gcc.git [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 --- 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