[Ada] Pragma Linker_Section in subprogram instantiations in CCG
authorJavier Miranda <miranda@adacore.com>
Fri, 13 Dec 2019 09:05:03 +0000 (09:05 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Fri, 13 Dec 2019 09:05:03 +0000 (09:05 +0000)
2019-12-13  Javier Miranda  <miranda@adacore.com>

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

gcc/ada/ChangeLog
gcc/ada/sem_prag.adb

index 3ec76a28f3092cf8c6c68e5ddeac0b41d195c903..d135da8c1e737479a125dafc6771b39177ccec78 100644 (file)
@@ -1,3 +1,9 @@
+2019-12-13  Javier Miranda  <miranda@adacore.com>
+
+       * 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  <moy@adacore.com>
 
        * sem_util.adb (Original_Aspect_Pragma_Name): Go through
index d1d474775c5ab2dcb9c6c9b91379b9e06c6cc9ec..db4b1b4b055c8d394b244d2697f993d95ab45904 100644 (file)
@@ -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.