On 11/09/2017 04:44 PM, Martin Sebor wrote: > Attached is another update to the patch with the above. While > going through it again I noticed a couple of opportunities to > handle ranges so I added those as well. I have retested the > patch with GDB and Glibc. They both require minor changes and > I will submit patches with those once this work is checked in. > > Is this good enough to commit now? > > Martin > > gcc-81117.diff > > > PR c/81117 - Improve buffer overflow checking in strncpy > > ada/ChangeLog: > PR c/81117 > * adadecode.c (__gnat_decode): Use memcpy instead of strncpy. > * argv.c (__gnat_fill_env): Same. > > fortran/ChangeLog: > PR c/81117 > * decl.c (build_sym): Use memcpy instead of strncpy. > > gcc/ChangeLog: > > PR c/81117 > * builtins.c (compute_objsize): Handle arrays that > compute_builtin_object_size likes to fail for. Make extern. > * builtins.h (compute_objsize): Declare. > (check_strncpy_sizes): New function. > (expand_builtin_strncpy): Call check_strncpy_sizes. > * gimple-fold.c (gimple_fold_builtin_strncpy): Implement > -Wstringop-truncation. > (gimple_fold_builtin_strncat): Same. > * gimple.c (gimple_build_call_from_tree): Set call location. > * tree-ssa-strlen.c (strlen_to_stridx): New global variable. > (maybe_diag_bound_equal_length, is_strlen_related_p): New functions. > (handle_builtin_stxncpy, handle_builtin_strncat): Same. > (handle_builtin_strlen): Use strlen_to_stridx. > (strlen_optimize_stmt): Handle flavors of strncat, strncpy, and > stpncpy. > Use strlen_to_stridx. > (pass_strlen::execute): Release strlen_to_stridx. > * doc/invoke.texi (-Wsizeof-pointer-memaccess): Document enhancement. > (-Wstringop-truncation): Document new option. > > gcc/c-family/ChangeLog: > > PR c/81117 > * c-common.c (catenate_strings): Use memcpy instead of strncpy. > * c-warn.c (sizeof_pointer_memaccess_warning): Handle arrays. > * c.opt (-Wstringop-truncation): New option. > > gcc/objc/ChangeLog: > > PR c/81117 > * objc-encoding.c (encode_type): Use memcpy instead of strncpy. > > gcc/testsuite/ChangeLog: > > PR c/81117 > * c-c++-common/Wsizeof-pointer-memaccess3.c: New test. > * c-c++-common/Wstringop-overflow.c: Same. > * c-c++-common/Wstringop-truncation.c: Same. > * c-c++-common/Wsizeof-pointer-memaccess2.c: Adjust. > * c-c++-common/attr-nonstring-2.c: New test. > * g++.dg/torture/Wsizeof-pointer-memaccess1.C: Adjust. > * g++.dg/torture/Wsizeof-pointer-memaccess2.C: Same. > * gcc.dg/torture/pr63554.c: Same. > * gcc.dg/Walloca-1.c: Disable macro tracking. OK. Sorry for the long review cycles on this one.
jeff