[Bug driver/71905] New: bogus -Wlarger-than=N and -Wframe-larger-than warnings on small objects with large N
msebor at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Jul 16 19:19:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71905
Bug ID: 71905
Summary: bogus -Wlarger-than=N and -Wframe-larger-than warnings
on small objects with large N
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: driver
Assignee: unassigned at gcc dot gnu.org
Reporter: msebor at gcc dot gnu.org
Target Milestone: ---
As discussed in the thread Re: RFA: new pass to warn on questionable uses of
alloca() and VLAs (https://gcc.gnu.org/ml/gcc-patches/2016-07/msg00953.html),
the -Wlarger-than=N and -Wframe-larger-than=N options accept arguments in
excess of 32-bits but apparently store their arguments as an unsigned int and
int, respectively, allowing slicing and conversion errors.
Likewise, the checkers for the options interpret the arguments as 32-bit
integers resulting in incorrect warnings when the N argument exceeds UINT_MAX
or INT_MAX, respectively.
If storing and correctly interpreting very large arguments isn't possible, the
driver should detect such arguments, and either issue a warning and disable the
corresponding option or issue an error.
(As a data point, Clang treats option arguments as 32-bit unsigned int and
issues the following warning when it's out of bounds:
clang (LLVM option parsing): for the -warn-stack-size option: '4294967316'
value invalid for uint argument!)
$ cat x.c && /build/gcc-walloca/gcc/xgcc -B /build/gcc-walloca/gcc -S -Wall
-Wextra -Wpedantic -Wlarger-than=$((256*256*256*256+20))
-Wframe-larger-than=$((256*256*256*129)) x.c
void f (void*);
char a [32];
void g (void)
{
char b [32];
f (b);
}
x.c:3:6: warning: size of ‘a’ is 32 bytes [-Wlarger-than=]
char a [32];
^
x.c: In function ‘g’:
x.c:7:8: warning: size of ‘b’ is 32 bytes [-Wlarger-than=]
char b [32];
^
x.c:9:1: warning: the frame size of 32 bytes is larger than -2130706432 bytes
[-Wframe-larger-than=]
}
^
More information about the Gcc-bugs
mailing list