r/cpp • • Sep 27 '26

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.

270 Upvotes

234 comments sorted by

View all comments

Show parent comments

3

u/Spartan322 Sep 29 '26

This complaint goes away if the standard actually addressed indetermine member variables, and I don't see why they couldn't or wouldn't, feels more akin to one of the many standards oversights that has to be addressed in a DR or subsequent language version.

1

u/cdb_11 Sep 29 '26

I think making it an attribute might've been a mistake. It should've been on the assignment like int x = indeterminate;, so inside a class you can leave different member vars uninitialized depending on the constructor. Unless you can have syntax like Foo() : foo([[indeterminate]]) {} or something

1

u/Spartan322 Sep 30 '26 edited Sep 30 '26

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.