From: Javier Miranda Date: Fri, 13 Dec 2019 09:05:03 +0000 (+0000) Subject: [Ada] Pragma Linker_Section in subprogram instantiations in CCG X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=48f05f09e6791abe2080466f968c2cc27c401028;p=gcc.git [Ada] Pragma Linker_Section in subprogram instantiations in CCG 2019-12-13 Javier Miranda gcc/ada/ * sem_prag.adb (Analyze_Pragma): Propagate the Linker_Section_Attribute to the ultimate alias of the subprogram to facilitate the C backend processing this attribute. From-SVN: r279360 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 3ec76a28f30..d135da8c1e7 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2019-12-13 Javier Miranda + + * sem_prag.adb (Analyze_Pragma): Propagate the + Linker_Section_Attribute to the ultimate alias of the subprogram + to facilitate the C backend processing this attribute. + 2019-12-13 Yannick Moy * sem_util.adb (Original_Aspect_Pragma_Name): Go through diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index d1d474775c5..db4b1b4b055 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -19188,6 +19188,17 @@ package body Sem_Prag is Set_Linker_Section_Pragma (Entity (Corresponding_Aspect (N)), N); + -- Propagate it to its ultimate aliased entity to + -- facilitate the backend processing this attribute + -- in instantiations of generic subprograms. + + if Present (Alias (Entity (Corresponding_Aspect (N)))) + then + Set_Linker_Section_Pragma + (Ultimate_Alias + (Entity (Corresponding_Aspect (N))), N); + end if; + -- Pragma case, we must climb the homonym chain, but skip -- any for which the linker section is already set. @@ -19196,6 +19207,15 @@ package body Sem_Prag is if No (Linker_Section_Pragma (Ent)) then Set_Linker_Section_Pragma (Ent, N); + -- Propagate it to its ultimate aliased entity to + -- facilitate the backend processing this attribute + -- in instantiations of generic subprograms. + + if Present (Alias (Ent)) then + Set_Linker_Section_Pragma + (Ultimate_Alias (Ent), N); + end if; + -- A pragma that applies to a Ghost entity becomes -- Ghost for the purposes of legality checks and -- removal of ignored Ghost code.