[LLVMdev] Why "I = ++I" instead of "++I" in COFFDump.cpp ?

Richard Smith richard at metafoo.co.uk
Mon Apr 7 17:21:53 PDT 2014


On Mon, Apr 7, 2014 at 12:09 PM, Joerg Sonnenberger <joerg at britannica.bec.de
> wrote:

> On Mon, Apr 07, 2014 at 08:38:58AM -0600, Richard wrote:
> > Oops, meant to send this to the mailing list instead of to Reid
> > privately. (Why cc the mailing list instead of just sending to the
> > mailing list?)
> >
> > In article <CACs=
> tyJ6zaHeiS0eNhBkdcZE--JY4k7yH9_P1yFbGqod6uymMw at mail.gmail.com>,
> >     Reid Kleckner <rnk at google.com> writes:
> >
> > > Looks like a bug.  This can probably be simplified with C++11.
> > >
> > > On Fri, Apr 4, 2014 at 10:39 AM, Robison, Arch <arch.robison at intel.com
> >wrote:
> > >
> > > >   for (; I != E; I = ++I) {
> > > >       ...
> > > >   }
> > > >
> > > > Is there a reason for writing "I = ++I" instead of "++I" ?
> >
> > I don't see how it's a bug because functionality isn't impacted by
> > this.  It's simply a redundant assignment.
>
> It is a bug as it violates the sequence point rule. One memory location
> shall not be modified twice.


Not in C++11, and (probably) not in C11. The side-effect of pre-increment
is sequenced before its value computation, and its value computation is
sequenced before the assignment. (C++ doesn't have sequence points any
more, and C only has them as a vestigial remnant of the pre-memory-model
world.)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140407/09541b3f/attachment.html>


More information about the llvm-dev mailing list