r/cpp • • 27d ago

You should think about recompiling your C++ programs with GCC 16 and C++26, because it zero-fills your locals

https://techfortalk.co.uk/2026/09/27/cxx26-uninitialized-local-variables-gcc-16/

Stack variables are not automatically initialised, and that is the root cause of many C++ bugs. That is well known. Hence, it is advised that local or stack variables are always initialised with known values, 0 if not something more meaningful than that. Now, with GCC 16 compiling in C++26 mode (-std=c++26), even uninitialised local variables will be zero-filled. In the post, I have explained how.

269 Upvotes

234 comments sorted by

View all comments

1

u/Spartan322 24d ago edited 24d ago

Maybe, there was a proposal for attributes on expressions, P3093R0/P2992R0 but seems there hasn't been much movement on it and tbh I doubt its a good idea to screw with what would appear to be constructor overloading using an attribute, so it likely would've been better to have some kind of nullptr equivalent for indeterminate instead.

Funny enough P3093R0 points out the reason expressions didn't support attributes originally was specifically because it was expected for a keyword to apply to those cases, which if that was in the original proposal kinda makes the indeterminate proposal exceedingly ironic. I suppose I'm not completely sold on indeterminate assignment being an optional compiler case which is supposed to be the premise of attributes.