Utils: Fix fix for string size

It was not using the whole short string size.

Change-Id: Id6f6d4d0241ef74dbc0fe766bc1e19e8671e0b94
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
This commit is contained in:
Marco Bubke
2023-09-11 17:07:22 +02:00
parent 22009b6967
commit 83bf9df043

View File

@@ -90,33 +90,25 @@ struct alignas(16) StringDataLayout
, reference{{string}, size, 0}
{}
QT_WARNING_PUSH
QT_WARNING_DISABLE_CLANG("-Wunsafe-buffer-usage")
template<size_type Size>
constexpr StringDataLayout(const char (&string)[Size]) noexcept
{
if constexpr (Size + 1 <= MaximumShortStringDataAreaSize) {
control = {Size - 1, false, false};
for (size_type i = 0; i < Size; ++i)
constexpr auto size = Size - 1;
if constexpr (size <= MaximumShortStringDataAreaSize) {
control = {size, false, false};
for (size_type i = 0; i < size; ++i)
shortString[i] = string[i];
#if defined(__cpp_lib_is_constant_evaluated) && __cpp_lib_is_constant_evaluated >= 201811L
if (std::is_constant_evaluated()) {
for (size_type i = Size; i < MaximumShortStringDataAreaSize; ++i)
for (size_type i = size; i < MaximumShortStringDataAreaSize; ++i)
shortString[i] = 0;
}
#endif
} else {
control = {0, true, true};
#if defined(__cpp_lib_is_constant_evaluated) && __cpp_lib_is_constant_evaluated >= 201811L
if (std::is_constant_evaluated()) {
for (size_type i = 0; i < sizeof(dummy); ++i)
dummy[i] = 0;
}
#endif
reference = {{string}, Size - 1, 0};
reference = {{string}, size, 0};
}
}
QT_WARNING_POP
constexpr static size_type shortStringCapacity() noexcept
{
@@ -166,33 +158,25 @@ struct alignas(16) StringDataLayout<MaximumShortStringDataAreaSize,
, reference{{string}, size, 0}
{}
QT_WARNING_PUSH
QT_WARNING_DISABLE_CLANG("-Wunsafe-buffer-usage")
template<size_type Size>
constexpr StringDataLayout(const char (&string)[Size]) noexcept
{
if constexpr (Size + 1 <= MaximumShortStringDataAreaSize) {
control = {Size - 1, false, false};
for (size_type i = 0; i < Size; ++i)
constexpr auto size = Size - 1;
if constexpr (size <= MaximumShortStringDataAreaSize) {
control = {size, false, false};
for (size_type i = 0; i < size; ++i)
shortString[i] = string[i];
#if defined(__cpp_lib_is_constant_evaluated) && __cpp_lib_is_constant_evaluated >= 201811L
if (std::is_constant_evaluated()) {
for (size_type i = Size; i < MaximumShortStringDataAreaSize; ++i)
for (size_type i = size; i < MaximumShortStringDataAreaSize; ++i)
shortString[i] = 0;
}
#endif
} else {
control = {0, true, true};
#if defined(__cpp_lib_is_constant_evaluated) && __cpp_lib_is_constant_evaluated >= 201811L
if (std::is_constant_evaluated()) {
for (size_type i = 0; i < sizeof(dummy); ++i)
dummy[i] = 0;
}
#endif
reference = {{string}, Size - 1, 0};
reference = {{string}, size, 0};
}
}
QT_WARNING_POP
void copyHere(const StringDataLayout &other) noexcept
{