summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaximilian Goldstein <max.goldstein@qt.io>2021-04-19 14:44:33 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-04-19 16:58:33 +0000
commit83f9667328f050fcdb2d1a2edd0c31f7b098a69d (patch)
tree0095bf3be4b40a201f569c8268b493ba3d6dcee0
parentfb23d24e0f3d875d5451336b351ac5a9ef641ca2 (diff)
qqmlirbuilder: Fix treating parser warnings as errros
Previously parser warnings (i.e. inline components having lowercase names) were treated as errors. Because these were not handled properly this also resulted in the QQmlComponent with the warning never becoming ready. This resulted applications hanging instead of terminating. Change-Id: Ia5ad3b54edc1b94dd94d0bf771c3494691abec71 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> (cherry picked from commit e49be8d2b1b7acb310873a63f46980d1f0296f95) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/qml/compiler/qqmlirbuilder.cpp4
-rw-r--r--tests/auto/qml/qqmllanguage/data/hangOnWarning.qml3
-rw-r--r--tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp12
3 files changed, 18 insertions, 1 deletions
diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp
index c7343e709c..dd2a5fc970 100644
--- a/src/qml/compiler/qqmlirbuilder.cpp
+++ b/src/qml/compiler/qqmlirbuilder.cpp
@@ -443,7 +443,9 @@ bool IRBuilder::generateFromQml(const QString &code, const QString &url, Documen
errors << m;
}
- return false;
+
+ if (!errors.isEmpty() || !parseResult)
+ return false;
}
program = parser.ast();
Q_ASSERT(program);
diff --git a/tests/auto/qml/qqmllanguage/data/hangOnWarning.qml b/tests/auto/qml/qqmllanguage/data/hangOnWarning.qml
new file mode 100644
index 0000000000..51943c3839
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/hangOnWarning.qml
@@ -0,0 +1,3 @@
+import QtQml 2.15
+
+QtObject["foobar"] {}
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
index f058b97605..b5bc1d72ac 100644
--- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
+++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
@@ -356,6 +356,8 @@ private slots:
void qtbug_85615();
+ void hangOnWarning();
+
private:
QQmlEngine engine;
QStringList defaultImportPathList;
@@ -6276,6 +6278,16 @@ void tst_qqmllanguage::bareInlineComponent()
QVERIFY(tab1Found);
}
+void tst_qqmllanguage::hangOnWarning()
+{
+ QTest::ignoreMessage(QtWarningMsg,
+ qPrintable(QStringLiteral("%1:3 : Ignored annotation")
+ .arg(testFileUrl("hangOnWarning.qml").toString())));
+ QQmlComponent component(&engine, testFileUrl("hangOnWarning.qml"));
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY(object != nullptr);
+}
+
QTEST_MAIN(tst_qqmllanguage)
#include "tst_qqmllanguage.moc"