[Ada] Do not consider inlined subprograms when generating C code
authorArnaud Charlet <charlet@adacore.com>
Wed, 3 Jul 2019 08:13:55 +0000 (08:13 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 3 Jul 2019 08:13:55 +0000 (08:13 +0000)
2019-07-03  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* sem_ch7.adb (Has_Referencer): Do not consider inlined
subprograms when generating C code, which allows us to generate
static inline subprograms.

From-SVN: r272964

gcc/ada/ChangeLog
gcc/ada/sem_ch7.adb

index 879b776d0b4e8374f7046f470f343c221de96100..d1b11cee9e2fd7991a467ccbb0c2f92b64bdf664 100644 (file)
@@ -1,3 +1,9 @@
+2019-07-03  Arnaud Charlet  <charlet@adacore.com>
+
+       * sem_ch7.adb (Has_Referencer): Do not consider inlined
+       subprograms when generating C code, which allows us to generate
+       static inline subprograms.
+
 2019-07-03  Justin Squirek  <squirek@adacore.com>
 
        * sem_ch6.adb (Check_Conformance): Add expression checking for
index 2ed2746dd620334c6e0bf77656a6f69965adfe05..a1b98f03240969df3aa89e05ff4d0b3f8b09c278 100644 (file)
@@ -389,6 +389,8 @@ package body Sem_Ch7 is
                      end if;
 
                      --  An inlined subprogram body acts as a referencer
+                     --  unless we generate C code since inlining is then
+                     --  handled by the C compiler.
 
                      --  Note that we test Has_Pragma_Inline here in addition
                      --  to Is_Inlined. We are doing this for a client, since
@@ -397,8 +399,9 @@ package body Sem_Ch7 is
                      --  should occur, so we need to catch all cases where the
                      --  subprogram may be inlined by the client.
 
-                     if Is_Inlined (Decl_Id)
-                       or else Has_Pragma_Inline (Decl_Id)
+                     if not Generate_C_Code
+                       and then (Is_Inlined (Decl_Id)
+                                 or else Has_Pragma_Inline (Decl_Id))
                      then
                         Has_Referencer_Of_Non_Subprograms := True;
 
@@ -415,9 +418,12 @@ package body Sem_Ch7 is
                      Decl_Id := Defining_Entity (Decl);
 
                      --  An inlined subprogram body acts as a referencer
+                     --  unless we generate C code since inlining is then
+                     --  handled by the C compiler.
 
-                     if Is_Inlined (Decl_Id)
-                       or else Has_Pragma_Inline (Decl_Id)
+                     if not Generate_C_Code
+                       and then (Is_Inlined (Decl_Id)
+                                 or else Has_Pragma_Inline (Decl_Id))
                      then
                         Has_Referencer_Of_Non_Subprograms := True;