This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix C++ strict-aliasing issues with memcpy folding


On Wed, 14 Apr 2010, Jason Merrill wrote:

> What's the status of these issues, now that 4.5 has branched?

I am developing the required infrastructure to support a proper
fix on the mem-ref2 branch.

> On 02/03/2010 02:14 PM, Mark Mitchell wrote:
> > This all depends on the fact that mem is an array of characters.  An
> > array of characters is always (in my model) understood to be a blob of
> > bytes in which you can create and destroy other objects.  The fact that
> > it's a non-static data member of X is not important.  My feeling is that
> > an array of characters is implicitly a union of the array of characters
> > and whatever type is created via placement new.
> 
> I agree with this.
> 
> In an earlier message in the thread Richard quoted the C standard:
> 
> 6.5/6 'If a value is copied into an object having no
> declared type using memcpy or memmove, or is copied as an
> array of character type, then the effective type of the
> modified object for that access and for subsequent accesses that
> do not modify the values is the effective type of the object
> from which the value is copied, if it has one'.
> 
> Note "or is copied as an array of character type".  Since struct assignment is
> defined as memberwise assignment and union assignment is defined as assignment
> of the value representation (which is an array of unsigned char), such an
> assignment should transfer the effective type of a subobject that completely
> overlaps either a union or an array of character type.

Correct.  I don't remember off-hand if the code as written in
libstdc++ and/or produced by the C++ frontend is recognizable
as such.  At least if we have an aggregate union assignment
we do not use alias-set zero for it, but we only special
case component-refs into union objects.  So, either we want
to treat union assignment uniformly in the middle-end and
have to adjust get_alias_set or the C/C++ langhooks need
adjustment here.  Note that I am not sure we're not pessimizing
much code that way.

Richard.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]