[Bug c++/85783] New: alloc-size-larger-than fires incorrectly with new[] and can't be disabled
psmith at gnu dot org
gcc-bugzilla@gcc.gnu.org
Mon May 14 21:20:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85783
Bug ID: 85783
Summary: alloc-size-larger-than fires incorrectly with new[]
and can't be disabled
Product: gcc
Version: 8.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: psmith at gnu dot org
Target Milestone: ---
Created attachment 44131
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44131&action=edit
sample source file
GCC 8.1.0 / binutils 2.30
GNU/Linux x86_64 with a sysroot of Red Hat EL 6.5.
Recently I started upgrading from GCC 7.3 to GCC 8.1. I discovered three
locations in my codebase where the alloc-size-larger-than warning is generated.
It wasn't ever generated with 7.3. Since I build with -Wall -Werror this
causes compiles to fail.
The first issue is, I wasn't able to find any way to turn off this warning
other than by removing -Wall which seems entirely too severe. There should be
some way to disable it; maybe by providing -Walloc-size-larger-than=0 or
similar.
I did work around this issue by casting the value given to new[] to type
unsigned int, but that's unpleasant.
Of course removing the false positive would be helpful as well.
I spent quite a while trying to create a small sample; the results are below.
Most any change to this file appears to cause the warning to go away: for
example I tried to use a simple template I created rather than
std::shared_ptr<>, or even remove that field altogether: no warning. If I
remove or modify the if-statements in the method significantly, no warning.
Etc. I didn't try all changes of course. Also without optimization it doesn't
warn but with both -O1 and -O2 it does.
Results of compiling the attached file:
$ x86_64-rh65-linux-gnu-g++ -v -o /tmp/SP.o -c -O2 -Wall -Werror params.cpp
Using built-in specs.
COLLECT_GCC=/work/src/build/x86_64-linux/cc/generic/bin/x86_64-generic-linux-gnu-g++
Target: x86_64-generic-linux-gnu
Configured with: /work/src/cc/gcc-8.1.0/configure --disable-nls
--disable-werror --prefix=/work/src/cc/x86_64-linux/final/generic
--host=x86_64-tools-linux-gnu --target=x86_64-generic-linux-gnu
--with-sysroot=/work/src/build/x86_64-linux/sysroot/generic CFLAGS=-O2
CXXFLAGS=-O2 LDFLAGS=-O2 --enable-gold --enable-languages=c,c++
Thread model: posix
gcc version 8.1.0 (GCC)
COLLECT_GCC_OPTIONS='-m64' '-isystem' '=/usr/include-fixed' '-v' '-o'
'/tmp/SP.o' '-c' '-O2' '-Wall' '-Werror' '-shared-libgcc' '-mtune=generic'
'-march=x86-64'
/work/src/build/x86_64-linux/cc/generic/bin/../libexec/gcc/x86_64-generic-linux-gnu/8.1.0/cc1plus
-quiet -v -iprefix
/work/src/build/x86_64-linux/cc/generic/bin/../lib/gcc/x86_64-generic-linux-gnu/8.1.0/
-isysroot /work/src/build/x86_64-linux/sysroot/rh65 -D_GNU_SOURCE -isystem
=/usr/include-fixed params.cpp -quiet -dumpbase SortParameters.cpp -m64
-mtune=generic -march=x86-64 -auxbase-strip /tmp/SP.o -O2 -Wall -Werror
-version -o /tmp/ccuJobAh.s
GNU C++14 (GCC) version 8.1.0 (x86_64-generic-linux-gnu)
compiled by GNU C version 8.1.0, GMP version 6.1.0, MPFR version 3.1.4,
MPC version 1.0.3, isl version isl-0.18-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: e2fe942476766bd673c0e36030131141
In function 'void* operator new [](size_t)',
inlined from 'static Params* Params::buildParams(size_t, Info*)' at
params.cpp:52:47:
params.cpp:8:21: error: argument 1 value '18446744073709551615' exceeds
maximum object size 9223372036854775807 [-Werror=alloc-size-larger-than=]
void* p = malloc(size);
~~~~~~^~~~~~
...
/work/src/build/x86_64-linux/sysroot/rh65/usr/include/stdlib.h: In static
member function 'static Params* Params::buildParams(size_t, Info*)':
/work/src/build/x86_64-linux/sysroot/rh65/usr/include/stdlib.h:471:14: note:
in a call to allocation function 'void* malloc(size_t)' declared here
extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur;
^~~~~~
cc1plus: all warnings being treated as errors
More information about the Gcc-bugs
mailing list