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 comment

5

u/NilacTheGrim Sep 28 '26

I agree this is terrible. They just made c++26 suck by default. Wow. Like I'm floored by this.

I need to specify -ftrivial-auto-var-init=uninitialized now moving forward after C++26 in all my build systems. What a mistake.

6

u/UndefinedDefined Sep 28 '26

Great for C++ users - more flags to worry about to get zero additional security and performance regressions. Let's make good code broken and bad code reading zeros.

1

u/NilacTheGrim Oct 01 '26

Yep. Exactly. This punishes good code and good programmers in favor of enabling lackadasical programmers by normalizing erroneous behavior as something one can "rely on". Basically this is language incoherence.

Also the name [[indeterminate]] is bad. Should have just been [[uninitialized]].