Details
-
Bug
-
Resolution: Fixed
-
P1: Critical
-
6.9
-
None
-
-
e19b633c4 (dev), 042e713cb (6.9), 167af1611 (6.8)
Description
tst_QMenu::keyboardNavigation() crashes with msvc 2022 in debug mode in genericToString() when using QCOMPARE() with a nullptr as done in line 461:
QCOMPARE(menus[expected_menu]->activeAction(), nullptr);
The stacktrace is:
> tst_qmenu.exe!QTest::Internal::genericToString<std::nullptr_t>(const void * arg) Zeile 378 C++ Qt6Testd.dll!QTestResult::reportResult(bool success, const void * lhs, const void * rhs, const char *(*)(const void *) lhsFormatter, const char *(*)(const void *) rhsFormatter, const char * lhsExpr, const char * rhsExpr, QTest::ComparisonOperation op, const char * file, int line, const char * failureMessage) Zeile 718 C++ Qt6Testd.dll!QTest::compare_helper(bool success, const char * failureMsg, const void * actualPtr, const void * expectedPtr, const char *(*)(const void *) actualFormatter, const char *(*)(const void *) expectedFormatter, const char * actual, const char * expected, const char * file, int line) Zeile 2836 C++ tst_qmenu.exe!QTest::compare_ptr_helper(const volatile QObject * t1, void * __formal, const char * actual, const char * expected, const char * file, int line) Zeile 616 C++ tst_qmenu.exe!QTest::qCompare<QAction>(QAction * t1, void * __formal, const char * actual, const char * expected, const char * file, int line) Zeile 697 C++ tst_qmenu.exe!tst_QMenu::keyboardNavigation() Zeile 461 C++ tst_qmenu.exe!tst_QMenu::qt_static_metacall(QObject * _o, QMetaObject::Call _c, int _id, void * * _a) Zeile 256 C++ Qt6Cored.dll!QMetaMethodInvoker::invokeImpl(QMetaMethod self, void * target, Qt::ConnectionType connectionType, __int64 paramCount, const void * const * parameters, const char * const * typeNames, const QtPrivate::QMetaTypeInterface * const * metaTypes) Zeile 2801 C++ Qt6Cored.dll!QMetaMethod::invokeImpl(QMetaMethod self, void * target, Qt::ConnectionType connectionType, __int64 paramCount, const void * const * parameters, const char * const * typeNames, const QtPrivate::QMetaTypeInterface * const * metaTypes) Zeile 2639 C++ Qt6Testd.dll!QMetaMethod::invoke<void>(QObject * obj, Qt::ConnectionType c, QTemplatedMetaMethodReturnArgument<void> r) Zeile 152 C++ Qt6Testd.dll!QMetaMethod::invoke<>(QObject * obj, Qt::ConnectionType c) Zeile 163 C++ Qt6Testd.dll!QTest::invokeTestMethodIfValid(QMetaMethod m, QObject * obj) Zeile 435 C++ Qt6Testd.dll!QTest::TestMethods::invokeTestOnData(int index) Zeile 1053 C++ Qt6Testd.dll!QTest::TestMethods::invokeTest::__l23::<lambda_5>::operator()() Zeile 1371 C++ Qt6Testd.dll!QTest::runWithWatchdog<`QTest::TestMethods::invokeTest'::`23'::<lambda_5>>(std::optional<QTest::WatchDog> & watchDog, QTest::TestMethods::invokeTest::__l23::<lambda_5> && f) Zeile 1254 C++ Qt6Testd.dll!QTest::TestMethods::invokeTest(int index, QLatin1String tag, std::optional<QTest::WatchDog> & watchDog) Zeile 1370 C++ Qt6Testd.dll!QTest::TestMethods::invokeTests(QObject * testObject) Zeile 1713 C++ Qt6Testd.dll!QTest::qRun() Zeile 1952 C++ Qt6Testd.dll!QTest::qExec(QObject * testObject, int argc, char * * argv) Zeile 1826 C++ tst_qmenu.exe!main(int argc, char * * argv) Zeile 2208 C++ [Externer Code]
arg in frame 0 is the nullptr from QCOMPARE
The fix is easy - use QVERIFY() but I wonder if there is a bug in msvc or in Qt.
It does not crash when using
QAction *a = nullptr;
QCOMPARE(menus[expected_menu]->activeAction(), a);
As now the compiler resolves the type correctly I would guess.