summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMÃ¥rten Nordheim <marten.nordheim@qt.io>2022-08-30 12:31:36 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-08-31 08:53:50 +0000
commit352cbfd3c8c6a8b4c9544293e433b1ebfce00009 (patch)
tree621eea843c4e979c22a2b666a6b58ad61bf88200 /src
parenta09b9aaba95b19d1d544d38361619bbe1c601cca (diff)
QDateTime: work around bitfield bug on msvc x86
Somehow, when mixing types in a bitfield, MSVC will use a lot more space than expected. So ShortData ended up being 16 bytes causing various static_asserts to trigger. Change-Id: Ia0032e71621772db27e2917d9c71598046730107 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit a901afcd79fe0ac7cf257f2ed45c72a7cfaf028a) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/time/qdatetime.h17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/corelib/time/qdatetime.h b/src/corelib/time/qdatetime.h
index 38438ad2e6..11ece5435a 100644
--- a/src/corelib/time/qdatetime.h
+++ b/src/corelib/time/qdatetime.h
@@ -253,18 +253,25 @@ class QDateTimePrivate;
class Q_CORE_EXPORT QDateTime
{
struct ShortData {
-#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
- quintptr status : 8;
-#endif
#if QT_VERSION >= QT_VERSION_CHECK(7,0,0) || defined(QT_BOOTSTRAPPED)
+# if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
+ qint64 status : 8;
+# endif
qint64 msecs : 56;
+
+# if Q_BYTE_ORDER == Q_BIG_ENDIAN
+ qint64 status : 8;
+# endif
#else
+# if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
+ quintptr status : 8;
+# endif
// note: this is only 24 bits on 32-bit systems...
qintptr msecs : sizeof(void *) * 8 - 8;
-#endif
-#if Q_BYTE_ORDER == Q_BIG_ENDIAN
+# if Q_BYTE_ORDER == Q_BIG_ENDIAN
quintptr status : 8;
+# endif
#endif
};