On Sat, 7 Dec 2024 at 15:52, Martin Uecker <muecker@xxxxxxx> wrote: > > Can you point me to some horror stories? So the main issues tended to be about various static verification tools. Ranging from things like the stackleak plugin for gcc, where handling VLA's and alloca() (which are pretty much the same thing with different syntax) was just very much added complexity, to perhaps overly simplistic tools that literally just check the stack usage by parsing "objdump --disassemble" output and then building up approximate "this is the combined deepest stack" call chain approximations. And even in the *basic* infrastructure like gcc itself, VLA's simply made -Wframe-larger-than= just simply not work. I also have this memory of bad code generation (again, this is 5= years ago, so take this with a pinch of salt: dim memories), where gcc wouldn't end up re-using VLA stack slots, so VLA's made the frame bigger for that reason or something like that. We explicitly use "-fconserve-stack" to get gcc to reuse spill slots, because gcc has been known to sometimes makes insanely piggish stack frames when it just creates a spill slot for *everything*, even if the spills aren't live at the same time (think big functions with lots of case statements). We also had several cases of the VLA's just being silly, when a simple constant-sized allocation just worked fine and didn't generate pointless extra code. Pretty much none of the code core actually ever wanted VLA's, so the end result was that we had these bad patterns mainly in random drivers etc. Don't do that. Linus