The isolate-paths pass is activated by various -f flags, but also by -Wnull-dereference. Most of its codegen changes are conditioned on at least one of the -f flags, but those that detect, warn about and isolate paths that return the address of local variables are enabled even if the pass is activated only by -Wnull-dereference.
-W flags should not cause codegen changes, so this patch makes the codegen changes conditional on the presence of any of the -f flags that activate the pass. Should we have a separate option to activate only this kind of transformation? Regstrapped on x86_64- and i686-linux-gnu. Ok to install? for gcc/ChangeLog * gimple-ssa-isolate-paths.c (find_implicit_erroneous_behavior): Do not change code if the pass is running for warnings only. (find_explicit_erroneous_behavior): Likewise. --- gcc/gimple-ssa-isolate-paths.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/gcc/gimple-ssa-isolate-paths.c b/gcc/gimple-ssa-isolate-paths.c index e1fab61bedab..880836c21aa7 100644 --- a/gcc/gimple-ssa-isolate-paths.c +++ b/gcc/gimple-ssa-isolate-paths.c @@ -431,7 +431,9 @@ find_implicit_erroneous_behavior (void) "declared here"); } - if (gimple_bb (use_stmt) == bb) + if ((flag_isolate_erroneous_paths_dereference + || flag_isolate_erroneous_paths_attribute) + && gimple_bb (use_stmt) == bb) { duplicate = isolate_path (bb, duplicate, e, use_stmt, lhs, true); @@ -553,9 +555,16 @@ find_explicit_erroneous_behavior (void) inform (DECL_SOURCE_LOCATION(valbase), "declared here"); } - tree zero = build_zero_cst (TREE_TYPE (val)); - gimple_return_set_retval (return_stmt, zero); - update_stmt (stmt); + + /* Do not modify code if the user only asked for + warnings. */ + if (flag_isolate_erroneous_paths_dereference + || flag_isolate_erroneous_paths_attribute) + { + tree zero = build_zero_cst (TREE_TYPE (val)); + gimple_return_set_retval (return_stmt, zero); + update_stmt (stmt); + } } } } -- Alexandre Oliva, freedom fighter https://FSFLA.org/blogs/lxo Be the change, be Free! FSF Latin America board member GNU Toolchain Engineer Free Software Evangelist Hay que enGNUrecerse, pero sin perder la terGNUra jamás-GNUChe