[PATCH] D13874: Atomics: support __c11_* calls on _Atomic struct types
Tim Northover via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 19 14:05:35 PDT 2015
t.p.northover created this revision.
t.p.northover added a subscriber: cfe-commits.
t.p.northover set the repository for this revision to rL LLVM.
When a struct's size is not a power of 2, the corresponding _Atomic() type is promoted to the nearest. We already correctly handled normal C++ expressions of this form, but direct calls to the __c11_atomic_whatever builtins ended up performing dodgy operations on the smaller non-atomic types (e.g. memcpy too much). Later optimisations removed this as undefined behaviour.
This patch converts EmitAtomicExpr to allocate its temporaries at the full atomic width, sidestepping the issue.
It also tidies up that function a little: previously there was a confusing dual-return situation, where sometimes the result was returned as an RValue, other times stored into a user-provided destination. I don't think this is necessary (it dates back from the very beginning of CGAtomic.cpp).
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 31403 bytes
Desc: not available
More information about the cfe-commits