I'm fixing a bug which involves initialization of a field of an object
in its placement new function before the constructor is called.  This
is falling foul of DSE, which deletes the field initialization.

I see this:

  @item -fno-lifetime-dse
  @opindex fno-lifetime-dse
  In C++ the value of an object is only affected by changes within its
  lifetime: when the constructor begins, the object has an indeterminate
  value, and any changes during the lifetime of the object are dead when
  the object is destroyed.  Normally dead store elimination will take
  advantage of this; if your code relies on the value of the object
  storage persisting beyond the lifetime of the object, you can use this
  flag to disable this optimization.

I'm quite happy to believe this, and treat my bug simply as an error
between chair and keyboard, but I cannot find the language in the C++
standard which declares that the lifetime of an object begins with its
constructor, and thus any stores into the object performed by
placement new may be deleted.

Can someone please tell me Chapter and Verse in the standard, please?
Then I can close this one.

Thanks,

Andrew.

Reply via email to