On Mon, 13 Feb 2012, Richard Guenther wrote:

> Indeed.  But note that the transform is not valid as *this_node may cross
> a page boundary and thus either pointer load may trap if the other does not
> (well, unless the C standard (and thus our middle-end) would require that
> iff ptr->component does not trap that *ptr does not trap either - we would
> require a operand_equal_p (get_base_address ()) for both addresses).
> 
> Joseph, can you clarify what the C standard specifies here?

The question of what the relevant objects for an access are isn't 
well-defined in general, but it seems doubtful that accessing via a 
structure type is valid if the whole structure isn't in accessible memory.  
(Whereas you can't speculatively load from x[1] just because x[0] was 
accessed - x might point to an array of size 1.  And of course this 
applies with flexible array members - access to any bit of the structure 
means the part before the flexible array member is available, but the 
flexible array member may not extend beyond the part accessed.)

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to