aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2018-10-24 21:55:39 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2018-10-24 21:55:39 +0000
commitf8719680bfd5adf14aa91ce3017d59f7eac7f64e (patch)
tree1561860e0ec71bca48e6f93ac01c3169d8c0c8b1 /gcc
parentf78f04627d5805bbcc07e05a41352b0de36f3dba (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/gimple-ssa-isolate-paths.c17
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);
+ }
}
}
}