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>
This commit is contained in:
parent
ca02462f02
commit
ee35954122
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user