summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@digia.com>2013-11-15 19:28:50 +0100
committerOswald Buddenhagen <oswald.buddenhagen@digia.com>2013-11-18 15:16:19 +0100
commit30bd7fcce1aef974f6af9eaa6532aa1f2b6192d2 (patch)
tree6e65f3ade32721130488ca42b1f0af69939dcddd /src
parent27c876246e19201a6e76498b2a26e0a2df5d8962 (diff)
downloadqt-creator-30bd7fcce1aef974f6af9eaa6532aa1f2b6192d2.tar.gz
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>
Diffstat (limited to 'src')
-rw-r--r--src/shared/proparser/qmakeevaluator.cpp29
1 files changed, 4 insertions, 25 deletions
diff --git a/src/shared/proparser/qmakeevaluator.cpp b/src/shared/proparser/qmakeevaluator.cpp
index a5def320af..f2f45b06c6 100644
--- a/src/shared/proparser/qmakeevaluator.cpp
+++ b/src/shared/proparser/qmakeevaluator.cpp
@@ -882,30 +882,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: // *=
@@ -921,7 +900,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;