https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94004
Bug ID: 94004 Summary: missing -Walloca on calls to alloca due to -Wno-system-headers Product: gcc Version: 10.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: --- When alloca is a macro defined in a system header like <alloca.h> (for example in Glibc), the -Walloca and -Walloca-larger-than= don't point out offending calls to alloca unless -Wsystem-headers is also set. $ cat t.c && gcc -S -O2 -Walloca-larger-than=8 t.c #include <alloca.h> void f (void*, ...); void g (int n) { if (n < 88888) n = 88888; char *p = (char*) __builtin_alloca (n); // warning (good) f (p, 0); } void h (int n) { if (n < 99999) n = 99999; char *p = (char*) alloca (n); // missing warning f (p, 1); } t.c: In function ‘g’: t.c:9:21: warning: argument to ‘alloca’ may be too large [-Walloca-larger-than=] 9 | char *p = (char*) __builtin_alloca (n); | ^~~~~~~~~~~~~~~~~~~~ t.c:9:21: note: limit is 8 bytes, but argument may be as large as 2147483647 When -Wsystem-headers is also set on the command line GCC diagnoses both calls as expected: t.c:9:21: warning: argument to ‘alloca’ may be too large [-Walloca-larger-than=] 9 | char *p = (char*) __builtin_alloca (n); | ^~~~~~~~~~~~~~~~~~~~ t.c:9:21: note: limit is 8 bytes, but argument may be as large as 2147483647 In file included from t.c:1: t.c: In function ‘h’: t.c:17:21: warning: argument to ‘alloca’ may be too large [-Walloca-larger-than=] 17 | char *p = (char*) alloca (n); | ^~~~~~ t.c:17:21: note: limit is 8 bytes, but argument may be as large as 2147483647