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.


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.

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.

Bruno




Reply via email to