[libcxx-commits] [libcxx] [libc++] Implement C++20 atomic_ref (PR #76647)

via libcxx-commits libcxx-commits at lists.llvm.org
Wed Jan 3 02:13:50 PST 2024


huixie90 wrote:

> > there are some weird downstream setup. IIRC, there is Fushia where it is Linux but without gcc installed (thus cannot -latomic).
> 
> That doesn't affect whether you can use the `__atomic_*` builtin functions.
> 
> > there is also Windows clang-cl which lacks of some builtins.
> 
> Fortunately, it doesn't lack these.
> 
> > On Mac, do we have the gcc builtin at all? At least, on my old laptop all the code path are going through the c11 branch.
> 
> Yep, they exist on all Clang.
> 
> > I’d also like to mention that I am working on several atomic related things, including making types with padding bytes in between member and/or after the tail works with atomic. (btw, does your atomic_ref compare_exchange_strong works for those types?) I don’t think we are allowed to touch the padding bits since atomic_ref does not own the object
> 
> This PR indeed does not implement that part of the spec yet. That'll need to wait until `__builtin_clear_padding` is implemented. I think it's fine to implement this type without that requirement, initially. (note that when the time comes, it will need to use a different implementation than std::atomic (and it'll be extremely inefficient, since it cannot assume the padding is cleared to start with!)
> 
> > and I don’t think breaking existing std::atomic ABI is feasible. even though we could Abi tag std::atomic, there is no way we could tag user defined classes that contain std::atomic and appear in Abi boundary.
> 
> Recall that long-term it's not only std::atomic whose ABI we need to change, but also C11 _Atomic. However, this PR no longer touches it, so that's moot for the purposes of this PR.

just to put some related in progress work I have:

- __builtin_clear_padding https://github.com/llvm/llvm-project/pull/75371
- atomic_base_impl  clear padding https://github.com/llvm/llvm-project/pull/76180
- bug in std::atomic with not-power-of-2 size  (see the comments I put in the end) https://github.com/llvm/llvm-project/issues/30023

I think your patch is orthogonal to all these bugs we have so we can try to land this one first.

https://github.com/llvm/llvm-project/pull/76647


More information about the libcxx-commits mailing list