From e93bf391fa3df4498da0f3526f4c89dd35637103 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 3 Mar 2022 00:11:13 +0100 Subject: Fix QTest::toString() over QT_TYPESAFE_FLAGS QFlags QT_TYPESAFE_FLAGS allows explicit casts only to QFlags::Int, which is either int or unsigned int. The cast to the resp. other type fails. To fix, first convert to QFlags::Int with toInt(), and only then cast to int or unsigned int. Fixes: QTBUG-101399 Pick-to: 6.3 Change-Id: Ie74d53adc601cdf19708265b040092780676058f Reviewed-by: Qt CI Bot Reviewed-by: Giuseppe D'Angelo --- src/testlib/qtestcase.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/testlib/qtestcase.h') diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h index 80cece7f9a..adfc987862 100644 --- a/src/testlib/qtestcase.h +++ b/src/testlib/qtestcase.h @@ -290,7 +290,7 @@ namespace QTest inline typename std::enable_if::Value, char*>::type toString(QFlags f) { const QMetaEnum me = QMetaEnum::fromType(); - return qstrdup(me.valueToKeys(int(f)).constData()); + return qstrdup(me.valueToKeys(int(f.toInt())).constData()); } template // Fallback: Output hex value @@ -298,7 +298,7 @@ namespace QTest { const size_t space = 3 + 2 * sizeof(unsigned); // 2 for 0x, two hex digits per byte, 1 for '\0' char *msg = new char[space]; - qsnprintf(msg, space, "0x%x", unsigned(f)); + qsnprintf(msg, space, "0x%x", unsigned(f.toInt())); return msg; } -- cgit v1.2.3