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

            Bug ID: 90376
           Summary: spurious -Warray-bounds on memset() of several
                    struct's subobjects
           Product: gcc
           Version: 9.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ryabinin.a.a at gmail dot com
  Target Milestone: ---

This is new on gcc 9.

# cat array_bounds.c

struct trace_iterator {
        char a;
        int seq;
        long b;
};

void f(void)
{
        static struct trace_iterator iter;
        __builtin_memset(&iter.seq, 0,
                sizeof(struct trace_iterator) -
                __builtin_offsetof(struct trace_iterator, seq));

}

# gcc -O2 -c -Warray-bounds array_test.c
array_test.c: In function ‘f’:
array_test.c:12:2: warning: ‘__builtin_memset’ offset [9, 16] from the object
at ‘iter’ is out of the bounds of referenced subobject ‘seq’ with type ‘int’ at
offset 4 [-Warray-bounds]
   12 |  __builtin_memset(&iter.seq, 0,
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   13 |   sizeof(struct trace_iterator) -
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   14 |   __builtin_offsetof(struct trace_iterator, seq));
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Reply via email to