diff --git a/src/declarative/qml/v4/qv4compiler.cpp b/src/declarative/qml/v4/qv4compiler.cpp index 857bceb460..31a0a1e63f 100644 --- a/src/declarative/qml/v4/qv4compiler.cpp +++ b/src/declarative/qml/v4/qv4compiler.cpp @@ -311,7 +311,8 @@ void QV4CompilerPrivate::visitName(IR::Name *e) attached.output = currentReg; attached.reg = currentReg; attached.exceptionId = exceptionId(e->line, e->column); - Q_ASSERT(e->declarativeType->attachedPropertiesId() != -1); + if (e->declarativeType->attachedPropertiesId() == -1) + discard(); attached.id = e->declarativeType->attachedPropertiesId(); gen(attached); } break; diff --git a/tests/auto/declarative/v4/data/qtbug_21883.qml b/tests/auto/declarative/v4/data/qtbug_21883.qml new file mode 100644 index 0000000000..a51f97c944 --- /dev/null +++ b/tests/auto/declarative/v4/data/qtbug_21883.qml @@ -0,0 +1,5 @@ +import Qt.v4 1.0 + +Result { + property Result dummy: Result +} diff --git a/tests/auto/declarative/v4/tst_v4.cpp b/tests/auto/declarative/v4/tst_v4.cpp index 0b6b2c24f7..20d739f4b5 100644 --- a/tests/auto/declarative/v4/tst_v4.cpp +++ b/tests/auto/declarative/v4/tst_v4.cpp @@ -77,6 +77,7 @@ private slots: void qtscript_data(); void nestedObjectAccess(); void subscriptionsInConditionalExpressions(); + void qtbug_21883(); private: QDeclarativeEngine engine; @@ -239,6 +240,19 @@ void tst_v4::subscriptionsInConditionalExpressions() delete o; } +// Crash test +void tst_v4::qtbug_21883() +{ + QDeclarativeComponent component(&engine, TEST_FILE("qtbug_21883.qml")); + + QString warning = component.url().toString() + ":4: Unable to assign null to ResultObject*"; + QTest::ignoreMessage(QtWarningMsg, warning.toLatin1().constData()); + + QObject *o = component.create(); + QVERIFY(o != 0); + delete o; +} + QTEST_MAIN(tst_v4) #include "tst_v4.moc"