re PR c++/15871 (g++ does not honour -fkeep-inline-functions)
authorMark Mitchell <mark@codesourcery.com>
Tue, 17 Aug 2004 20:56:25 +0000 (20:56 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Tue, 17 Aug 2004 20:56:25 +0000 (20:56 +0000)
PR c++/15871
* semantics.c (expand_or_defer_fn): Honor -fkeep-inline-functions.

PR c++/15871
* doc/invoke.texi (-fkeep-inline-functions): Update documentation.

PR c++/15871
* g++.dg/opt/inline8.C: New test.

From-SVN: r86144

gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/semantics.c
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/inline8.C [new file with mode: 0644]

index 8525cace914bab76cbcd08351b13456297a17199..407ee87b94d3092a5a4bc3c6f413ad9c1f55b42c 100644 (file)
@@ -1,3 +1,8 @@
+2004-08-17  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/15871
+       * doc/invoke.texi (-fkeep-inline-functions): Update documentation.
+
 2004-08-17  Robert Bowdidge  <bowdidge@apple.com>
   
         * config/rs6000/x-darwin: Add -mdynamic-no-pic to gcc build flags.
index 7ccf881bd5417ed3afca783dbfc339aa9b6a9b8b..92e5751840cd1291939d5bbd3ad0f404755e21ad 100644 (file)
@@ -1,5 +1,8 @@
 2004-08-17  Mark Mitchell  <mark@codesourcery.com>
 
+       PR c++/15871
+       * semantics.c (expand_or_defer_fn): Honor -fkeep-inline-functions.
+
        PR c++/16965
        * cp-tree.h (qualified_name_lookup_error): Add parameter.
        * name-lookup.c (do_class_using_decl): Restrict set of entities
index f21c926d1dd2c08f9c37a096a612c45dfb96b556..302d00ecc779b3367e60becc8e170942ab982e8c 100644 (file)
@@ -2959,7 +2959,7 @@ expand_or_defer_fn (tree fn)
   /* We make a decision about linkage for these functions at the end
      of the compilation.  Until that point, we do not want the back
      end to output them -- but we do want it to see the bodies of
-     these fucntions so that it can inline them as appropriate.  */
+     these functions so that it can inline them as appropriate.  */
   if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
     {
       if (!at_eof)
@@ -2970,6 +2970,12 @@ expand_or_defer_fn (tree fn)
        }
       else
        import_export_decl (fn);
+
+      /* If the user wants us to keep all inline functions, then mark
+        this function as needed so that finish_file will make sure to
+        output it later.  */
+      if (flag_keep_inline_functions && DECL_DECLARED_INLINE_P (fn))
+       mark_needed (fn);
     }
 
   /* There's no reason to do any of the work here if we're only doing
index 4eb1498ddca49d44dbba0c13bd2e8325b1a876e7..0cf590c231932debd92e11686f8fd00f88f62180 100644 (file)
@@ -4055,10 +4055,11 @@ release to an another.
 
 @item -fkeep-inline-functions
 @opindex fkeep-inline-functions
-Even if all calls to a given function are integrated, and the function
-is declared @code{static}, nevertheless output a separate run-time
-callable version of the function.  This switch does not affect
-@code{extern inline} functions.
+In C, emit @code{static} functions that are declared @code{inline}
+into the object file, even if the function has been inlined into all
+of its callers.  This switch does not affect functions using the
+@code{extern inline} extension in GNU C.  In C++, emit any and all
+inline functions into the object file.
 
 @item -fkeep-static-consts
 @opindex fkeep-static-consts
index cd593ddcc7244ac754ade69a1b5a927dfe590289..621d0cf2969a9b2be56d009e37ef8c87fa9848f1 100644 (file)
@@ -1,5 +1,8 @@
 2004-08-17  Mark Mitchell  <mark@codesourcery.com>
 
+       PR c++/15871
+       * g++.dg/opt/inline8.C: New test.
+
        PR c++/16965
        * g++.dg/parse/error17.C: New test.
        
diff --git a/gcc/testsuite/g++.dg/opt/inline8.C b/gcc/testsuite/g++.dg/opt/inline8.C
new file mode 100644 (file)
index 0000000..b2ca021
--- /dev/null
@@ -0,0 +1,5 @@
+// PR c++/15871
+// { dg-options "-O2 -fkeep-inline-functions" }
+// { dg-final { scan-assembler "foo" } }
+
+inline void foo(void) { }