diff options
author | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2013-11-15 19:28:50 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-15 21:32:41 +0100 |
commit | ee35954122f5fa413b7164901e63cbef4c49d9d5 (patch) | |
tree | d54144458ba2851253b62a7bc59c6816a39657a8 /qmake | |
parent | ca02462f0251fa420700f57b488f5b426dd00839 (diff) |
don't turn = into += in cumulative mode
it leads to pathological cases where the number of loop iterations may
go way beyond the reasonable.
this means that users need to avoid using the = operator in alternative
branches that lead to different sources/subdirectories being included
into the project. this is a bit of a corner case anyway, as people
usually add directly to SOURCES/SUBDIRS.
Task-number: QTCREATORBUG-1595
Change-Id: I7783e318fbc2790f6a853ba4e3f4a12db881feb5
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
(cherry picked from qtcreator/30bd7fcce1aef974f6af9eaa6532aa1f2b6192d2)
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'qmake')
-rw-r--r-- | qmake/library/qmakeevaluator.cpp | 29 |
1 files changed, 4 insertions, 25 deletions
diff --git a/qmake/library/qmakeevaluator.cpp b/qmake/library/qmakeevaluator.cpp index fe7b29ceec..2ea5ffd45e 100644 --- a/qmake/library/qmakeevaluator.cpp +++ b/qmake/library/qmakeevaluator.cpp @@ -889,30 +889,9 @@ void QMakeEvaluator::visitProVariable( default: // whatever - cannot happen case TokAssign: // = zipEmpty(&varVal); - if (!m_cumulative) { - // FIXME: add check+warning about accidental value removal. - // This may be a bit too noisy, though. - m_valuemapStack.top()[varName] = varVal; - } else { - if (!varVal.isEmpty()) { - // We are greedy for values. But avoid exponential growth. - ProStringList &v = valuesRef(varName); - if (v.isEmpty()) { - v = varVal; - } else { - ProStringList old = v; - v = varVal; - QSet<ProString> has; - has.reserve(v.size()); - foreach (const ProString &s, v) - has.insert(s); - v.reserve(v.size() + old.size()); - foreach (const ProString &s, old) - if (!has.contains(s)) - v << s; - } - } - } + // FIXME: add check+warning about accidental value removal. + // This may be a bit too noisy, though. + m_valuemapStack.top()[varName] = varVal; debugMsg(2, "assigning"); break; case TokAppendUnique: // *= @@ -928,7 +907,7 @@ void QMakeEvaluator::visitProVariable( if (!m_cumulative) { removeEach(&valuesRef(varName), varVal); } else { - // We are stingy with our values, too. + // We are stingy with our values. } debugMsg(2, "removing"); break; |