diff options
author | Martin Sebor <msebor@redhat.com> | 2019-11-12 17:18:37 +0000 |
---|---|---|
committer | Martin Sebor <msebor@gcc.gnu.org> | 2019-11-12 10:18:37 -0700 |
commit | 937a86b49e4ed8ef72c1384d617feff26580a048 (patch) | |
tree | f247820d00501e7e2424408054361e5b8ea56067 /gcc/tree-ssa-strlen.c | |
parent | 966e31a17b92d627dc323a77d363948012c3163d (diff) | |
download | gcc-937a86b49e4ed8ef72c1384d617feff26580a048.zip gcc-937a86b49e4ed8ef72c1384d617feff26580a048.tar.gz gcc-937a86b49e4ed8ef72c1384d617feff26580a048.tar.bz2 |
PR middle-end/83688 - check if buffers may overlap when copying strings using sprintf
gcc/ChangeLog:
PR middle-end/83688
* gimple-ssa-sprintf.c (format_result::alias_info): New struct.
(directive::argno): New member.
(format_result::aliases, format_result::alias_count): New data members.
(format_result::append_alias): New member function.
(fmtresult::dst_offset): New data member.
(pass_sprintf_length::call_info::dst_origin): New data member.
(pass_sprintf_length::call_info::dst_field, dst_offset): Same.
(char_type_p, array_elt_at_offset, field_at_offset): New functions.
(get_origin_and_offset): Same.
(format_string): Call it.
(format_directive): Call append_alias and set directive argument
number.
(maybe_warn_overlap): New function.
(pass_sprintf_length::compute_format_length): Call it.
(pass_sprintf_length::handle_gimple_call): Initialize new members.
* gcc/tree-ssa-strlen.c (): Also enable when -Wrestrict is on.
gcc/testsuite/ChangeLog:
PR tree-optimization/35503
* gcc.dg/tree-ssa/builtin-sprintf-warn-23.c: New test.
From-SVN: r278098
Diffstat (limited to 'gcc/tree-ssa-strlen.c')
-rw-r--r-- | gcc/tree-ssa-strlen.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/gcc/tree-ssa-strlen.c b/gcc/tree-ssa-strlen.c index c7d36db..be0f37c 100644 --- a/gcc/tree-ssa-strlen.c +++ b/gcc/tree-ssa-strlen.c @@ -5344,6 +5344,7 @@ pass_strlen::gate (function *) { return ((warn_format_overflow > 0 || warn_format_trunc > 0 + || warn_restrict > 0 || flag_optimize_strlen > 0 || flag_printf_return_value) && optimize > 0); |