diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2018-10-24 21:55:39 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2018-10-24 21:55:39 +0000 |
commit | f8719680bfd5adf14aa91ce3017d59f7eac7f64e (patch) | |
tree | 1561860e0ec71bca48e6f93ac01c3169d8c0c8b1 /gcc | |
parent | f78f04627d5805bbcc07e05a41352b0de36f3dba (diff) | |
download | gcc-f8719680bfd5adf14aa91ce3017d59f7eac7f64e.zip gcc-f8719680bfd5adf14aa91ce3017d59f7eac7f64e.tar.gz gcc-f8719680bfd5adf14aa91ce3017d59f7eac7f64e.tar.bz2 |
gOlogy: do not change code in isolate-paths for warnings only
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?
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.
From-SVN: r265473
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/gimple-ssa-isolate-paths.c | 17 |
2 files changed, 20 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f7faf89..fdfca8b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-10-24 Alexandre Oliva <aoliva@redhat.com> + + * 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. + 2018-10-24 Michael Meissner <meissner@linux.ibm.com> * config/rs6000/rs6000.c (TARGET_MANGLE_DECL_ASSEMBLER_NAME): diff --git a/gcc/gimple-ssa-isolate-paths.c b/gcc/gimple-ssa-isolate-paths.c index e1fab61..880836c 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); + } } } } |