This is the mail archive of the gcc-patches@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: [C++ patch] Set attributes for C++ runtime library calls


On Thu, Aug 22, 2013 at 4:14 PM, Mike Stump <mikestump@comcast.net> wrote:
> On Aug 22, 2013, at 9:45 AM, Gabriel Dos Reis <gdr@integrable-solutions.net> wrote:
>>> I.e. can I have something like
>>>
>>> int a;
>>> test()
>>> {
>>>  int *b=new (int);
>>> }
>>>
>>> with custom implementation of new that returns &a?
>>
>> 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.
>
> This is wrong, in the c++97 standard there is no such limitation or restriction.

Please, elaborate.

>
>> Because its storage has been reused.  That is, aliasing is framed
>> in terms of object lifetime and uniqueness of ownership.
>
> Nope, this is wrong.  Example:
>
> int i, j;
>
> main() {
>         i = 1;
>         j = i;
>
>
>         i = 2;
>         char *cpi = (char*)&i;
>         char *cpj = (char*)&j;
>         for (k= 0; k < sizeof (int); ++k)
>                 cpj[k] = cpi[k];
> }
>
> This is well defined.  i and j exist, as do the character objects that are pointed to by cpi and cpj.  One can use them and interleave them, they can alias, and the character objects are not unique from i and j.
>

but, this isn't what we are talking  about -- that pointers to
character types can
alias pretty much anything is admitted and isn't under debate; GCC already copes
with that.

-- Gaby


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