forked from pool/libqt5-qtbase
f4d805462a
- Add patch to fix build with GCC 8 (boo#1087073): * 0001-Do-a-static_cast-in-bit-blasts-that-are-UB.patch OBS-URL: https://build.opensuse.org/request/show/591726 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libqt5-qtbase?expand=0&rev=79
104 lines
5.1 KiB
Diff
104 lines
5.1 KiB
Diff
From 5a53a9893c50cf01fb3b93d256bbc669f99c16ea Mon Sep 17 00:00:00 2001
|
||
From: Ville Voutilainen <ville.voutilainen@qt.io>
|
||
Date: Fri, 12 Jan 2018 16:29:00 +0200
|
||
Subject: [PATCH] Do a static_cast in bit-blasts that are UB
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
Without this, building Qt and Qt applications fails with GCC 8.
|
||
The errors look like this:
|
||
writing to an object of type ‘class QPointer<QQuickPointerHandler>’ with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Werror=class-memaccess]
|
||
|
||
Task-number: QTBUG-65691
|
||
Change-Id: Ie5a30814125deca7a160b9a61f5aa3f944ee1ac9
|
||
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
|
||
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
|
||
---
|
||
src/gui/painting/qmatrix.h | 4 ++--
|
||
src/gui/painting/qtransform.h | 6 +++---
|
||
src/gui/text/qtextengine_p.h | 8 ++++----
|
||
src/gui/text/qtextobject.h | 4 ++--
|
||
4 files changed, 11 insertions(+), 11 deletions(-)
|
||
|
||
diff --git a/src/gui/painting/qmatrix.h b/src/gui/painting/qmatrix.h
|
||
index 15e0ab5be1..dafb746bc6 100644
|
||
--- a/src/gui/painting/qmatrix.h
|
||
+++ b/src/gui/painting/qmatrix.h
|
||
@@ -65,10 +65,10 @@ public:
|
||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||
// ### Qt 6: remove; the compiler-generated ones are fine!
|
||
QMatrix &operator=(QMatrix &&other) Q_DECL_NOTHROW // = default
|
||
- { memcpy(this, &other, sizeof(QMatrix)); return *this; }
|
||
+ { memcpy(static_cast<void *>(this), static_cast<void *>(&other), sizeof(QMatrix)); return *this; }
|
||
QMatrix &operator=(const QMatrix &) Q_DECL_NOTHROW; // = default
|
||
QMatrix(QMatrix &&other) Q_DECL_NOTHROW // = default
|
||
- { memcpy(this, &other, sizeof(QMatrix)); }
|
||
+ { memcpy(static_cast<void *>(this), static_cast<void *>(&other), sizeof(QMatrix)); }
|
||
QMatrix(const QMatrix &other) Q_DECL_NOTHROW; // = default
|
||
#endif
|
||
|
||
diff --git a/src/gui/painting/qtransform.h b/src/gui/painting/qtransform.h
|
||
index 06ae611861..efb0fd7e83 100644
|
||
--- a/src/gui/painting/qtransform.h
|
||
+++ b/src/gui/painting/qtransform.h
|
||
@@ -78,14 +78,14 @@ public:
|
||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||
// ### Qt 6: remove; the compiler-generated ones are fine!
|
||
QTransform &operator=(QTransform &&other) Q_DECL_NOTHROW // = default
|
||
- { memcpy(this, &other, sizeof(QTransform)); return *this; }
|
||
+ { memcpy(static_cast<void *>(this), static_cast<void *>(&other), sizeof(QTransform)); return *this; }
|
||
QTransform &operator=(const QTransform &) Q_DECL_NOTHROW; // = default
|
||
QTransform(QTransform &&other) Q_DECL_NOTHROW // = default
|
||
: affine(Qt::Uninitialized)
|
||
- { memcpy(this, &other, sizeof(QTransform)); }
|
||
+ { memcpy(static_cast<void *>(this), static_cast<void *>(&other), sizeof(QTransform)); }
|
||
QTransform(const QTransform &other) Q_DECL_NOTHROW // = default
|
||
: affine(Qt::Uninitialized)
|
||
- { memcpy(this, &other, sizeof(QTransform)); }
|
||
+ { memcpy(static_cast<void *>(this), static_cast<const void *>(&other), sizeof(QTransform)); }
|
||
#endif
|
||
|
||
bool isAffine() const;
|
||
diff --git a/src/gui/text/qtextengine_p.h b/src/gui/text/qtextengine_p.h
|
||
index 89f1328241..90c1a12acd 100644
|
||
--- a/src/gui/text/qtextengine_p.h
|
||
+++ b/src/gui/text/qtextengine_p.h
|
||
@@ -236,13 +236,13 @@ struct QGlyphLayout
|
||
last = numGlyphs;
|
||
if (first == 0 && last == numGlyphs
|
||
&& reinterpret_cast<char *>(offsets + numGlyphs) == reinterpret_cast<char *>(glyphs)) {
|
||
- memset(offsets, 0, (numGlyphs * SpaceNeeded));
|
||
+ memset(static_cast<void *>(offsets), 0, (numGlyphs * SpaceNeeded));
|
||
} else {
|
||
const int num = last - first;
|
||
- memset(offsets + first, 0, num * sizeof(QFixedPoint));
|
||
+ memset(static_cast<void *>(offsets + first), 0, num * sizeof(QFixedPoint));
|
||
memset(glyphs + first, 0, num * sizeof(glyph_t));
|
||
- memset(advances + first, 0, num * sizeof(QFixed));
|
||
- memset(justifications + first, 0, num * sizeof(QGlyphJustification));
|
||
+ memset(static_cast<void *>(advances + first), 0, num * sizeof(QFixed));
|
||
+ memset(static_cast<void *>(justifications + first), 0, num * sizeof(QGlyphJustification));
|
||
memset(attributes + first, 0, num * sizeof(QGlyphAttributes));
|
||
}
|
||
}
|
||
diff --git a/src/gui/text/qtextobject.h b/src/gui/text/qtextobject.h
|
||
index a5030de112..4cc2535b58 100644
|
||
--- a/src/gui/text/qtextobject.h
|
||
+++ b/src/gui/text/qtextobject.h
|
||
@@ -154,9 +154,9 @@ public:
|
||
iterator(const iterator &o) Q_DECL_NOTHROW; // = default
|
||
iterator &operator=(const iterator &o) Q_DECL_NOTHROW; // = default
|
||
iterator(iterator &&other) Q_DECL_NOTHROW // = default
|
||
- { memcpy(this, &other, sizeof(iterator)); }
|
||
+ { memcpy(static_cast<void *>(this), static_cast<void *>(&other), sizeof(iterator)); }
|
||
iterator &operator=(iterator &&other) Q_DECL_NOTHROW // = default
|
||
- { memcpy(this, &other, sizeof(iterator)); return *this; }
|
||
+ { memcpy(static_cast<void *>(this), static_cast<void *>(&other), sizeof(iterator)); return *this; }
|
||
#endif
|
||
|
||
QTextFrame *parentFrame() const { return f; }
|
||
--
|
||
2.16.2
|
||
|