[Bug c/83172] -Wstack-size= doesn't detect the correct stack size with VLA or alloca
ebotcazou at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Nov 27 20:06:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83172
Eric Botcazou <ebotcazou at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|WAITING |NEW
--- Comment #3 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
> The same result:
>
> $ gcc-7 -Wvla-larger-than=128 -Wstack-usage=102400 -O0 -c t.c
> t.c: In function ‘stack_usage_only’:
> t.c:23:5: warning: stack usage might be unbounded [-Wstack-usage=]
> int stack_usage_only(unsigned x)
> ^~~~~~~~~~~~~~~~
> t.c: In function ‘alloca_fails_even_with_const’:
> t.c:32:5: warning: stack usage might be unbounded [-Wstack-usage=]
> int alloca_fails_even_with_const()
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> -O1 results the same.
Try -Wvla-larger-than=100 though.
In any case, note that for:
int vla_size_only(unsigned x)
{
if(x > 128) __builtin_unreachable();
char buf[x];
do_something(buf);
return 0;
}
the warning is expected since the code may allocate more than 128 bytes.
-Wstack-usage is designed to be *conservatively* correct and to yield the same
result at all optimization levels, i.e. it will never say that the stack usage
is bounded if there is a path where it may not be. So it's very different from
-Wvla-larger-than or -Walloca-larger-than which say nothing at -O0 or -O1 and
are not conservatively correct.
More information about the Gcc-bugs
mailing list