[libstdc++/65033] Give alignment info to libatomic

Jonathan Wakely jwakely@redhat.com
Thu Mar 26 11:54:00 GMT 2015


On 12/02/15 13:23 -0800, Richard Henderson wrote:
>When we fixed PR54005, making sure that atomic_is_lock_free returns the same
>value for all objects of a given type, we probably should have changed the
>interface so that we would pass size and alignment rather than size and object
>pointer.
>
>Instead, we decided that passing null for the object pointer would be
>sufficient.  But as this PR shows, we really do need to take alignment into
>account.
>
>The following patch constructs a fake object pointer that is maximally
>misaligned.  This allows the interface to both the builtin and to libatomic to
>remain unchanged.  Which probably makes this back-portable to maintenance
>releases as well.
>
>I believe that for all of our current systems, size_t == uintptr_t, so the
>reinterpret_cast ought not generate warnings.
>
>The test case is problematic, as there's currently no good place to put it.
>The libstdc++ testsuite doesn't have the libatomic library path configured, and
>the libatomic testsuite doesn't have the libstdc++ include paths configured.
>Yet another example where we really need an install tree for testing.  Thoughts?
>
>
>Ok?

OK for trunk.

>
>r~

>	* include/bits/atomic_base.h (__atomic_base<T>::is_lock_free): Build
>	a fake pointer indicating type alignment.
>	(__atomic_base<T *>::is_lock_free): Likewise.
>	* include/std/atomic (atomic<T>::is_lock_free): Likewise.



More information about the Gcc-patches mailing list