Richard Biener wrote:
> On July 17, 2015 3:11:51 PM GMT+02:00, Ulrich Weigand <[email protected]>
> wrote:
> >(Since there is no C++ operator new involved at all anymore,
> >this clearly violates even the C aliasing rules ...)
> >
> >I really think the allocate routine needs to be more careful to
> >avoid violating aliasing, e.g. by using memcpy or union-based
> >type-punning to access its free list info.
>
> As far as I understand the object allocator delegates construction to callers
> and thus in the above case cselib
> Would be responsible for calling placement new on the return value from
> Allocate.
Ah, it looks like I was wrong above: the code uses the *object*
allocator, so it should go through a placement new here:
inline T *
allocate () ATTRIBUTE_MALLOC
{
return ::new (m_allocator.allocate ()) T ();
}
It's still being miscompiled at least by my GCC 4.1 host compiler ...
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU/Linux compilers and toolchain
[email protected]