On 12/08/2017 12:19 PM, Martin Sebor wrote: > Attached is revision 8 of the patch with the changes suggested > and/or requested below.
[ Big snip. ] > > > gcc-78918.diff > > > PR tree-optimization/78918 - missing -Wrestrict on memcpy copying over self > > gcc/c-family/ChangeLog: > > PR tree-optimization/78918 > * c-common.c (check_function_restrict): Avoid checking built-ins. > * c.opt (-Wrestrict): Include in -Wall. > > gcc/ChangeLog: > > PR tree-optimization/78918 > * Makefile.in (OBJS): Add gimple-ssa-warn-restrict.o. > * builtins.c (check_sizes): Rename... > (check_access): ...to this. Rename function arguments for clarity. > (check_memop_sizes): Adjust names. > (expand_builtin_memchr, expand_builtin_memcpy): Same. > (expand_builtin_memmove, expand_builtin_mempcpy): Same. > (expand_builtin_strcat, expand_builtin_stpncpy): Same. > (check_strncat_sizes, expand_builtin_strncat): Same. > (expand_builtin_strncpy, expand_builtin_memset): Same. > (expand_builtin_bzero, expand_builtin_memcmp): Same. > (expand_builtin_memory_chk, maybe_emit_chk_warning): Same. > (maybe_emit_sprintf_chk_warning): Same. > (expand_builtin_strcpy): Adjust. > (expand_builtin_stpcpy): Same. > (expand_builtin_with_bounds): Detect out-of-bounds accesses > in pointer-checking forms of memcpy, memmove, and mempcpy. > (gcall_to_tree_minimal, max_object_size): Define new functions. > * builtins.h (max_object_size): Declare. > * calls.c (alloc_max_size): Call max_object_size instead of > hardcoding ssizetype limit. > (get_size_range): Handle new argument. > * calls.h (get_size_range): Add a new argument. > * cfgexpand.c (expand_call_stmt): Propagate no-warning bit. > * doc/invoke.texi (-Wrestrict): Adjust, add example. > * gimple-fold.c (gimple_fold_builtin_memory_op): Detect overlapping > operations. > (gimple_fold_builtin_memory_chk): Same. > (gimple_fold_builtin_stxcpy_chk): New function. > * gimple-ssa-warn-restrict.c: New source. > * gimple-ssa-warn-restrict.h: New header. > * gimple.c (gimple_build_call_from_tree): Propagate location. > * passes.def (pass_warn_restrict): Add new pass. > * tree-pass.h (make_pass_warn_restrict): Declare. > * tree-ssa-strlen.c (handle_builtin_strcpy): Detect overlapping > operations. > (handle_builtin_strcat): Same. > (strlen_optimize_stmt): Rename... > (strlen_check_and_optimize_stmt): ...to this. Handle strncat, > stpncpy, strncpy, and their checking forms. > > gcc/testsuite/ChangeLog: > > PR tree-optimization/78918 > * c-c++-common/Warray-bounds.c: New test. > * c-c++-common/Warray-bounds-2.c: New test. > * c-c++-common/Warray-bounds-3.c: New test. > * c-c++-common/Wrestrict-2.c: New test. > * c-c++-common/Wrestrict.c: New test. > * c-c++-common/Wrestrict.s: New test. > * c-c++-common/Wsizeof-pointer-memaccess1.c: Adjust > * c-c++-common/Wsizeof-pointer-memaccess2.c: Same. > * g++.dg/torture/Wsizeof-pointer-memaccess1.C: Same. > * g++.dg/torture/Wsizeof-pointer-memaccess2.C: Same. > * gcc.dg/memcpy-6.c: New test. > * gcc.dg/pr69172.c: Adjust. > * gcc.dg/pr79223.c: Same. > * gcc.dg/Wrestrict-2.c: New test. > * gcc.dg/Wrestrict.c: New test. > * gcc.dg/Wsizeof-pointer-memaccess1.c > * gcc.target/i386/chkp-stropt-17.c: New test. > * gcc.dg/torture/Wsizeof-pointer-memaccess1.c: Adjust. OK. Thanks for your patience. I know this was a ton of work and even more waiting. jeff