https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101494
Bug ID: 101494 Summary: -Wmaybe-uninitialized false alarm with memrchr of size 0 Product: gcc Version: 11.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: eggert at cs dot ucla.edu Target Milestone: --- I ran into this problem when compiling Gnulib tests on gcc (GCC) 11.1.1 20210531 (Red Hat 11.1.1-3) on x86-64. Here is a stripped down program illustrating the bug: void *malloc (unsigned long) __attribute__((__malloc__)) __attribute__((__alloc_size__ (1))); void *memrchr (const void *, int, unsigned long) __attribute__((__access__ (__read_only__, 1, 3))); int main (void) { char *input = malloc (1); if (!input) return 1; *input = 0; return !!memrchr (input, 'a', 0); } The following command: gcc -Wmaybe-uninitialized -O2 -S w.i outputs: w.i: In function 'main': w.i:14:12: warning: 'input' may be used uninitialized [-Wmaybe-uninitialized] 14 | return !!memrchr (input, 'a', 0); | ^~~~~~~~~~~~~~~~~~~~~~~ w.i:4:7: note: in a call to 'memrchr' declared with attribute 'access (read_onl\ y, 1, 3)' here 4 | void *memrchr (const void *, int, unsigned long) | ^~~~~~~ This warning is bogus, as 'input' is initialized; and even if "input = 0;" were removed the call to memrchr would still be valid as the size argument is 0.