[PATCH] D68115: Zero initialize padding in unions

JF Bastien via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Apr 5 20:49:16 PDT 2020


jfb added a comment.

> That sounds reasonable to me. So the behavior we're looking for is:
> 
> - If `-ftrivial-auto-init` is off, then we guarantee to zero padding when the language spec requires it, and otherwise provide no such guarantee.
> - If `-ftrivial-auto-init=zeroes` then we guarantee to zero padding within structs and unions with automatic storage duration, when that padding would otherwise be left uninitialized.
> - If `-ftrivial-auto-init=pattern` then we guarantee to pattern-fill padding within structs and unions with automatic storage duration, when that padding would otherwise be left uninitialized (and will provide the zeroes required by the language rule when that is the required behavior).

That's exactly what I'd like, yes!

> [One possible tweak: for the `pattern` case, should we guarantee that the uninitialized padding will be pattern-filled? It would be simpler if we guaranteed it to be *either* zero- or pattern-filled; that way we can provide a conservatively-correct approximation by zero-filling whenever we're unsure.]

Not guaranteeing a specific value for "pattern" remains my preferred choice. Where feasible, I'd rather we generate the most-repeated pattern so it's cheaper to synthesize.

> And we do not initially provide any guarantees as to what happens to padding within objects of other storage durations beyond what the language spec requires. (We might at some point in the future, but that would be behind a separate flag from `-ftrivial-auto-init`.) I'd be happy with that approach. Does that address everyone's concerns?

Yup!


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