https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78837
Bug ID: 78837 Summary: missing -Walloca-larger-than on a call in a ternary expression Product: gcc Version: 7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org Target Milestone: --- Both -Walloca-larger-than and -Walloc-larger-than fail to diagnose calls where the called function is the result of a ternary operator, as in (n < 123 ? alloca : malloc)(n): $ cat d.c && gcc -O2 -S -Walloca-larger-than=10 -Walloc-size-larger-than=10 d.c void f0 (void*); void f1 (unsigned n) { void *p; if (n < 32) n = 32; if (n < 123) p = __builtin_alloca (n); else p = __builtin_malloc (n); f0 (p); } void f2 (unsigned n) { if (n < 32) n = 32; void *p = (123 < n ? __builtin_malloc: __builtin_alloca)(n); // missing warning f0 (p); } d.c: In function ‘f1’: d.c:11:7: warning: argument to ‘alloca’ may be too large [-Walloca-larger-than=] p = __builtin_alloca (n); ~~^~~~~~~~~~~~~~~~~~~~~~ d.c:11:7: note: limit is 10 bytes, but argument may be as large as 122 d.c:13:7: warning: argument 1 range [32, 4294967295] exceeds maximum object size 10 [-Walloc-size-larger-than=] p = __builtin_malloc (n); ~~^~~~~~~~~~~~~~~~~~~~~~ d.c:13:7: note: in a call to built-in allocation function ‘__builtin_malloc’