aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-strlen.c
diff options
context:
space:
mode:
authorMartin Sebor <msebor@redhat.com>2019-11-12 17:18:37 +0000
committerMartin Sebor <msebor@gcc.gnu.org>2019-11-12 10:18:37 -0700
commit937a86b49e4ed8ef72c1384d617feff26580a048 (patch)
treef247820d00501e7e2424408054361e5b8ea56067 /gcc/tree-ssa-strlen.c
parent966e31a17b92d627dc323a77d363948012c3163d (diff)
downloadgcc-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.c1
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);