OSDN Git Service

PR c++/15871
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 17 Aug 2004 20:56:25 +0000 (20:56 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 17 Aug 2004 20:56:25 +0000 (20:56 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@86144 138bc75d-0d04-0410-961f-82ee72b054a4

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 8525cac..407ee87 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 7ccf881..92e5751 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 f21c926..302d00e 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 4eb1498..0cf590c 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 cd593dd..621d0cf 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) { }