https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96503
Bug ID: 96503 Summary: attribute alloc_size effect lost after inlining Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: ipa Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org CC: marxin at gcc dot gnu.org Target Milestone: --- Similar to pr96502, the test case below shows that the effect of attribute alloc_size on warnings is also lost after inlining. I open this as a separate bug (and expect to raise others) because I expect the "fixes" to be different in each case. Like pr96502, this also came up in the following discussion: https://gcc.gnu.org/pipermail/gcc-patches/2020-August/551526.html $ cat x.c && gcc -O2 -S -Wall -Wextra -fdump-tree-optimized=/dev/stdout x.c int* f (int); __attribute__ ((alloc_size (1), noinline)) int* f0 (int n) { return f (n); } void h0 (void) { int *p = f0 (3); __builtin_memset (p, 0, 3 * sizeof p); // warning (good) } __attribute__ ((alloc_size (1))) int* f1 (int n) { return f (n); } void h1 (void) { int *p = f1 (3); __builtin_memset (p, 0, 3 * sizeof p); // missing warning } x.c: In function ‘h0’: x.c:9:3: warning: ‘__builtin_memset’ forming offset [3, 23] is out of the bounds [0, 3] [-Warray-bounds] 9 | __builtin_memset (p, 0, 3 * sizeof p); // warning (good) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~