On 08/22/2013 12:45 PM, Gabriel Dos Reis wrote:
If the user-supplied operator new returns &a, then it must
also ensure that 'a' is not used anywhere else -- e.g. I you can't
do lvalue-to-value conversion on 'a' to see what is written there.
Because its storage has been reused. That is, aliasing is framed
in terms of object lifetime and uniqueness of ownership.
Do you have a reference for this? The wording in 3.8 seems to only
restrict how a pointer is used when there is no object in the storage,
it doesn't say anything about using a pointer to access a different
object at the same location.
This issue seems to be core 1338:
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1338
which has priority 2, so it's not likely to get resolved any time soon.
I'll ask to reconsider the priority at the next meeting.
We probably can go with -fno-user-overwritten-new or something similar?
I'd name it something like -fno-aliased-global-new, which would add the
malloc attribute to the built-in declarations.
Jason