[libcxx-commits] [libcxx] [libc++] Fix UB in <expected> related to "has value" flag (#68552) (PR #68733)
Jan Kokemüller via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Oct 17 11:54:56 PDT 2023
jiixyj wrote:
> To fix that we'd have to explicitly pad out the object.
+1. Even `const` objects are not safe:
```c++
struct bool_with_padding {
alignas(8) bool b = false;
};
struct s : std::expected<bool_with_padding, bool> {
const bool please_dont_overwrite_me[6] = //
{true, true, true, true, true, true};
};
static_assert(sizeof(s) == sizeof(bool_with_padding));
int main() {
s s;
s.emplace();
assert(s.please_dont_overwrite_me[5]); // will abort
assert(s.please_dont_overwrite_me[4]);
assert(s.please_dont_overwrite_me[3]);
assert(s.please_dont_overwrite_me[2]);
assert(s.please_dont_overwrite_me[1]);
assert(s.please_dont_overwrite_me[0]);
}
```
https://godbolt.org/z/TPoEqz7Wc
That doesn't look right :/
https://github.com/llvm/llvm-project/pull/68733
More information about the libcxx-commits
mailing list