diff options
author | Bernd Edlinger <bernd.edlinger@hotmail.de> | 2018-08-21 08:56:11 +0000 |
---|---|---|
committer | Bernd Edlinger <edlinger@gcc.gnu.org> | 2018-08-21 08:56:11 +0000 |
commit | 7d4ae1fbbf162289ad27490899dafc6747f18800 (patch) | |
tree | fe6bfff51640c372b84e45b54a24140553495fd7 /gcc/tree-ssa-strlen.c | |
parent | eae016fc707fac3bf11d671f7fd40b213ee5141b (diff) | |
download | gcc-7d4ae1fbbf162289ad27490899dafc6747f18800.zip gcc-7d4ae1fbbf162289ad27490899dafc6747f18800.tar.gz gcc-7d4ae1fbbf162289ad27490899dafc6747f18800.tar.bz2 |
re PR middle-end/86121 (missing -Wstringop-overflow on strcpy followed by strcat)
2018-08-21 Bernd Edlinger <bernd.edlinger@hotmail.de>
PR middle-end/86121
* tree-ssa-strlen.c (adjust_last_stmt): Avoid folding away undefined
behaviour.
testsuite:
2018-08-21 Bernd Edlinger <bernd.edlinger@hotmail.de>
PR middle-end/86121
* gcc.dg/Wstringop-overflow-6.c: Remove xfail.
From-SVN: r263693
Diffstat (limited to 'gcc/tree-ssa-strlen.c')
-rw-r--r-- | gcc/tree-ssa-strlen.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/tree-ssa-strlen.c b/gcc/tree-ssa-strlen.c index 1d813b4..d0792aa 100644 --- a/gcc/tree-ssa-strlen.c +++ b/gcc/tree-ssa-strlen.c @@ -1107,6 +1107,13 @@ adjust_last_stmt (strinfo *si, gimple *stmt, bool is_strcat) to store the extra '\0' in that case. */ if ((tree_to_uhwi (len) & 3) == 0) return; + + /* Don't fold away an out of bounds access, as this defeats proper + warnings. */ + tree dst = gimple_call_arg (last.stmt, 0); + tree size = compute_objsize (dst, 0); + if (size && tree_int_cst_lt (size, len)) + return; } else if (TREE_CODE (len) == SSA_NAME) { |