Deprecating arithmetic on std::atomic<void*>

Jonathan Wakely jwakely@redhat.com
Thu Apr 20 09:53:00 GMT 2017


On 20/04/17 11:48 +0200, Florian Weimer wrote:
>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.

And I see even less need to do it atomically.

>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