[PATCH] D68115: Zero initialize padding in unions

Hubert Tong via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 27 20:01:18 PDT 2019


hubert.reinterpretcast added a comment.

In D68115#1686837 <https://reviews.llvm.org/D68115#1686837>, @jfb wrote:

> The entire point of this feature is to add guardrails to the language.


I agree, and guardrails have a tendency to scratch paint if one drives against them.

> What do people expect in the real world? Is there a cost to meeting these expectations?

The patch as-is moves past the scope of the `-ftrivial-auto-var-init` feature. The specific case I wrote the inline comment on is an instance where the initialization strategy appears deliberate and costs less space in the compiled binary than the case where the initialization strategy is hampered by trying to initialize bytes that are defined as holding indeterminate values. Paying for this extra space should require opting into (such as by using `-ftrivial-auto-var-init`).

> If we put the pattern (0x00 or 0xaa) in the technically undef space, what comes out?

To extend the analogy, `0x00` seems to be the bumper car version in the context of the current discussion. Applications that have issues around uninitialized bytes in unions might be workable when using `0x00` as the pattern. With a non-bumper car pattern, it would become more clear to users when they are driving against the guardrails, so they aren't instead surprised when they fall off a cliff.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D68115/new/

https://reviews.llvm.org/D68115





More information about the cfe-commits mailing list