aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qv4regalloc.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2014-01-17 11:45:37 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-17 12:20:00 +0100
commita0494a2092d7512a2b0d568a21058ed77b0cea11 (patch)
tree2ffe57e0fefc87a363ea7fc69e9e944766671340 /src/qml/compiler/qv4regalloc.cpp
parent7030adff1869e850a7b983e88d7a773d5d594886 (diff)
V4: fix range splitting when split is between intervals.
Also added some "white-box" unit tests and sprinkled in a bit of documentation. The case that went wrong is covered by the test rangeSplitting_1: before the fix, the new interval would have two ranges: [66-64],[70-71]. The first range is invalid and should not be there at all. Change-Id: If0742f4e6a96d98ea5d696f95126886ba66f92bb Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/compiler/qv4regalloc.cpp')
-rw-r--r--src/qml/compiler/qv4regalloc.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/qml/compiler/qv4regalloc.cpp b/src/qml/compiler/qv4regalloc.cpp
index 3521d0c27a..048aad8497 100644
--- a/src/qml/compiler/qv4regalloc.cpp
+++ b/src/qml/compiler/qv4regalloc.cpp
@@ -913,8 +913,9 @@ private:
}
}
if (!moveFrom) {
+#if defined(QT_NO_DEBUG)
Q_UNUSED(lifeTimeHole);
-#if !defined(QT_NO_DEBUG)
+#else
Q_ASSERT(!_info->isPhiTarget(it->temp()) || it->isSplitFromInterval() || lifeTimeHole);
if (_info->def(it->temp()) != successorStart && !it->isSplitFromInterval()) {
const int successorEnd = successor->statements.last()->id;
@@ -1492,6 +1493,7 @@ int RegisterAllocator::nextUse(const Temp &t, int startPosition) const
static inline void insertSorted(QVector<LifeTimeInterval> &intervals, const LifeTimeInterval &newInterval)
{
+ newInterval.validate();
for (int i = 0, ei = intervals.size(); i != ei; ++i) {
if (LifeTimeInterval::lessThan(newInterval, intervals.at(i))) {
intervals.insert(i, newInterval);