Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-86989

QML crashes when more than one inline component is defined

XMLWordPrintable

    • Windows
    • 3eb9ee34c06d54ea21fedd3188c60e536a487b1c (qt/qtdeclarative/dev) 95f8cd5632dcb72ec4fa7910099f210ce5f22078 (qt/qtdeclarative/5.15)

      Consider the following main.qml:

      import QtQuick 2.15
      import QtQuick.Window 2.15
      
      Window {
          width: 640
          height: 480
          visible: true
          title: qsTr("Hello World")
      
          component InlineComponent : Rectangle {}
          component InlineComponent2 : Rectangle {}
      }
      

      Running this code on MSVC Debug build crashes on runtime with assertion failed. See the callstack:

       	Qt5Qmld.dll!std::_Debug_lt_pred<bool <lambda>(QQmlImportInstance *, QQmlImportInstance *) &,QQmlImportInstance * &,QQmlImportInstance * &,0>(QQmlImportNamespace::resolveType::__l7::bool <lambda>(QQmlImportInstance *, QQmlImportInstance *) & _Pred, QQmlImportInstance * & _Left, QQmlImportInstance * & _Right) Line 1485	C++
       	Qt5Qmld.dll!std::_Insertion_sort_unchecked<QList<QQmlImportInstance *>::iterator,bool <lambda>(QQmlImportInstance *, QQmlImportInstance *)>(QList<QQmlImportInstance *>::iterator _First, const QList<QQmlImportInstance *>::iterator _Last, QQmlImportNamespace::resolveType::__l7::bool <lambda>(QQmlImportInstance *, QQmlImportInstance *) _Pred) Line 3329	C++
       	Qt5Qmld.dll!std::stable_sort<QList<QQmlImportInstance *>::iterator,bool <lambda>(QQmlImportInstance *, QQmlImportInstance *)>(const QList<QQmlImportInstance *>::iterator _First, const QList<QQmlImportInstance *>::iterator _Last, QQmlImportNamespace::resolveType::__l7::bool <lambda>(QQmlImportInstance *, QQmlImportInstance *) _Pred) Line 3666	C++
      >	Qt5Qmld.dll!QQmlImportNamespace::resolveType(QQmlTypeLoader * typeLoader, const QHashedStringRef & type, int * vmajor, int * vminor, QQmlType * type_return, QString * base, QList<QQmlError> * errors, QQmlType::RegistrationType registrationType, bool * typeRecursionDetected) Line 995	C++
       	Qt5Qmld.dll!QQmlImportsPrivate::resolveType::__l2::<lambda>(QHashedStringRef unqualifiedtype, QQmlImportNamespace * nameSpace, QList<QQmlError> * errors) Line 866	C++
       	Qt5Qmld.dll!QQmlImportsPrivate::resolveType(const QHashedStringRef & type, int * vmajor, int * vminor, QQmlType * type_return, QList<QQmlError> * errors, QQmlType::RegistrationType registrationType, bool * typeRecursionDetected) Line 882	C++
       	Qt5Qmld.dll!QQmlImports::resolveType(const QHashedStringRef & type, QQmlType * type_return, int * vmaj, int * vmin, QQmlImportNamespace * * ns_return, QList<QQmlError> * errors, QQmlType::RegistrationType registrationType, bool * typeRecursionDetected) Line 606	C++
       	Qt5Qmld.dll!QQmlTypeData::resolveType(const QString & typeName, int & majorVersion, int & minorVersion, QQmlTypeData::TypeReference & ref, int lineNumber, int columnNumber, bool reportErrors, QQmlType::RegistrationType registrationType, bool * typeRecursionDetected) Line 995	C++
       	Qt5Qmld.dll!QQmlTypeData::resolveTypes() Line 871	C++
       	Qt5Qmld.dll!QQmlTypeData::allDependenciesDone() Line 746	C++
       	Qt5Qmld.dll!QQmlTypeLoader::setData(QQmlDataBlob * blob, const QQmlDataBlob::SourceCodeData & d) Line 452	C++
       	Qt5Qmld.dll!QQmlTypeLoader::setData(QQmlDataBlob * blob, const QString & fileName) Line 438	C++
       	Qt5Qmld.dll!QQmlTypeLoader::loadThread(QQmlDataBlob * blob) Line 301	C++
       	Qt5Qmld.dll!QQmlTypeLoaderThread::loadThread(QQmlDataBlob * b) Line 163	C++
       	Qt5Qmld.dll!`QQmlThread::callMethodInThread<QQmlDataBlob *,QQmlDataBlob *,QQmlTypeLoaderThread>'::`2'::I::call(QQmlThread * thread) Line 165	C++
       	Qt5Qmld.dll!QQmlThreadPrivate::threadEvent() Line 206	C++
       	Qt5Qmld.dll!QQmlThreadPrivate::event(QEvent * e) Line 143	C++
       	Qt5Cored.dll!QCoreApplicationPrivate::notify_helper(QObject * receiver, QEvent * event) Line 1224	C++
       	Qt5Cored.dll!doNotify(QObject * receiver, QEvent * event) Line 1153	C++
       	Qt5Cored.dll!QCoreApplication::notify(QObject * receiver, QEvent * event) Line 1140	C++
       	Qt5Guid.dll!QGuiApplication::notify(QObject * object, QEvent * event) Line 1936	C++
       	Qt5Cored.dll!QCoreApplication::notifyInternal2(QObject * receiver, QEvent * event) Line 1063	C++
       	Qt5Cored.dll!QCoreApplication::sendEvent(QObject * receiver, QEvent * event) Line 1459	C++
       	Qt5Cored.dll!QCoreApplicationPrivate::sendPostedEvents(QObject * receiver, int event_type, QThreadData * data) Line 1817	C++
       	Qt5Cored.dll!QEventDispatcherWin32::sendPostedEvents() Line 1082	C++
       	Qt5Cored.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 530	C++
       	Qt5Cored.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 140	C++
       	Qt5Cored.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 232	C++
       	Qt5Cored.dll!QThread::exec() Line 547	C++
       	Qt5Qmld.dll!QQmlThreadPrivate::run() Line 156	C++
       	Qt5Cored.dll!QThreadPrivate::start(void * arg) Line 405	C++
       	kernel32.dll!BaseThreadInitThunk()	Unknown
       	ntdll.dll!RtlUserThreadStart()	Unknown
      

      It seems that std::stable_sort is called from QQmlTypeData::resolveTypes with a comparison function that fails to meet the MSVC STL's debug assertions. The failure is triggered apparently when compare is called for two components that are inline defined.

        For Gerrit Dashboard: QTBUG-86989
        # Subject Branch Project Status CR V

            fabiankosmale Fabian Kosmale
            mwu Michał Urbańczyk
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved:

                There are no open Gerrit changes