Hi,

On Mon, 13 Nov 2017, Richard Biener wrote:

> The chance here is, of course (find the PR, it exists...), that SRA then 
> decomposes the char[] copy bytewise...
> 
> That said, memcpy folding is easy to fix.  The question is of course
> what the semantic of VIEW_CONVERTs is (SRA _does_ contain
> bail-outs on those).  Like if you have
> 
> struct A { short s; int i; } x;
> struct B { int i; short s; } y;
> 
> void foo ()
> {
>   x = VIEW_CONVERT <struct A> (y);
> }
> 
> so can you access padding via view-converting its value?  Ada uses 
> VIEW_CONVERT punning on structures a _lot_ (probably the reason for the 
> SRA bailout).

I would say a VIEW_CONVERT shouldn't be allowed to inspect padding on the 
RHS (and expected to clobber padding on the LHS).  That is, if you want to 
really really access padding on some struct type you can only use memcpy.  
(Or view-convert it to some char[N] array, perhaps there it makes sense to 
copy padding, i.e. regard that as a block copy).

The above example shows why I'm of this opinion.  Both structs have 
padding at different place, and it overlaps a member in the other 
struct.  I don't see how to give that any sane meaning (beyond always 
handling it as block copy, and which point we can as well give up and get 
rid of VIEW_CONVERT_EXPR in favor of explicit memcpy).


Ciao,
Michael.

Reply via email to