Deprecating arithmetic on std::atomic<void*>
Florian Weimer
fweimer@redhat.com
Thu Apr 20 09:49:00 GMT 2017
On 04/20/2017 11:39 AM, Jonathan Wakely wrote:
> Or simply deprecate support for it in std::atomic. **If** the
> extension for built-in types is useful then I can imagine it might be
> useful to have it for std::atomic too, for a subset of the programs
> relying on the original extension. But I'm unconvinced how useful
> the original extension is. There are other ways to achieve it if
> absolutely necessary, e.g. convert the void* to uintptr_t and perform
> the arithmetic and use compare_exchange to store it back again.
GNU C programs routinely use pointer arithmetic on void *. I see less
need in C++ programs, simply because the use of void * is less common there.
Function pointer arithmetic is more tricky. A side effect of it is that
sizeof of a function type is defined as 1 (instead of a compiler error
or the actual size, in bytes, of the function in question). This had
the unintended consequence that it took years to spot that a certain
test for a non-executable stack was completely bogus (it always crashed
because only one byte of the function was copied to the stack, and not
the entire function). I don't know of any application beyond that.
Thanks,
Florian
More information about the Libstdc++
mailing list