Fix PR68002, add -fkeep-static-functions
authorJoost VandeVondele <vondele@gcc.gnu.org>
Mon, 19 Oct 2015 10:24:37 +0000 (10:24 +0000)
committerJoost VandeVondele <vondele@gcc.gnu.org>
Mon, 19 Oct 2015 10:24:37 +0000 (10:24 +0000)
gcc/ChangeLog:

2015-10-17  Joost VandeVondele  <vondele@gnu.gcc.org>

        PR middle-end/68002
        * common.opt (fkeep-static-functions): New option.
        * doc/invoke.texi: Document it.
        * cgraphunit.c (cgraph_node::finalize_function): Use it.

gcc/testsuite/ChangeLog:

2015-10-17  Joost VandeVondele  <vondele@gnu.gcc.org>

        PR middle-end/68002
        * gcc.dg/PR68002.c: New test.

From-SVN: r228965

gcc/ChangeLog
gcc/cgraphunit.c
gcc/common.opt
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/PR68002.c [new file with mode: 0644]

index c9a1a11ca085af21590898c18d3f09fa99191ea3..43d6a3f83bf0b0054896af0ae3f2c2a20a42bd94 100644 (file)
@@ -1,3 +1,10 @@
+2015-10-19  Joost VandeVondele  <vondele@gnu.gcc.org>
+
+       PR middle-end/68002
+       * common.opt (fkeep-static-functions): New option.
+       * doc/invoke.texi: Document it.
+       * cgraphunit.c (cgraph_node::finalize_function): Use it.
+
 2015-10-19  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * sched-int.h (struct autopref_multipass_data_): Remove offset
index 04a4d3f110088adcd86b50c60618a1a4725fa233..0b0c0f4b6f49c9e071f79545d98c21580f9cfe8b 100644 (file)
@@ -451,7 +451,7 @@ cgraph_node::finalize_function (tree decl, bool no_collect)
      declared inline and nested functions.  These were optimized out
      in the original implementation and it is unclear whether we want
      to change the behavior here.  */
-  if ((!opt_for_fn (decl, optimize)
+  if (((!opt_for_fn (decl, optimize) || flag_keep_static_functions)
        && !node->cpp_implicit_alias
        && !DECL_DISREGARD_INLINE_LIMITS (decl)
        && !DECL_DECLARED_INLINE_P (decl)
index 50602082173b2a96d422561ed391b2e3ea7ab718..224d3ad7fbd2517a2b416df1c423f3a6231487ad 100644 (file)
@@ -1589,6 +1589,10 @@ fkeep-inline-functions
 Common Report Var(flag_keep_inline_functions)
 Generate code for functions even if they are fully inlined
 
+fkeep-static-functions
+Common Report Var(flag_keep_static_functions)
+Generate code for static functions even if they are never called 
+
 fkeep-static-consts
 Common Report Var(flag_keep_static_consts) Init(1)
 Emit static const variables even if they are not used
index 54e9f12863416816f0267fae1ec3f3903aedc559..dba4023036000763da6bf441299e028aa9faf439 100644 (file)
@@ -410,8 +410,8 @@ Objective-C and Objective-C++ Dialects}.
 -fira-loop-pressure -fno-ira-share-save-slots @gol
 -fno-ira-share-spill-slots -fira-verbose=@var{n} @gol
 -fisolate-erroneous-paths-dereference -fisolate-erroneous-paths-attribute @gol
--fivopts -fkeep-inline-functions -fkeep-static-consts @gol
--flive-range-shrinkage @gol
+-fivopts -fkeep-inline-functions -fkeep-static-functions @gol
+-fkeep-static-consts -flive-range-shrinkage @gol
 -floop-block -floop-interchange -floop-strip-mine @gol
 -floop-unroll-and-jam -floop-nest-optimize @gol
 -floop-parallelize-all -flra-remat -flto -flto-compression-level @gol
@@ -8013,6 +8013,11 @@ of its callers.  This switch does not affect functions using the
 @code{extern inline} extension in GNU C90@.  In C++, emit any and all
 inline functions into the object file.
 
+@item -fkeep-static-functions
+@optindex fkeep-static-functions
+Emit @code{static} functions into the object file, even if the function
+is never used.
+
 @item -fkeep-static-consts
 @opindex fkeep-static-consts
 Emit variables declared @code{static const} when optimization isn't turned
index 380297d91fb43476b83f62336494a4c191164326..874632de3b2064c4027549c81559d653322e6c5f 100644 (file)
@@ -1,3 +1,8 @@
+2015-10-17  Joost VandeVondele  <vondele@gnu.gcc.org>
+
+       PR middle-end/68002
+       * gcc.dg/PR68002.c: New test.
+
 2015-10-19  Richard Sandiford  <richard.sandiford@arm.com>
 
        * gcc.dg/builtins-20.c: Remove undefined behavior.
diff --git a/gcc/testsuite/gcc.dg/PR68002.c b/gcc/testsuite/gcc.dg/PR68002.c
new file mode 100644 (file)
index 0000000..b61b095
--- /dev/null
@@ -0,0 +1,7 @@
+/* Ensure static functions can be kept.  */
+/* { dg-do compile } */
+/* { dg-options "-O1 -fkeep-static-functions" } */
+
+static void bar () { }
+
+/* { dg-final { scan-assembler "bar" } } */