On Mon, Mar 9, 2015 at 8:26 PM, Robbert Krebbers
<[email protected]> wrote:
> I was wondering whether GCC uses 6.5.16.1p3 of the C11 standard as a license
> to perform certain optimizations. If so, could anyone provide me an example
> program.
>
> In particular, I am interested about the "then the overlap shall be exact"
> part of 6.5.16.1p3:
>
> If the value being stored in an object is read from another
> object that overlaps in any way the storage of the first
> object, then the overlap shall be exact and the two objects
> shall have qualified or unqualified versions of a compatible
> type; otherwise, the behavior is undefined.
struct X { int i; int j; };
int foo (struct X *p, struct X *q)
{
q->j = 1;
p->i = 0;
return q->j;
}
will optimize to return 1. If *p and *q were allowed to overlap
(&p->i == &q->j)
this would invoke undefined behavior.
Richard.