[committed] Make Wstringop-overflow-27 testnames unique [was Re: [PING 3][PATCH] track dynamic allocation in strlen (PR 91582)]
On Wed, 2020-01-08 at 12:52 +0100, Andreas Schwab wrote: > On Dez 06 2019, Martin Sebor wrote: > > > diff --git a/gcc/testsuite/gcc.dg/Wstringop-overflow-27.c > > b/gcc/testsuite/gcc.dg/Wstringop-overflow-27.c > > new file mode 100644 > > index 000..249ce2b6ad5 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.dg/Wstringop-overflow-27.c > > +void test_strcpy_warn (const char *s) > > +{ > > + { > > +const char a[] = "123"; > > +/* Verify that using signed int for the strlen result works (i.e., > > + that the conversion from signed int to size_t doesn't prevent > > + the detection. */ > > +int n = strlen (a); > > +char *t = (char*)calloc (n, 1); // { dg-message "at offset 0 to an > > object with size 3 allocated by 'calloc' here" "calloc note" { xfail *-*-* > > } } > > +// { dg-message "at offset 0 to an > > object with size at most 3 allocated by 'calloc' here" "calloc note" { > > target *-*-* } .-1 } > > Please make the test name unique. > > > +strcpy (t, a); // { dg-warning "writing 4 bytes > > into a region of size (between 0 and )?3 " } > > + > > +sink (t); > > + } > > + > > + { > > +const char a[] = "1234"; > > +size_t n = strlen (a); > > +char *t = (char*)malloc (n);// { dg-message "at offset 0 to an > > object with size 4 allocated by 'malloc' here" "malloc note" { xfail *-*-* > > } } > > +// { dg-message "at offset 0 to an > > object with size at most 4 allocated by 'malloc' here" "malloc note" { > > target *-*-* } .-1 } > > Likewise. Fixed via the attached patch which I've committed to the trunk. jeff commit 48e76be17adbf93fe264fc118adbcf2ae6a14806 Author: law Date: Wed Jan 8 18:46:33 2020 + * gcc.dg/Wstringop-overflow-27.c: Make testnames unique. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@280016 138bc75d-0d04-0410-961f-82ee72b054a4 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 537091ffec6..622589e3db6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2020-01-08 Jeff Law + + * gcc.dg/Wstringop-overflow-27.c: Make testnames unique. + 2020-01-08 Joel Brobecker Olivier Hainque diff --git a/gcc/testsuite/gcc.dg/Wstringop-overflow-27.c b/gcc/testsuite/gcc.dg/Wstringop-overflow-27.c index 249ce2b6ad5..8e2cfe30725 100644 --- a/gcc/testsuite/gcc.dg/Wstringop-overflow-27.c +++ b/gcc/testsuite/gcc.dg/Wstringop-overflow-27.c @@ -260,8 +260,8 @@ void test_strcpy_warn (const char *s) that the conversion from signed int to size_t doesn't prevent the detection. */ int n = strlen (a); -char *t = (char*)calloc (n, 1); // { dg-message "at offset 0 to an object with size 3 allocated by 'calloc' here" "calloc note" { xfail *-*-* } } -// { dg-message "at offset 0 to an object with size at most 3 allocated by 'calloc' here" "calloc note" { target *-*-* } .-1 } +char *t = (char*)calloc (n, 1); // { dg-message "at offset 0 to an object with size 3 allocated by 'calloc' here" "calloc note 1" { xfail *-*-* } } +// { dg-message "at offset 0 to an object with size at most 3 allocated by 'calloc' here" "calloc note 2" { target *-*-* } .-1 } strcpy (t, a); // { dg-warning "writing 4 bytes into a region of size (between 0 and )?3 " } sink (t); @@ -270,8 +270,8 @@ void test_strcpy_warn (const char *s) { const char a[] = "1234"; size_t n = strlen (a); -char *t = (char*)malloc (n);// { dg-message "at offset 0 to an object with size 4 allocated by 'malloc' here" "malloc note" { xfail *-*-* } } -// { dg-message "at offset 0 to an object with size at most 4 allocated by 'malloc' here" "malloc note" { target *-*-* } .-1 } +char *t = (char*)malloc (n);// { dg-message "at offset 0 to an object with size 4 allocated by 'malloc' here" "malloc note 1" { xfail *-*-* } } +// { dg-message "at offset 0 to an object with size at most 4 allocated by 'malloc' here" "malloc note 2" { target *-*-* } .-1 } strcpy (t, a); // { dg-warning "writing 5 bytes into a region of size (between 0 and )?4 " } sink (t); }
Re: [PING 3][PATCH] track dynamic allocation in strlen (PR 91582)
On Wed, 2020-01-08 at 12:52 +0100, Andreas Schwab wrote: > On Dez 06 2019, Martin Sebor wrote: > > > diff --git a/gcc/testsuite/gcc.dg/Wstringop-overflow-27.c > > b/gcc/testsuite/gcc.dg/Wstringop-overflow-27.c > > new file mode 100644 > > index 000..249ce2b6ad5 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.dg/Wstringop-overflow-27.c > > +void test_strcpy_warn (const char *s) > > +{ > > + { > > +const char a[] = "123"; > > +/* Verify that using signed int for the strlen result works (i.e., > > + that the conversion from signed int to size_t doesn't prevent > > + the detection. */ > > +int n = strlen (a); > > +char *t = (char*)calloc (n, 1); // { dg-message "at offset 0 to an > > object with size 3 allocated by 'calloc' here" "calloc note" { xfail *-*-* > > } } > > +// { dg-message "at offset 0 to an > > object with size at most 3 allocated by 'calloc' here" "calloc note" { > > target *-*-* } .-1 } > > Please make the test name unique. I've got a patch to do that in my local tree. I'll push it momentarily. jeff
Re: [PING 3][PATCH] track dynamic allocation in strlen (PR 91582)
On Dez 06 2019, Martin Sebor wrote: > diff --git a/gcc/testsuite/gcc.dg/Wstringop-overflow-27.c > b/gcc/testsuite/gcc.dg/Wstringop-overflow-27.c > new file mode 100644 > index 000..249ce2b6ad5 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/Wstringop-overflow-27.c > +void test_strcpy_warn (const char *s) > +{ > + { > +const char a[] = "123"; > +/* Verify that using signed int for the strlen result works (i.e., > + that the conversion from signed int to size_t doesn't prevent > + the detection. */ > +int n = strlen (a); > +char *t = (char*)calloc (n, 1); // { dg-message "at offset 0 to an > object with size 3 allocated by 'calloc' here" "calloc note" { xfail *-*-* } } > +// { dg-message "at offset 0 to an > object with size at most 3 allocated by 'calloc' here" "calloc note" { target > *-*-* } .-1 } Please make the test name unique. > +strcpy (t, a); // { dg-warning "writing 4 bytes > into a region of size (between 0 and )?3 " } > + > +sink (t); > + } > + > + { > +const char a[] = "1234"; > +size_t n = strlen (a); > +char *t = (char*)malloc (n);// { dg-message "at offset 0 to an > object with size 4 allocated by 'malloc' here" "malloc note" { xfail *-*-* } } > +// { dg-message "at offset 0 to an > object with size at most 4 allocated by 'malloc' here" "malloc note" { target > *-*-* } .-1 } Likewise. Andreas. -- Andreas Schwab, SUSE Labs, sch...@suse.de GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7 "And now for something completely different."
Re: [PING 3][PATCH] track dynamic allocation in strlen (PR 91582)
On Sat, 14 Dec 2019 at 22:35, Jeff Law wrote: > > On Fri, 2019-12-13 at 17:55 -0700, Martin Sebor wrote: > > After more testing by Jeff's buildbot and correcting the problems > > it exposed I have committed the attached patch in r279392. > And just to close the loop on this. Your last version fixed all the > issues I saw in the tester. > Hi, On my side, I've noticed that r279392 caused regressions on arm. On arm-none-linux-gnueabi --with-mode arm --with-cpu cortex-a9 I see gcc.dg/strlenopt-8.c: pattern found 2 times FAIL: gcc.dg/strlenopt-8.c scan-tree-dump-times strlen1 "strlen \\(" 0 FAIL: gcc.dg/tree-ssa/pr87022.c (test for excess errors) Excess errors: /gcc/testsuite/gcc.dg/tree-ssa/pr87022.c:26:19: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=] /gcc/testsuite/gcc.dg/tree-ssa/pr87022.c:26:19: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=] /gcc/testsuite/gcc.dg/tree-ssa/pr87022.c:26:19: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=] /gcc/testsuite/gcc.dg/tree-ssa/pr87022.c:26:19: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=] /gcc/testsuite/gcc.dg/tree-ssa/pr87022.c:26:19: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=] /gcc/testsuite/gcc.dg/tree-ssa/pr87022.c:26:19: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=] Christophe > jeff > >
Re: [PING 3][PATCH] track dynamic allocation in strlen (PR 91582)
On Fri, 2019-12-13 at 17:55 -0700, Martin Sebor wrote: > After more testing by Jeff's buildbot and correcting the problems > it exposed I have committed the attached patch in r279392. And just to close the loop on this. Your last version fixed all the issues I saw in the tester. jeff
Re: [PING 3][PATCH] track dynamic allocation in strlen (PR 91582)
After more testing by Jeff's buildbot and correcting the problems it exposed I have committed the attached patch in r279392. Martin On 12/11/19 4:23 PM, Martin Sebor wrote: Jeff's buildbot exposed a bug in the patch that caused false positives in cases involving negative offsets into destinations involving pointers pointing into multiple regions of the same object. The attached revision fixes that bug, plus makes a few minor other fixes pointed out in PR 92868. On 12/6/19 5:19 PM, Martin Sebor wrote: With part 2 (below) of this work committed, I've rebased the patch on the top of trunk and on top of the updated part 1 (also below). Attached is the result, retested on x86_64-linux. [1] include size and offset in -Wstringop-overflow https://gcc.gnu.org/ml/gcc-patches/2019-12/msg00392.html [2] extend -Wstringop-overflow to allocated objects (committed in r278983) https://gcc.gnu.org/ml/gcc-patches/2019-12/msg00263.html On 11/25/19 10:54 AM, Martin Sebor wrote: Ping: https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00812.html On 11/18/19 11:23 AM, Martin Sebor wrote: Ping: https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00812.html On 11/11/19 6:27 PM, Martin Sebor wrote: The attached patch extends the strlen pass to detect out-of-bounds accesses to memory allocated by calls to other allocation functions besides calloc and malloc, as well as VLAs, and user-defined functions declared with attribute alloc_size. There is some overlap with the _FORTIFY_SOURCE detection but thanks to the extensive use of ranges, this enhancement detects many more cases of overflow. The solution primarily improves warnings but some of the changes also improve codegen in some cases as a side-effect. I hope to take better advantage of the optimization opportunities the dynamic memory tracking opens up (and also better buffer overflow and array out-of-bounds detection) in GCC 11. Although the strlen pass already tracks some dynamic memory calls (calloc and malloc) rather than extending the same infrastructure (strinfo::stmt) to others I took the approach of adding a separate data member for the other calls (strinfo::alloc) and tracking those independently. I did this to keep the changes only minimally intrusive. In the future (post GCC 10) it might be worth considering merging both. Besides introducing the new member and making use of it, the rest of the changes were prompted by weaknesses exposed by test cases involving dynamically allocated objects. The patch is intended to apply on top of the two related patches posted last week ([1] and [2]). For all tests to pass also expects the fix for PR 92412 posted earlier today ([3]). Martin [1] https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00429.html [2] https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00652.html [3] https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00800.html PR middle-end/91582 - missing heap overflow detection for strcpy PR middle-end/92868 - ICE: tree check: expected integer_cst, have ssa_name gcc/ChangeLog: PR middle-end/91582 PR middle-end/92868 * builtins.c (addr_decl_size): New function. (gimple_call_alloc_size): Add arguments. (compute_objsize): Add an argument. Set *PDECL even for allocated objects. Correct checking for negative wide_int. Correct handling of negative outer offsets into unknown regions or with unknown inner offsets. Extend offsets to at most sizetype precision. Only handle constant subobject sizes. * builtins.h (gimple_call_alloc_size): Add arguments. * gcc/tree.c (component_ref_size): Always return sizetype. * tree-ssa-strlen.c (strinfo::alloc): New member. (get_addr_stridx): Add argument. (get_stridx): Use ptrdiff_t. Add argument. (new_strinfo): Set new member. (get_string_length): Handle alloca and VLA. (dump_strlen_info): Dump more state. (maybe_invalidate): Print more info. Decrease indentation. (unshare_strinfo): Set new member. (valid_builtin_call): Handle alloca and VLA. (maybe_warn_overflow): Check and set no-warning bit. Improve handling of offsets. Print allocated objects. (handle_builtin_strlen): Handle strinfo records with null lengths. (handle_builtin_strcpy): Add argument. Call maybe_warn_overflow. (is_strlen_related_p): Handle dynamically allocated objects. (get_range): Add argument. (handle_builtin_malloc): Rename... (handle_aalloc): ...to this and handle all allocation functions. (handle_builtin_memset): Call maybe_warn_overflow. (count_nonzero_bytes): Handle more MEM_REF forms. (strlen_check_and_optimize_call): Call handle_alloc_call. Pass arguments to more callees. (handle_integral_assign): Add argument. Create strinfo entries for MEM_REF assignments. (check_and_optimize_stmt): Handle more MEM_REF forms. gcc/testsuite/ChangeLog: PR middle-end/91582 * c-c++-common/Wrestrict.c: Adjust expected warnings. * gcc/testsuite/c-c++-common/Wstringop-truncation-4.c: Enable more warnings. * gcc/testsuite/c-c++-common/Wstringop-truncation.c: Remove
Re: [PING 3][PATCH] track dynamic allocation in strlen (PR 91582)
Jeff's buildbot exposed a bug in the patch that caused false positives in cases involving negative offsets into destinations involving pointers pointing into multiple regions of the same object. The attached revision fixes that bug, plus makes a few minor other fixes pointed out in PR 92868. On 12/6/19 5:19 PM, Martin Sebor wrote: With part 2 (below) of this work committed, I've rebased the patch on the top of trunk and on top of the updated part 1 (also below). Attached is the result, retested on x86_64-linux. [1] include size and offset in -Wstringop-overflow https://gcc.gnu.org/ml/gcc-patches/2019-12/msg00392.html [2] extend -Wstringop-overflow to allocated objects (committed in r278983) https://gcc.gnu.org/ml/gcc-patches/2019-12/msg00263.html On 11/25/19 10:54 AM, Martin Sebor wrote: Ping: https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00812.html On 11/18/19 11:23 AM, Martin Sebor wrote: Ping: https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00812.html On 11/11/19 6:27 PM, Martin Sebor wrote: The attached patch extends the strlen pass to detect out-of-bounds accesses to memory allocated by calls to other allocation functions besides calloc and malloc, as well as VLAs, and user-defined functions declared with attribute alloc_size. There is some overlap with the _FORTIFY_SOURCE detection but thanks to the extensive use of ranges, this enhancement detects many more cases of overflow. The solution primarily improves warnings but some of the changes also improve codegen in some cases as a side-effect. I hope to take better advantage of the optimization opportunities the dynamic memory tracking opens up (and also better buffer overflow and array out-of-bounds detection) in GCC 11. Although the strlen pass already tracks some dynamic memory calls (calloc and malloc) rather than extending the same infrastructure (strinfo::stmt) to others I took the approach of adding a separate data member for the other calls (strinfo::alloc) and tracking those independently. I did this to keep the changes only minimally intrusive. In the future (post GCC 10) it might be worth considering merging both. Besides introducing the new member and making use of it, the rest of the changes were prompted by weaknesses exposed by test cases involving dynamically allocated objects. The patch is intended to apply on top of the two related patches posted last week ([1] and [2]). For all tests to pass also expects the fix for PR 92412 posted earlier today ([3]). Martin [1] https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00429.html [2] https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00652.html [3] https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00800.html PR middle-end/91582 - missing heap overflow detection for strcpy PR middle-end/92868 - ICE: tree check: expected integer_cst, have ssa_name gcc/ChangeLog: PR middle-end/91582 PR middle-end/92868 * builtins.c (gimple_call_alloc_size): Add arguments. (compute_objsize): Add an argument. Set *PDECL even for allocated objects. Correct checking for negative wide_int. Correct handling of negative outer offsets into unknown regions or with unknown inner offsets. Extend offsets to at most sizetype precision. Only handle constant subobject sizes. * builtins.h (gimple_call_alloc_size): Add arguments. * gcc/tree.c (component_ref_size): Always return sizetype. * tree-ssa-strlen.c (strinfo::alloc): New member. (get_addr_stridx): Add argument. (get_stridx): Use ptrdiff_t. Add argument. (new_strinfo): Set new member. (get_string_length): Handle alloca and VLA. (dump_strlen_info): Dump more state. (maybe_invalidate): Print more info. Decrease indentation. (unshare_strinfo): Set new member. (valid_builtin_call): Handle alloca and VLA. (maybe_warn_overflow): Check and set no-warning bit. Improve handling of offsets. Print allocated objects. (handle_builtin_strlen): Handle strinfo records with null lengths. (handle_builtin_strcpy): Add argument. Call maybe_warn_overflow. (is_strlen_related_p): Handle dynamically allocated objects. (get_range): Add argument. (handle_builtin_malloc): Rename... (handle_aalloc): ...to this and handle all allocation functions. (handle_builtin_memset): Call maybe_warn_overflow. (count_nonzero_bytes): Handle more MEM_REF forms. (strlen_check_and_optimize_call): Call handle_alloc_call. Pass arguments to more callees. (handle_integral_assign): Add argument. Create strinfo entries for MEM_REF assignments. (check_and_optimize_stmt): Handle more MEM_REF forms. gcc/testsuite/ChangeLog: PR middle-end/91582 * c-c++-common/Wrestrict.c: Adjust expected warnings. * gcc.dg/Warray-bounds-46.c: Disable -Wstringop-overflow. * gcc.dg/Warray-bounds-47.c: Same. * gcc.dg/Warray-bounds-52.c: New test. * gcc.dg/Wstringop-overflow-26.c: New test. * gcc.dg/Wstringop-overflow-27.c: New test. * gcc.dg/attr-alloc_size.c (test): Disable -Warray-bounds. * gcc.dg/attr-copy-2.c: Adjust expected warnings. *
Re: [PING 3][PATCH] track dynamic allocation in strlen (PR 91582)
On Fri, Dec 06, 2019 at 05:19:36PM -0700, Martin Sebor wrote: > With part 2 (below) of this work committed, I've rebased the patch > on the top of trunk and on top of the updated part 1 (also below). > Attached is the result, retested on x86_64-linux. > --- a/gcc/tree-ssa-strlen.c > +++ b/gcc/tree-ssa-strlen.c > @@ -61,6 +61,7 @@ along with GCC; see the file COPYING3. If not see > #include "vr-values.h" > #include "gimple-ssa-evrp-analyze.h" > > +#pragma GCC optimize ("0") > /* A vector indexed by SSA_NAME_VERSION. 0 means unknown, positive value > is an index into strinfo vector, negative value stands for > string length of a string literal (~strlen). */ Why this? Some debugging left-over? Jakub
[PING 3][PATCH] track dynamic allocation in strlen (PR 91582)
With part 2 (below) of this work committed, I've rebased the patch on the top of trunk and on top of the updated part 1 (also below). Attached is the result, retested on x86_64-linux. [1] include size and offset in -Wstringop-overflow https://gcc.gnu.org/ml/gcc-patches/2019-12/msg00392.html [2] extend -Wstringop-overflow to allocated objects (committed in r278983) https://gcc.gnu.org/ml/gcc-patches/2019-12/msg00263.html On 11/25/19 10:54 AM, Martin Sebor wrote: Ping: https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00812.html On 11/18/19 11:23 AM, Martin Sebor wrote: Ping: https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00812.html On 11/11/19 6:27 PM, Martin Sebor wrote: The attached patch extends the strlen pass to detect out-of-bounds accesses to memory allocated by calls to other allocation functions besides calloc and malloc, as well as VLAs, and user-defined functions declared with attribute alloc_size. There is some overlap with the _FORTIFY_SOURCE detection but thanks to the extensive use of ranges, this enhancement detects many more cases of overflow. The solution primarily improves warnings but some of the changes also improve codegen in some cases as a side-effect. I hope to take better advantage of the optimization opportunities the dynamic memory tracking opens up (and also better buffer overflow and array out-of-bounds detection) in GCC 11. Although the strlen pass already tracks some dynamic memory calls (calloc and malloc) rather than extending the same infrastructure (strinfo::stmt) to others I took the approach of adding a separate data member for the other calls (strinfo::alloc) and tracking those independently. I did this to keep the changes only minimally intrusive. In the future (post GCC 10) it might be worth considering merging both. Besides introducing the new member and making use of it, the rest of the changes were prompted by weaknesses exposed by test cases involving dynamically allocated objects. The patch is intended to apply on top of the two related patches posted last week ([1] and [2]). For all tests to pass also expects the fix for PR 92412 posted earlier today ([3]). Martin [1] https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00429.html [2] https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00652.html [3] https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00800.html PR middle-end/91582 - missing heap overflow detection for strcpy gcc/ChangeLog: PR middle-end/91582 * builtins.c (gimple_call_alloc_size): Add argument. * builtins.h (gimple_call_alloc_size): Same. * tree-ssa-strlen.c (strinfo::alloc): New member. (get_addr_stridx): Add argument. (get_stridx): Use ptrdiff_t. Add argument. (new_strinfo): Set new member. (get_string_length): Handle alloca and VLA. (dump_strlen_info): Dump more state. (maybe_invalidate): Print more info. Decrease indentation. (unshare_strinfo): Set new member. (valid_builtin_call): Handle alloca and VLA. (maybe_warn_overflow): Check and set no-warning bit. Improve handling of offsets. Print allocated objects. (handle_builtin_strlen): Handle strinfo records with null lengths. (handle_builtin_strcpy): Add argument. Call maybe_warn_overflow. (is_strlen_related_p): Handle dynamically allocated objects. (get_range): Add argument. (handle_builtin_malloc): Rename... (handle_aalloc): ...to this and handle all allocation functions. (handle_builtin_memset): Call maybe_warn_overflow. (count_nonzero_bytes): Handle more MEM_REF forms. (strlen_check_and_optimize_call): Call handle_alloc_call. Pass arguments to more callees. (handle_integral_assign): Add argument. Create strinfo entries for MEM_REF assignments. (check_and_optimize_stmt): Handle more MEM_REF forms. gcc/testsuite/ChangeLog: PR middle-end/91582 * c-c++-common/Wrestrict.c: Adjust expected warnings. * gcc.dg/Warray-bounds-46.c: Disable -Wstringop-overflow. * gcc.dg/Warray-bounds-47.c: Same. * gcc.dg/Warray-bounds-52.c: New test. * gcc.dg/Wstringop-overflow-26.c: New test. * gcc.dg/Wstringop-overflow-27.c: New test. * gcc.dg/Wstringop-overflow-28.c: New test. * gcc.dg/attr-alloc_size.c (test): Disable -Warray-bounds. * gcc.dg/attr-copy-2.c: Adjust expected warnings. * gcc.dg/builtin-stringop-chk-5.c: Adjust text of expected messages. * gcc.dg/strlenopt-86.c: Relax test. * gcc.target/i386/pr82002-1.c: Prune expected warnings. diff --git a/gcc/builtins.c b/gcc/builtins.c index 1ee84f343a3..5db0bd3226c 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -48,6 +48,7 @@ along with GCC; see the file COPYING3. If not see #include "calls.h" #include "varasm.h" #include "tree-object-size.h" +#include "tree-ssa-strlen.h" #include "realmpfr.h" #include "cfgrtl.h" #include "except.h" @@ -3697,10 +3698,12 @@ check_access (tree exp, tree, tree, tree dstwrite, } /* If STMT is a call to an allocation function, returns the size - of the object allocated by the call. */ + of the object allocated by the call. If nonnull, set