https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118474
Bug ID: 118474
Summary: -Wanalyzer-allocation-size false positive with -O0
-fsanitize=integer-divide-by-zero -fanalyzer
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: analyzer
Assignee: dmalcolm at gcc dot gnu.org
Reporter: xry111 at gcc dot gnu.org
Target Milestone: ---
void *realloc (void *, unsigned long)
__attribute__((__nothrow__, __leaf__))
__attribute__((__warn_unused_result__)) __attribute__((__alloc_size__ (2)));
long *
slurp1 (long *buffer, unsigned long file_size)
{
return (long *) realloc (buffer, file_size - file_size % sizeof (long));
}
With -fanalyzer -O0 -fsanitize=integer-divide-by-zero:
ana.c: In function 'slurp1':
ana.c:8:19: warning: allocated buffer size is not a multiple of the pointee's
size [CWE-131] [-Wanalyzer-allocation-size]
8 | return (long *) realloc (buffer, file_size - file_size % sizeof
(long));
|
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'slurp1': event 1
|
| 8 | return (long *) realloc (buffer, file_size - file_size % sizeof
(long));
| |
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (1) allocated 'file_size - (file_size & 7)'
bytes and assigned to 'long int *' here; 'sizeof (long int)' is '8'
|
TL;DR the background is: I'm doing an experiment to change LoongArch
-mcheck-zero-division to an alias of -fsanitize=integer-divide-by-zero
-fsanitize-trap=integer-divide-by-zero instead of some magic in the machine
description. I attempted to keep -mcheck-zero-division the default at -O0/-Og
for "backward compatibility" but then my attempt effectively turned
-fsanitize=integer-divide-by-zero -fsanitize-trap=integer-divide-by-zero on by
default and caused a bunch of test failures not expecting the sanitizer. Maybe
I'll just abandon my attempt and make -mno-check-zero-division the default for
all optimization levels, but I think this bug report is valid on its own...