From 32f66f7008ce8fff1a8cdc5219978d1a61d4684c Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 12 Sep 2023 23:38:34 +0200 Subject: [PATCH] Add some tests for q(u)int128 Check that QIntegerForSize<16> and std::numeric_limits work and that q(u)int128 are available in C mode, too. Pick-to: 6.6 Change-Id: I44af8282399c78f6e74a8268af53bad64407ca34 Reviewed-by: Thiago Macieira --- src/corelib/global/qtypes.cpp | 12 ++++++++++++ tests/auto/corelib/global/qglobal/qglobal.c | 7 +++++++ tests/auto/corelib/global/qglobal/tst_qglobal.cpp | 6 ++++++ 3 files changed, 25 insertions(+) diff --git a/src/corelib/global/qtypes.cpp b/src/corelib/global/qtypes.cpp index 5c3b963a92..136766eba6 100644 --- a/src/corelib/global/qtypes.cpp +++ b/src/corelib/global/qtypes.cpp @@ -399,5 +399,17 @@ static_assert(sizeof(qint8) == 1, "Internal error, qint8 is misdefined"); static_assert(sizeof(qint16)== 2, "Internal error, qint16 is misdefined"); static_assert(sizeof(qint32) == 4, "Internal error, qint32 is misdefined"); static_assert(sizeof(qint64) == 8, "Internal error, qint64 is misdefined"); +#ifdef QT_SUPPORTS_INT128 +static_assert(sizeof(qint128) == 16, "Internal error, qint128 is misdefined"); +#endif + +#ifdef QT_SUPPORTS_INT128 +// check that numeric_limits works: +// This fails here for GCC 9, but succeeds on Clang and GCC >= 11 +// so just suppress the check for older GCC: +# if !defined(Q_CC_GNU_ONLY) || Q_CC_GNU >= 1100 +static_assert(std::numeric_limits::max() == qint128(-1)); +# endif +#endif QT_END_NAMESPACE diff --git a/tests/auto/corelib/global/qglobal/qglobal.c b/tests/auto/corelib/global/qglobal/qglobal.c index 46745ef368..c8dbbc318f 100644 --- a/tests/auto/corelib/global/qglobal/qglobal.c +++ b/tests/auto/corelib/global/qglobal/qglobal.c @@ -4,6 +4,7 @@ #include #include #include +#include #ifdef Q_COMPILER_THREAD_LOCAL # include @@ -50,6 +51,12 @@ void tst_GlobalTypes() qintptr qip; quintptr qup; Q_UNUSED(qs); Q_UNUSED(qp); Q_UNUSED(qip); Q_UNUSED(qup); + +#ifdef QT_SUPPORTS_INT128 + qint128 s128; + quint128 u128; + Q_UNUSED(s128); Q_UNUSED(u128); +#endif /* QT_SUPPORTS_INT128 */ } /* Qt version */ diff --git a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp index 48b5714086..cf37b1ecb8 100644 --- a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp +++ b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp @@ -424,11 +424,17 @@ void tst_QGlobal::integerForSize() static_assert(sizeof(QIntegerForSize<2>::Signed) == 2); static_assert(sizeof(QIntegerForSize<4>::Signed) == 4); static_assert(sizeof(QIntegerForSize<8>::Signed) == 8); +#ifdef QT_SUPPORTS_INT128 + static_assert(sizeof(QIntegerForSize<16>::Signed) == 16); +#endif static_assert(sizeof(QIntegerForSize<1>::Unsigned) == 1); static_assert(sizeof(QIntegerForSize<2>::Unsigned) == 2); static_assert(sizeof(QIntegerForSize<4>::Unsigned) == 4); static_assert(sizeof(QIntegerForSize<8>::Unsigned) == 8); +#ifdef QT_SUPPORTS_INT128 + static_assert(sizeof(QIntegerForSize<16>::Unsigned) == 16); +#endif } typedef QPair stringpair;