diff options
author | Martin Sebor <msebor@redhat.com> | 2020-01-13 13:20:41 +0000 |
---|---|---|
committer | Martin Sebor <msebor@redhat.com> | 2020-01-13 13:33:37 +0000 |
commit | e13f37d9f7600d337f8a4589b5f985ded9e05852 (patch) | |
tree | 7361c300da40923fd58cd3686a65e1460ae75dda /gcc/tree-ssa-strlen.c | |
parent | 5ab08934e5f44dbdd5b0e4226755b46bf4e2e1af (diff) | |
download | gcc-e13f37d9f7600d337f8a4589b5f985ded9e05852.zip gcc-e13f37d9f7600d337f8a4589b5f985ded9e05852.tar.gz gcc-e13f37d9f7600d337f8a4589b5f985ded9e05852.tar.bz2 |
PR tree-optimization/93213 - wrong code with -Og -foptimize-strlen
gcc/testsuite/ChangeLog:
PR tree-optimization/93213
* gcc.c-torture/execute/pr93213.c: New test.
gcc/ChangeLog:
PR tree-optimization/93213
* tree-ssa-strlen.c (handle_store): Only allow single-byte nul-over-nul
stores to be eliminated.
Diffstat (limited to 'gcc/tree-ssa-strlen.c')
-rw-r--r-- | gcc/tree-ssa-strlen.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/gcc/tree-ssa-strlen.c b/gcc/tree-ssa-strlen.c index 4f2a0ad..ad9e989 100644 --- a/gcc/tree-ssa-strlen.c +++ b/gcc/tree-ssa-strlen.c @@ -5239,10 +5239,10 @@ handle_store (gimple_stmt_iterator *gsi, bool *zero_write, } } - if (si != NULL && offset == 0 && storing_all_zeros_p) + if (si != NULL && offset == 0 && storing_all_zeros_p && lenrange[2] == 1) { - /* Allow adjust_last_stmt to remove it if the stored '\0' - is immediately overwritten. */ + /* For single-byte stores only, allow adjust_last_stmt to remove + the statement if the stored '\0' is immediately overwritten. */ laststmt.stmt = stmt; laststmt.len = build_int_cst (size_type_node, 1); laststmt.stridx = si->idx; |