Skip to content

Commit c747bd0

Browse files
committed
[libc++][NFC] Copy the whole union instead of a member; also remove __zero()
This doesn't affect code-gen Reviewed By: ldionne, #libc Spies: libcxx-commits Differential Revision: https://reviews.llvm.org/D132951
1 parent 30adaa7 commit c747bd0

File tree

1 file changed

+15
-21
lines changed

1 file changed

+15
-21
lines changed

libcxx/include/string

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -812,7 +812,7 @@ private:
812812
if (__size > max_size())
813813
__throw_length_error();
814814
if (__fits_in_sso(__size)) {
815-
__zero();
815+
__r_.first() = __rep();
816816
__set_short_size(__size);
817817
} else {
818818
auto __capacity = __recommend(__size) + 1;
@@ -1531,7 +1531,7 @@ private:
15311531
}
15321532

15331533
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void __default_init() {
1534-
__zero();
1534+
__r_.first() = __rep();
15351535
if (__libcpp_is_constant_evaluated()) {
15361536
size_type __sz = __recommend(0) + 1;
15371537
pointer __ptr = __alloc_traits::allocate(__alloc(), __sz);
@@ -1638,11 +1638,6 @@ private:
16381638
const_pointer __get_pointer() const _NOEXCEPT
16391639
{return __is_long() ? __get_long_pointer() : __get_short_pointer();}
16401640

1641-
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20
1642-
void __zero() _NOEXCEPT {
1643-
__r_.first() = __rep();
1644-
}
1645-
16461641
template <size_type __a> static
16471642
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20
16481643
size_type __align_it(size_type __s) _NOEXCEPT
@@ -1942,7 +1937,7 @@ void basic_string<_CharT, _Traits, _Allocator>::__init(const value_type* __s,
19421937
size_type __reserve)
19431938
{
19441939
if (__libcpp_is_constant_evaluated())
1945-
__zero();
1940+
__r_.first() = __rep();
19461941
if (__reserve > max_size())
19471942
__throw_length_error();
19481943
pointer __p;
@@ -1970,7 +1965,7 @@ void
19701965
basic_string<_CharT, _Traits, _Allocator>::__init(const value_type* __s, size_type __sz)
19711966
{
19721967
if (__libcpp_is_constant_evaluated())
1973-
__zero();
1968+
__r_.first() = __rep();
19741969
if (__sz > max_size())
19751970
__throw_length_error();
19761971
pointer __p;
@@ -2029,7 +2024,7 @@ basic_string<_CharT, _Traits, _Allocator>::basic_string(const basic_string& __st
20292024
: __r_(__default_init_tag(), __alloc_traits::select_on_container_copy_construction(__str.__alloc()))
20302025
{
20312026
if (!__str.__is_long())
2032-
__r_.first().__r = __str.__r_.first().__r;
2027+
__r_.first() = __str.__r_.first();
20332028
else
20342029
__init_copy_ctor_external(std::__to_address(__str.__get_long_pointer()),
20352030
__str.__get_long_size());
@@ -2043,7 +2038,7 @@ basic_string<_CharT, _Traits, _Allocator>::basic_string(
20432038
: __r_(__default_init_tag(), __a)
20442039
{
20452040
if (!__str.__is_long())
2046-
__r_.first().__r = __str.__r_.first().__r;
2041+
__r_.first() = __str.__r_.first();
20472042
else
20482043
__init_copy_ctor_external(std::__to_address(__str.__get_long_pointer()),
20492044
__str.__get_long_size());
@@ -2055,7 +2050,8 @@ _LIBCPP_CONSTEXPR_SINCE_CXX20
20552050
void basic_string<_CharT, _Traits, _Allocator>::__init_copy_ctor_external(
20562051
const value_type* __s, size_type __sz) {
20572052
if (__libcpp_is_constant_evaluated())
2058-
__zero();
2053+
__r_.first() = __rep();
2054+
20592055
pointer __p;
20602056
if (__fits_in_sso(__sz)) {
20612057
__p = __get_short_pointer();
@@ -2100,12 +2096,9 @@ basic_string<_CharT, _Traits, _Allocator>::basic_string(basic_string&& __str, co
21002096
__init(std::__to_address(__str.__get_long_pointer()), __str.__get_long_size());
21012097
else
21022098
{
2103-
if (__libcpp_is_constant_evaluated()) {
2104-
__zero();
2105-
__r_.first().__l = __str.__r_.first().__l;
2106-
} else {
2107-
__r_.first().__r = __str.__r_.first().__r;
2108-
}
2099+
if (__libcpp_is_constant_evaluated())
2100+
__r_.first() = __rep();
2101+
__r_.first() = __str.__r_.first();
21092102
__str.__default_init();
21102103
}
21112104
std::__debug_db_insert_c(this);
@@ -2121,7 +2114,8 @@ void
21212114
basic_string<_CharT, _Traits, _Allocator>::__init(size_type __n, value_type __c)
21222115
{
21232116
if (__libcpp_is_constant_evaluated())
2124-
__zero();
2117+
__r_.first() = __rep();
2118+
21252119
if (__n > max_size())
21262120
__throw_length_error();
21272121
pointer __p;
@@ -2261,7 +2255,7 @@ __enable_if_t
22612255
basic_string<_CharT, _Traits, _Allocator>::__init(_ForwardIterator __first, _ForwardIterator __last)
22622256
{
22632257
if (__libcpp_is_constant_evaluated())
2264-
__zero();
2258+
__r_.first() = __rep();
22652259
size_type __sz = static_cast<size_type>(std::distance(__first, __last));
22662260
if (__sz > max_size())
22672261
__throw_length_error();
@@ -2517,7 +2511,7 @@ basic_string<_CharT, _Traits, _Allocator>::operator=(const basic_string& __str)
25172511
__copy_assign_alloc(__str);
25182512
if (!__is_long()) {
25192513
if (!__str.__is_long()) {
2520-
__r_.first().__r = __str.__r_.first().__r;
2514+
__r_.first() = __str.__r_.first();
25212515
} else {
25222516
return __assign_no_alias<true>(__str.data(), __str.size());
25232517
}

0 commit comments

Comments
 (0)