diff --git a/src/qmlcompiler/qqmljscodegenerator.cpp b/src/qmlcompiler/qqmljscodegenerator.cpp index d6875a273f..b8bd89fa8b 100644 --- a/src/qmlcompiler/qqmljscodegenerator.cpp +++ b/src/qmlcompiler/qqmljscodegenerator.cpp @@ -4054,12 +4054,14 @@ QString QQmlJSCodeGenerator::convertContained(const QQmlJSRegisterContent &from, if (!m_typeResolver->registerIsStoredIn(to, m_typeResolver->varType()) && !m_typeResolver->registerIsStoredIn(to, m_typeResolver->jsPrimitiveType())) { reject(u"internal conversion into unsupported wrapper type."_s); + return QString(); } bool isExtension = false; if (m_typeResolver->canPopulate(containedTo, containedFrom, &isExtension)) { reject(u"populating "_s + containedTo->internalName() + u" from "_s + containedFrom->internalName()); + return QString(); } else if (const auto ctor = m_typeResolver->selectConstructor( containedTo, containedFrom, &isExtension); ctor.isValid()) { const auto argumentTypes = ctor.parameters(); diff --git a/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt b/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt index dc4216ba6d..f832c1b516 100644 --- a/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt +++ b/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt @@ -215,6 +215,7 @@ set(qml_files registerPropagation.qml registerelimination.qml renameAdjust.qml + returnAfterReject.qml revisions.qml scopeIdLookup.qml scopeVsObject.qml diff --git a/tests/auto/qml/qmlcppcodegen/data/returnAfterReject.qml b/tests/auto/qml/qmlcppcodegen/data/returnAfterReject.qml new file mode 100644 index 0000000000..e0b85eb270 --- /dev/null +++ b/tests/auto/qml/qmlcppcodegen/data/returnAfterReject.qml @@ -0,0 +1,15 @@ +import QtQml + +QtObject { + id: remaining + + property int bar: 0 + + Component.onCompleted: { + let remainingTime = 123 + if (remainingTime < 0) { + remainingTime += 24 * 60 * 60 + } + remaining.bar = isNaN(remainingTime) ? 0 : remainingTime + } +} diff --git a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp index 30a3eca882..a0416ac159 100644 --- a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp +++ b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp @@ -183,6 +183,7 @@ private slots: void registerElimination(); void registerPropagation(); void renameAdjust(); + void returnAfterReject(); void revisions(); void scopeIdLookup(); void scopeObjectDestruction(); @@ -3802,6 +3803,16 @@ void tst_QmlCppCodegen::renameAdjust() QVERIFY(o); } +void tst_QmlCppCodegen::returnAfterReject() +{ + QQmlEngine engine; + QQmlComponent c(&engine, QUrl(u"qrc:/qt/qml/TestTypes/returnAfterReject.qml"_s)); + QVERIFY2(c.isReady(), qPrintable(c.errorString())); + QScopedPointer o(c.create()); + QVERIFY(o); + QCOMPARE(o->property("bar").toInt(), 123); +} + void tst_QmlCppCodegen::revisions() { QQmlEngine engine;