Hi Bruno, On Thursday, 2022-06-16 at 23:20:58 +02, Bruno Haible wrote: > Darren Kenny wrote: >> The use of variable-length arrays (VLAs) is disabled by default in >> clang 9 and above. > > I think this is an incorrect statement. > > When I compile this file (with pragmas commented out) > =============================== foo.c ============================== > // # pragma GCC diagnostic push > // # pragma GCC diagnostic ignored "-Wvla" > > typedef struct regex_t regex_t; > typedef struct { long rm_so; long rm_eo; } regmatch_t; > > extern int regexec (const regex_t *, const char *, unsigned int nmatch, > regmatch_t pmatch[nmatch], int); > > // # pragma GCC diagnostic pop > ==================================================================== > > with clang 13, I get: > $ clang -Wall -S foo.c > $ clang -Wall -Wvla -S foo.c > foo.c:7:91: warning: variable length array used [-Wvla] > extern int regexec (const regex_t *, const char *, unsigned int nmatch, > regmatch_t pmatch[nmatch], int); > > ^~~~~~ > 1 warning generated. >
You're correct, I mis-read the compile line and believed that -Wvla was being inferred by the -Wall. > > That means: > * VLAs generate *warnings* (not errors!) when used with -Wvla. > * By default, even with -Wall, there is no warning. > >> -Weverything/-Werror > > Use of '-Werror' is not supported with Gnulib. > Hmm, that is something that I was unaware of, and an avenue for me to pursue with GRUB which uses it. > Additionally, not all GCC and not all clang warnings are supported in Gnulib > code. Since 2022-01-05, gnulib-tool even explicitly disables particularly > pointless warning options. OK, Thanks, Darren.