On Mon, Aug 26, 2013 at 9:07 AM, Jason Merrill <ja...@redhat.com> wrote:
> 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?

3.8/1 says that the object lifetime ends when the storage is reused.
So, just returning the pointer itself is not the problem, but returning
the problem and reusing the storage (e.g. through construction) may be
the problem.

> 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.

Ugh, priority 2 isn't good.

> I'll ask to reconsider the priority at the next meeting.

Yes, please.

>
>
>>> 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
>

Reply via email to