[Bug tree-optimization/102151] Spurious warning by -Warray-bounds when allocating with flexible array member

2021-09-01 Thread gniibe at fsij dot org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102151

--- Comment #4 from Niibe Yutaka  ---
Thank you for the explanation.  I understand how (current version of) GCC
warns.

>From the viewpoint of use of structure with flexible array member, still, this
could be considered as a bug of GCC, because the warning itself is irrelevant.

My point is that:

(1) In the test case, use of offsetof(struct arg_and_data_s, arg) is valid (I
mean, no violation of language/feature).  In other words,

(2) Allocated space for an object of the structure may be smaller than
sizeof().  There are such cases, for structure with flexible array member,
because of structure alignment.

(3) It seems for me that by (current version of) GCC, the fact (2) is ignored.

[Bug tree-optimization/102151] Spurious warning by -Warray-bounds when allocating with flexible array member

2021-09-01 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102151

Martin Sebor  changed:

   What|Removed |Added

 CC||msebor at gcc dot gnu.org
   See Also||https://gcc.gnu.org/bugzill
   ||a/show_bug.cgi?id=101436
 Status|UNCONFIRMED |RESOLVED
 Resolution|--- |INVALID

--- Comment #3 from Martin Sebor  ---
As Andrew explained, the first operand in the -> expression needs to point to
an object of the type whose member is being accessed or at least as big as one,
and the warning is designed to point out when it's not (arguably, it could be
phrased better).  The following is a small test case to illustrate the warning
(see also pr101436 comment 2 for a similar C++ test case).

$ cat pr102151.c && gcc -O2 -S -Wall pr102151.c
struct S { char a, b; };

extern char c;

void f (void)
{
  struct S *p = 
  p->a = 0;
}
pr102151.c: In function ‘f’:
pr102151.c:7:17: warning: initialization of ‘struct S *’ from incompatible
pointer type ‘char *’ [-Wincompatible-pointer-types]
7 |   struct S *p = 
  | ^
pr102151.c:8:4: warning: array subscript ‘struct S[0]’ is partly outside array
bounds of ‘char[1]’ [-Warray-bounds]
8 |   p->a = 0;
  |^~
pr102151.c:3:13: note: while referencing ‘c’
3 | extern char c;
  | ^

[Bug tree-optimization/102151] Spurious warning by -Warray-bounds when allocating with flexible array member

2021-08-31 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102151

--- Comment #2 from Andrew Pinski  ---
I think the malloc needs to be at least the sizeof which is why it is
complaining.