public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/102151] New: Spurious warning by -Warray-bounds when allocating with flexible array member
@ 2021-09-01  1:42 gniibe at fsij dot org
  2021-09-01  1:58 ` [Bug c/102151] " gniibe at fsij dot org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: gniibe at fsij dot org @ 2021-09-01  1:42 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102151

            Bug ID: 102151
           Summary: Spurious warning by -Warray-bounds when allocating
                    with flexible array member
           Product: gcc
           Version: 11.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gniibe at fsij dot org
  Target Milestone: ---

Created attachment 51392
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=51392&action=edit
Test with smaller size and valid access to the structure with flexible array
member

When allocating memory with smaller size than
sizeof(a_structure_with_flexible_member), for (valid) access to the structure,
compiler emits spurious warning, in some optimization level.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c/102151] Spurious warning by -Warray-bounds when allocating with flexible array member
  2021-09-01  1:42 [Bug c/102151] New: Spurious warning by -Warray-bounds when allocating with flexible array member gniibe at fsij dot org
@ 2021-09-01  1:58 ` gniibe at fsij dot org
  2021-09-01  2:48 ` [Bug tree-optimization/102151] " pinskia at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: gniibe at fsij dot org @ 2021-09-01  1:58 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102151

Niibe Yutaka <gniibe at fsij dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |gniibe at fsij dot org

--- Comment #1 from Niibe Yutaka <gniibe at fsij dot org> ---
struct arg_and_data_s
{
  struct arg_and_data_s *next;
  unsigned int len;
  char arg[];
};

sizeof(struct arg_and_data_s) is 16 for x86_64.
offsetof (struct arg_and_data_s, arg) is 12.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug tree-optimization/102151] Spurious warning by -Warray-bounds when allocating with flexible array member
  2021-09-01  1:42 [Bug c/102151] New: Spurious warning by -Warray-bounds when allocating with flexible array member gniibe at fsij dot org
  2021-09-01  1:58 ` [Bug c/102151] " gniibe at fsij dot org
@ 2021-09-01  2:48 ` pinskia at gcc dot gnu.org
  2021-09-01 15:02 ` msebor at gcc dot gnu.org
  2021-09-02  2:34 ` gniibe at fsij dot org
  3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-09-01  2:48 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102151

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I think the malloc needs to be at least the sizeof which is why it is
complaining.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug tree-optimization/102151] Spurious warning by -Warray-bounds when allocating with flexible array member
  2021-09-01  1:42 [Bug c/102151] New: Spurious warning by -Warray-bounds when allocating with flexible array member gniibe at fsij dot org
  2021-09-01  1:58 ` [Bug c/102151] " gniibe at fsij dot org
  2021-09-01  2:48 ` [Bug tree-optimization/102151] " pinskia at gcc dot gnu.org
@ 2021-09-01 15:02 ` msebor at gcc dot gnu.org
  2021-09-02  2:34 ` gniibe at fsij dot org
  3 siblings, 0 replies; 5+ messages in thread
From: msebor at gcc dot gnu.org @ 2021-09-01 15:02 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102151

Martin Sebor <msebor at gcc dot gnu.org> 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 <msebor at gcc dot gnu.org> ---
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 = &c;
  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 = &c;
      |                 ^
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;
      |             ^

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug tree-optimization/102151] Spurious warning by -Warray-bounds when allocating with flexible array member
  2021-09-01  1:42 [Bug c/102151] New: Spurious warning by -Warray-bounds when allocating with flexible array member gniibe at fsij dot org
                   ` (2 preceding siblings ...)
  2021-09-01 15:02 ` msebor at gcc dot gnu.org
@ 2021-09-02  2:34 ` gniibe at fsij dot org
  3 siblings, 0 replies; 5+ messages in thread
From: gniibe at fsij dot org @ 2021-09-02  2:34 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102151

--- Comment #4 from Niibe Yutaka <gniibe at fsij dot org> ---
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.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-09-02  2:34 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-01  1:42 [Bug c/102151] New: Spurious warning by -Warray-bounds when allocating with flexible array member gniibe at fsij dot org
2021-09-01  1:58 ` [Bug c/102151] " gniibe at fsij dot org
2021-09-01  2:48 ` [Bug tree-optimization/102151] " pinskia at gcc dot gnu.org
2021-09-01 15:02 ` msebor at gcc dot gnu.org
2021-09-02  2:34 ` gniibe at fsij dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).