[libcxx-commits] [PATCH] D128285: [libc++][AIX] Make basic_string layout compatible with earlier version
Xing Xue via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Jun 24 12:39:17 PDT 2022
xingxue marked an inline comment as done.
xingxue added inline comments.
================
Comment at: libcxx/include/string:758
#endif // _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT
-
+ static_assert(sizeof(__long) == (sizeof(pointer) + 2 * sizeof(size_type) +
+ (sizeof(pointer) * ((2 * sizeof(size_type) - 1) / sizeof(pointer) + 1)) -
----------------
philnik wrote:
> hubert.reinterpretcast wrote:
> > This reduces to:
> > ```
> > ((2 * sizeof(size_type) - 1) / sizeof(pointer) + 2) * sizeof(pointer)
> > ```
> > but I think now that there are many other ways for this to go wrong (pointer requires less alignment than its size, alignment of size_type causes trailing padding, etc.).
> >
> > Maybe:
> > ```
> > struct __long_size_ref {
> > size_type __x, __y;
> > pointer __z;
> > };
> > static_assert(sizeof(__long) == sizeof(__long_size_ref));
> > ```
> How about we just drop the `static_assert`? I've got a patch that adds tests which `static_assert`s the size and alignment of specific instantiations of `basic_string`. That's a lot more reliable than hoping to get the size and alignment right for user-defined types.
Sounds good.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D128285/new/
https://reviews.llvm.org/D128285
More information about the libcxx-commits
mailing list