[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