diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 59d0a3f76aa..b16262327d8 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,11 @@ +2018-12-11 Ed Schonberg + + * exp_unst.adb (Register_Subprogram): A subprogram whose address + is taken (through attribute Address or Access) is reachable and + cannot be eliminated, even if there is no explicit call to it: + the address may be used in an indirect call or in some + address-related operation. + 2018-12-11 Ed Schonberg * sem_util.adb (Get_Actual_Subtype): Function can return type diff --git a/gcc/ada/exp_unst.adb b/gcc/ada/exp_unst.adb index f8c8fd56be1..a004b49d9eb 100644 --- a/gcc/ada/exp_unst.adb +++ b/gcc/ada/exp_unst.adb @@ -770,7 +770,8 @@ package body Exp_Unst is ((Ent => E, Bod => Bod, Lev => L, - Reachable => In_Synchronized_Unit (E), + Reachable => In_Synchronized_Unit (E) + or else Address_Taken (E), Uplevel_Ref => L, Declares_AREC => False, Uents => No_Elist,