[Bug target/79671] [7 Regression] mapnik miscompilation on armv7hl since r235622
jason at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Mar 27 15:37:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79671
--- Comment #63 from Jason Merrill <jason at gcc dot gnu.org> ---
(In reply to rguenther@suse.de from comment #54)
> > > > --- Comment #51 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
> > > > Doesn't 3.10/10 explicitly say that it is undefined to use a union to
> > > > to move an object representation that is not a member of the union?
> But still the other clause says the storage representation is transfered
> and so you could read into that that no "access" happens and thus
> 3.10/10 doesn't apply.
Right, union copy copies the bytes of the object representation, i.e. memcpy.
(In reply to Richard Biener from comment #50)
> Note that what changed with GCC 7 is only that unions with char members
> no longer behave as alias-set zero but 12.8/16 talks about all unions,
> not just unions with char members.
>
> Now I read comment#14 as that _only_ char[] members (of structs or unions)
> may ever "contain" different dynamic types. Any pointer to a part of
> the standard that singles out char[] that way?
char is special that way because it can be used to access the stored value of
an object of any type (3.10/10.8).
Now that C++17 introduces std::byte for this sort of thing, I hope to
transition away from the permissive aliasing behavior of char.
More information about the Gcc-bugs
mailing list