Commit 787da5fd by Joost VandeVondele

Fix PR68002, add -fkeep-static-functions

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
parent 9c99fe75
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> 2015-10-19 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* sched-int.h (struct autopref_multipass_data_): Remove offset * sched-int.h (struct autopref_multipass_data_): Remove offset
...@@ -451,7 +451,7 @@ cgraph_node::finalize_function (tree decl, bool no_collect) ...@@ -451,7 +451,7 @@ cgraph_node::finalize_function (tree decl, bool no_collect)
declared inline and nested functions. These were optimized out declared inline and nested functions. These were optimized out
in the original implementation and it is unclear whether we want in the original implementation and it is unclear whether we want
to change the behavior here. */ 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 && !node->cpp_implicit_alias
&& !DECL_DISREGARD_INLINE_LIMITS (decl) && !DECL_DISREGARD_INLINE_LIMITS (decl)
&& !DECL_DECLARED_INLINE_P (decl) && !DECL_DECLARED_INLINE_P (decl)
......
...@@ -1589,6 +1589,10 @@ fkeep-inline-functions ...@@ -1589,6 +1589,10 @@ fkeep-inline-functions
Common Report Var(flag_keep_inline_functions) Common Report Var(flag_keep_inline_functions)
Generate code for functions even if they are fully inlined 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 fkeep-static-consts
Common Report Var(flag_keep_static_consts) Init(1) Common Report Var(flag_keep_static_consts) Init(1)
Emit static const variables even if they are not used Emit static const variables even if they are not used
......
...@@ -410,8 +410,8 @@ Objective-C and Objective-C++ Dialects}. ...@@ -410,8 +410,8 @@ Objective-C and Objective-C++ Dialects}.
-fira-loop-pressure -fno-ira-share-save-slots @gol -fira-loop-pressure -fno-ira-share-save-slots @gol
-fno-ira-share-spill-slots -fira-verbose=@var{n} @gol -fno-ira-share-spill-slots -fira-verbose=@var{n} @gol
-fisolate-erroneous-paths-dereference -fisolate-erroneous-paths-attribute @gol -fisolate-erroneous-paths-dereference -fisolate-erroneous-paths-attribute @gol
-fivopts -fkeep-inline-functions -fkeep-static-consts @gol -fivopts -fkeep-inline-functions -fkeep-static-functions @gol
-flive-range-shrinkage @gol -fkeep-static-consts -flive-range-shrinkage @gol
-floop-block -floop-interchange -floop-strip-mine @gol -floop-block -floop-interchange -floop-strip-mine @gol
-floop-unroll-and-jam -floop-nest-optimize @gol -floop-unroll-and-jam -floop-nest-optimize @gol
-floop-parallelize-all -flra-remat -flto -flto-compression-level @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 ...@@ -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 @code{extern inline} extension in GNU C90@. In C++, emit any and all
inline functions into the object file. 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 @item -fkeep-static-consts
@opindex fkeep-static-consts @opindex fkeep-static-consts
Emit variables declared @code{static const} when optimization isn't turned Emit variables declared @code{static const} when optimization isn't turned
......
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> 2015-10-19 Richard Sandiford <richard.sandiford@arm.com>
* gcc.dg/builtins-20.c: Remove undefined behavior. * gcc.dg/builtins-20.c: Remove undefined behavior.
......
/* Ensure static functions can be kept. */
/* { dg-do compile } */
/* { dg-options "-O1 -fkeep-static-functions" } */
static void bar () { }
/* { dg-final { scan-assembler "bar" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment