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

            Bug ID: 80020
           Summary: gcc confused about aligned_alloc argument order
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

>From https://bugzilla.redhat.com/show_bug.cgi?id=1431367.  Attribute alloc_size
added to __builtin_aligned_alloc in builtins.def in r243470 specifies argument
1 when the correct argument is actually 2.  This causes -Wstringop-overflow=
false positives and negatives, and with _FORTIFY_SOURCE, leads to aborts at
runtime.

$ cat u.c && gcc -O2 -S -Wall -Wextra -Wpedantic u.c
char d[7];

void f (void)
{
  unsigned size = 16;
  void *p = __builtin_aligned_alloc (4, size);
  __builtin___memset_chk (p, 0, size, __builtin_object_size (p, 0));
}
u.c: In function ‘f’:
u.c:7:3: warning: ‘__builtin___memset_chk’ writing 16 bytes into a region of
size 4 overflows the destination [-Wstringop-overflow=]
   __builtin___memset_chk (p, 0, size, __builtin_object_size (p, 0));
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Reply via email to