aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@me.com>2013-11-18 15:33:19 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-19 13:00:37 +0100
commit48c45418cce7a377eb9117b2f120d5d5aaf3530a (patch)
tree718992832395fa5721879c95757f1a1b2208e6f0
parentcac9989643d54b15ea0b8e53889336b429e4504d (diff)
V4: remove failing assert and fix code.
Assert failed for cases where the node’s ancestor with lowest semi-dominator number was not the same as the parent. The test case exemplifies this. Task-number: QTBUG-34792 Change-Id: Ie6847b22a27211801bff7479bfcbfaf329c6005a Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
-rw-r--r--src/qml/compiler/qv4ssa.cpp6
-rw-r--r--tests/auto/qml/qqmlecmascript/data/qtbug34792.qml14
-rw-r--r--tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp12
3 files changed, 29 insertions, 3 deletions
diff --git a/src/qml/compiler/qv4ssa.cpp b/src/qml/compiler/qv4ssa.cpp
index 62f65c0c9c..6b1169d30a 100644
--- a/src/qml/compiler/qv4ssa.cpp
+++ b/src/qml/compiler/qv4ssa.cpp
@@ -323,9 +323,9 @@ class DominatorTree {
link(p, n);
foreach (BasicBlock *v, bucket[p]) {
BasicBlock *y = ancestorWithLowestSemi(v);
- Q_ASSERT(semi[y] == p);
- if (semi[y] == semi[v])
- idom[v] = p;
+ BasicBlock *semi_v = semi[v];
+ if (semi[y] == semi_v)
+ idom[v] = semi_v;
else
samedom[v] = y;
}
diff --git a/tests/auto/qml/qqmlecmascript/data/qtbug34792.qml b/tests/auto/qml/qqmlecmascript/data/qtbug34792.qml
new file mode 100644
index 0000000000..37c551b587
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/qtbug34792.qml
@@ -0,0 +1,14 @@
+import QtQuick 2.1
+Rectangle {
+ function foo()
+ {
+ for (var i = 0; i < 1; i++)
+ {
+ if (i >= 0)
+ break
+
+ return
+ }
+
+ }
+}
diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
index 6e1e606fb8..3aa8fd42e0 100644
--- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
+++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
@@ -318,6 +318,7 @@ private slots:
void miscTypeTest();
void stackLimits();
void idsAsLValues();
+ void qtbug_34792();
private:
// static void propertyVarWeakRefCallback(v8::Persistent<v8::Value> object, void* parameter);
@@ -7477,6 +7478,17 @@ void tst_qqmlecmascript::idsAsLValues()
QCOMPARE(component.errorString(), err);
}
+void tst_qqmlecmascript::qtbug_34792()
+{
+ QQmlComponent component(&engine, testFileUrl("qtbug34792.qml"));
+
+ QObject *object = component.create();
+ if (object == 0)
+ qDebug() << component.errorString();
+ QVERIFY(object != 0);
+ delete object;
+}
+
QTEST_MAIN(tst_qqmlecmascript)
#include "tst_qqmlecmascript.moc"