[PATCH] D114732: [clang] Mark `trivial_abi` types as "trivially relocatable".
Devin Jeanpierre via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 7 18:54:55 PST 2021
devin.jeanpierre added a comment.
In D114732#3178312 <https://reviews.llvm.org/D114732#3178312>, @rjmccall wrote:
> Trivial relocation doesn't imply that types have to be safe against being suddenly relocated during the middle of operations while they're not in a safe internal state. That is not a consideration.
In fact, I want to walk back that concern altogether. As a simple example, I think `swap()` is allowed to be defined as so:
template <typename T>
void swap(T& lhs, T& rhs) {
([&](T tmp) {lhs = std::move(rhs); rhs = std::move(tmp);})(std::move(lhs));
}
It's really hard to argue that a type can sensibly call out to library code while in a state that is non-relocatable, despite self-labeling as `[[clang::trivial_abi]]`. If the library is allowed to move the value, it's allowed to move it into a parameter, causing a relocation! So I actually regret pointing them out, or thinking that they might be a concern. :)
(Demonstration code: https://godbolt.org/z/j88Kqd49a)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D114732/new/
https://reviews.llvm.org/D114732
More information about the cfe-commits
mailing list