[libcxx-commits] [libcxx] d95597d - [libc++][string] Remove potential non-trailing 0-length array (#108867)
via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Sep 16 13:43:42 PDT 2024
Author: Louis Dionne
Date: 2024-09-16T16:43:39-04:00
New Revision: d95597dc06c510ad7fbf00a43583c54d38f79aa7
URL: https://github.com/llvm/llvm-project/commit/d95597dc06c510ad7fbf00a43583c54d38f79aa7
DIFF: https://github.com/llvm/llvm-project/commit/d95597dc06c510ad7fbf00a43583c54d38f79aa7.diff
LOG: [libc++][string] Remove potential non-trailing 0-length array (#108867)
It is a violation of the standard to use 0 length arrays, especially
when not at the end of a structure (not a FAM GNU extension). Compiler
generally accept it, but it's probably better to have a conforming
implementation.
This is a re-application of #105865 which was reverted in 72cfc74
because it broke the data formatters. A LLDB patch has since been landed
that should make this a non-issue.
Co-authored-by: serge-sans-paille <sguelton at mozilla.com>
Added:
Modified:
libcxx/include/string
Removed:
################################################################################
diff --git a/libcxx/include/string b/libcxx/include/string
index 76359022f3650c..fdb189016bfbac 100644
--- a/libcxx/include/string
+++ b/libcxx/include/string
@@ -749,6 +749,14 @@ struct __can_be_converted_to_string_view
struct __uninitialized_size_tag {};
struct __init_with_sentinel_tag {};
+template <size_t _PaddingSize>
+struct __padding {
+ char __padding_[_PaddingSize];
+};
+
+template <>
+struct __padding<0> {};
+
template <class _CharT, class _Traits, class _Allocator>
class basic_string {
private:
@@ -853,7 +861,7 @@ private:
struct __short {
value_type __data_[__min_cap];
- unsigned char __padding_[sizeof(value_type) - 1];
+ _LIBCPP_NO_UNIQUE_ADDRESS __padding<sizeof(value_type) - 1> __padding_;
unsigned char __size_ : 7;
unsigned char __is_long_ : 1;
};
@@ -905,7 +913,7 @@ private:
unsigned char __is_long_ : 1;
unsigned char __size_ : 7;
};
- char __padding_[sizeof(value_type) - 1];
+ _LIBCPP_NO_UNIQUE_ADDRESS __padding<sizeof(value_type) - 1> __padding_;
value_type __data_[__min_cap];
};
More information about the libcxx-commits
mailing list