This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: [Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should
- From: Gabriel Dos Reis <gdr at cs dot tamu dot edu>
- To: gcc-bugzilla at gcc dot gnu dot org
- Cc: gcc-bugs at gcc dot gnu dot org
- Date: 18 May 2007 16:04:47 -0500
- Subject: Re: [Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should
- References: <bug-29286-10053@http.gcc.gnu.org/bugzilla/> <20070518162751.26224.qmail@sourceware.org>
"ian at airs dot com" <gcc-bugzilla@gcc.gnu.org> writes:
| I'm not sure what to make of comment #84. We don't determine aliasing by
| alignment or size. We determine it by type. We don't currently treat int and
| long as aliasing each other even if they happen to have the same alignment and
| size.
That is GOOD. :-)
| I believe this is correct according to the C standard but I am less
| familiar with the C++ standard.
It is also correct semantics with respect to C++.
C++ goes further (I don't have C standard handy to check). The memory
pointed to by p must have the "right" alignment requirements etc.
So if you grab memory into p and it does not have the right alignment,
then the new placement yields undefined behaviour. That is not a
property we can check statically (until we get the alignment proposal
into C++).
| We could change the aliasing machinery in that
| way for C++ if it seems to be appropriate, but I would prefer to take that to a
| different PR.
What I was trying to say was that C++ provides the same "dynamic type"
(non-)aliasing guarantees, and goes even further.
Did I manage to confuse you again?
-- Gaby