Am Freitag, dem 27.02.2026 um 10:14 +0000 schrieb Jonathan Wakely: > On Fri, 27 Feb 2026 at 00:24, Yair Lenga via Gcc <[email protected]> wrote: > > > > Florian, > > > > Thanks for your suggestion. I'm already using macros, but that results > > in code that does not look like "C" any more. New "C" developers that > > are looking at hte code that uses DECLARE_VLA (or similar) macro - > > have trouble understanding this new construct, how to use it, > > limitations, etc (e.g., OK to use in `for (DECLARE_VLA(...) ; ; )`. > > That doesn't have to be a problem: > > #define ALLOW_VLA \ > _Pragma("GCC diagnostic push"); \ > _Pragma("GCC diagnostic ignored \"-Wvla\"") > > #define DISALLOW_VLA \ > _Pragma("GCC diagnostic pop") > > > ALLOW_VLA; > for (int vla[n]; ; ) > ... > DISALLOW_VLA; > > That doesn't interfere with the declaration. > > > > The attribute provide "in-langauge" support for the same functionality > > in a way that is consistent with [[fallthru]], and similar. > > C already allows in-language support for it, for 26 years now. If > somebody chooses to use -Wvla in non-C89 code, doesn't that mean they > actually want these warnings? The answer seems to be "don't do that > then". Adding an very narrowly focused attribute to say "don't warn > about this one very specific thing that we don't warn about anyway, > because it's valid C" seems like a very bad idea. Somebody has to > develop and test and maintain that attribute forever, for a very > narrow use case which is arguably just user error. Don't use -Wvla if > you want to compile code that uses VLAs. > > Your original motivation says: > > > However, there are occasional VLAs that are intentionally > > bounded/validated (e.g., small scratch buffers sized from known limits). > > If it has a known limit, why not just use a constant as the bound, so > it's not a VLA at all?
Adding a worst-case bound increases stack usage which may be undesirable and could - for example - turn a O(log(n)) to O(n^2) in a divide-and-conquer algorithm. You also then get the wrong result with ARRAY_SIZE or _Countof. It also makes warnings, _FORTIFY_SOURCE, and sanitizers less accurate. But we have -Wvla-larger-than= ! People should use this instead of -Wvla where bounded use is OK, and if this has usability issues, then we should address those. Martin > > And if it's only an occasional use, why is the existing pragma > solution so unusable? It already works, with all modern versions of > GCC. > > That said, maybe adorning the declaration with __extension__ could > disable the warning. That would avoid needing a new attribute just for > this one warning. -- Univ.-Prof. Dr. rer. nat. Martin Uecker Graz University of Technology Institute of Biomedical Imaging
