QStringBuilder: use data_ptr().data() instead of constData()

As the comment says, this allows us to skip the check for non-detached
strings and for null ones. We know that the one we've just created isn't
either, so long as len != 0. All QConcatenable::appendTo() calls do
nothing if len == 0, including not calling memcpy() at all.

Moreover, because it no longer references the QByteArray::_empty
variable, the GCC -Warray-bounds warning should be gone too.

Task-number: QTBUG-116763
Pick-to: 6.6 6.5
Change-Id: Ica7a43f6147b49c187ccfffd179eba2897ce2aff
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
(cherry picked from commit 06c724881c4227acf308e54ebd3db8235bb6b740)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Thiago Macieira 2023-12-07 18:34:02 -08:00 committed by Qt Cherry-pick Bot
parent 9cd1b8a28d
commit 35ffe8749e
2 changed files with 5 additions and 6 deletions

View File

@ -104,9 +104,11 @@ private:
const qsizetype len = QConcatenable< QStringBuilder<A, B> >::size(*this);
T s(len, Qt::Uninitialized);
// we abuse const_cast / constData here because we know we've just
// allocated the data and we're the only reference count
typename T::iterator d = const_cast<typename T::iterator>(s.constData());
// Using data_ptr() here (private API) so we can bypass the
// isDetached() and the replacement of a null pointer with _empty in
// both QString and QByteArray's data() and constData(). The result is
// the same if len != 0.
auto d = reinterpret_cast<typename T::iterator>(s.data_ptr().data());
if constexpr (QConcatenable<QStringBuilder<A, B>>::ExactSize) {
QConcatenable<QStringBuilder<A, B>>::appendTo(*this, d);

View File

@ -99,8 +99,6 @@ QList<QByteArray> supportedImageFormats(Capability cap)
static constexpr QByteArrayView imagePrefix() noexcept { return "image/"; }
QT_WARNING_PUSH
QT_WARNING_DISABLE_GCC("-Warray-bounds") // QTBUG-116763
QList<QByteArray> supportedMimeTypes(Capability cap)
{
QList<QByteArray> mimeTypes;
@ -116,7 +114,6 @@ QList<QByteArray> supportedMimeTypes(Capability cap)
mimeTypes.erase(std::unique(mimeTypes.begin(), mimeTypes.end()), mimeTypes.end());
return mimeTypes;
}
QT_WARNING_POP
QList<QByteArray> imageFormatsForMimeType(QByteArrayView mimeType, Capability cap)
{