On Tue, Jun 17, 2014 at 04:52:29PM +0200, Florian Weimer wrote:
> On 06/17/2014 04:39 PM, Jakub Jelinek wrote:
> >On Tue, Jun 17, 2014 at 04:34:16PM +0200, Florian Weimer wrote:
> >>>I'm not that familiar with the exact requirements of std::vector, could
> >>>we use the same trick as
> >>>http://mxr.mozilla.org/mozilla-central/source/xpcom/glue/nsTArray.h#275
> >>>that is instead of pointing at null point at a global header used for
> >>>all empty vectors?
> >>
> >>For std::vector, we could use reinterpret_cast<T*>(alignof(T)) or
> >>reinterpret_cast<T*>(sizeof(T)) if those are sufficiently well-defined as
> >>far as GCC is concerned.  The smaller constant is easier to load, and no
> >>relocation is required.
> >
> >If there is no object at those addresses, that is still undefined behavior.
> 
> GCC is the implementation, so it could be made defined there.
> 
> >GCC will likely not optimize it away at this point, but having code with
> >undefined behavior is just asking for future trouble.  Just use "" instead?
> 
> It's always const and may lack sufficient alignment.  The former isn't a
> problem in C++ (I think), but the alignment is an issue.

Alignment for what?  You don't specify any alignment to the C qsort,
only size, but even say size 8 can have just alignment of 1, consider
say struct S { char c[8]; };.  So, the only problem with alignment would
be in the callback function where it could try to dereference the passed in
const void * pointers, but if the array length is 0, the callback function
is never called, so I don't see why alignment would be an issue.

        Jakub

Reply via email to