This is the mail archive of the gcc@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: Undefined behavior due to 6.5.16.1p3


On Mon, Mar 9, 2015 at 8:26 PM, Robbert Krebbers
<mailinglists@robbertkrebbers.nl> 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.


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