[Bug middle-end/91679] missing -Warray-bounds accessing a member array in a local buffer

2019-11-01 Thread msebor at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91679

Martin Sebor  changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
  Known to work||10.0
 Resolution|--- |FIXED
   Target Milestone|--- |10.0
  Known to fail||7.3.0, 8.3.0, 9.2.0

--- Comment #4 from Martin Sebor  ---
With the patch GCC 10.0 diagnoses the test case like so:

pr91679.c: In function ‘h’:
pr91679.c:13:7: warning: array subscript 4 is above array bounds of ‘short
int[1]’ [-Warray-bounds]
   13 |   p->a[4] = 4;   // out of bounds, missing warning
  |   ^~~
pr91679.c:4:9: note: while referencing ‘a’
4 |   short a[1];
  | ^

[Bug middle-end/91679] missing -Warray-bounds accessing a member array in a local buffer

2019-11-01 Thread msebor at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91679

--- Comment #3 from Martin Sebor  ---
Author: msebor
Date: Fri Nov  1 21:09:20 2019
New Revision: 277728

URL: https://gcc.gnu.org/viewcvs?rev=277728&root=gcc&view=rev
Log:
PR middle-end/91679 - missing -Warray-bounds accessing a member array in a
local buffer
PR middle-end/91647 - new FAILs for Warray-bounds-8 and Wstringop-overflow-3.C
PR middle-end/91463 - missing -Warray-bounds accessing past the end of a
statically initialized flexible array member
PR middle-end/92312 - bogus -Wstringop-overflow storing into a trailing array
backed by larger buffer

gcc/ChangeLog:

PR middle-end/91679
PR middle-end/91647
PR middle-end/91463
PR middle-end/92312
* c-family/c-pretty-print.c (direct_abstract_declarator): Print
bound in zero-length arrays.
* gcc/c-family/c.opt (-Wzero-length-bounds): New option.
* gcc/doc/invoke.texi (-Wzero-length-bounds): Document.
* gimple-match-head.c (try_conditional_simplification): Use memcpy
instead of a hand-rolled loop to avoid PR 92323.
* tree-vrp.c (vrp_prop::check_array_ref): Handle trailing arrays
with initializers.
(vrp_prop::check_mem_ref): Handle declared struct objects.
* tree.c (last_field): New function.
(array_at_struct_end_p): Handle MEM_REF.
(get_initializer_for): New helper.
(component_ref_size): Add argument.  Rename locals.  Call
get_initializer_for instead of fold_ctor_reference.  Correct handling
of flexible array members.
* wide-int.h (generic_wide_int ::sign_mask): Assert invariant.

gcc/testsuite/ChangeLog:

PR middle-end/91679
PR middle-end/91647
PR middle-end/91463
PR middle-end/92312
* c-c++-common/Warray-bounds-2.c: Disable VRP.  Adjust expected
messages.
* g++.dg/warn/Warray-bounds-8.C: Remove xfails.
* gcc.dg/Warray-bounds-48.c: New test.
* gcc.dg/Warray-bounds-49.c: New test.
* gcc.dg/Wstringop-overflow-16.c: Adjust text of expected messages.
* gcc.dg/Wstringop-overflow-21.c: New test.
* gcc.dg/Wzero-length-array-bounds.c: New test.
* gcc.dg/pr36902.c: Remove xfail.
* gcc.dg/strlenopt-57.c: Add an expected warning.


Added:
trunk/gcc/testsuite/gcc.dg/Warray-bounds-48.c
trunk/gcc/testsuite/gcc.dg/Warray-bounds-49.c
trunk/gcc/testsuite/gcc.dg/Wstringop-overflow-21.c
trunk/gcc/testsuite/gcc.dg/Wzero-length-array-bounds.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/c-family/c-pretty-print.c
trunk/gcc/c-family/c.opt
trunk/gcc/doc/invoke.texi
trunk/gcc/gimple-match-head.c
trunk/gcc/testsuite/ChangeLog
trunk/gcc/testsuite/c-c++-common/Warray-bounds-2.c
trunk/gcc/testsuite/g++.dg/warn/Warray-bounds-8.C
trunk/gcc/testsuite/gcc.dg/Warray-bounds-46.c
trunk/gcc/testsuite/gcc.dg/Wstringop-overflow-16.c
trunk/gcc/testsuite/gcc.dg/pr36902.c
trunk/gcc/testsuite/gcc.dg/strlenopt-57.c
trunk/gcc/tree-vrp.c
trunk/gcc/tree.c
trunk/gcc/tree.h
trunk/gcc/wide-int.h

[Bug middle-end/91679] missing -Warray-bounds accessing a member array in a local buffer

2019-09-06 Thread msebor at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91679

Martin Sebor  changed:

   What|Removed |Added

   Keywords||patch

--- Comment #2 from Martin Sebor  ---
Patch: https://gcc.gnu.org/ml/gcc-patches/2019-09/msg00425.html

[Bug middle-end/91679] missing -Warray-bounds accessing a member array in a local buffer

2019-09-05 Thread msebor at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91679

Martin Sebor  changed:

   What|Removed |Added

   Keywords||diagnostic
 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2019-09-05
 Blocks||56456
   Assignee|unassigned at gcc dot gnu.org  |msebor at gcc dot 
gnu.org
 Ever confirmed|0   |1

--- Comment #1 from Martin Sebor  ---
Testing a patch.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56456
[Bug 56456] [meta-bug] bogus/missing -Warray-bounds