summaryrefslogtreecommitdiffstats
path: root/Source/cmake.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmake.cxx')
-rw-r--r--Source/cmake.cxx11
1 files changed, 8 insertions, 3 deletions
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 4a2bb49..4fb0f2b 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -427,12 +427,12 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
bool foundError = false;
unsigned int nameStartPosition = 0;
- if (entry.find("no-", nameStartPosition) == 0) {
+ if (entry.find("no-", nameStartPosition) == nameStartPosition) {
foundNo = true;
nameStartPosition += 3;
}
- if (entry.find("error=", nameStartPosition) == 0) {
+ if (entry.find("error=", nameStartPosition) == nameStartPosition) {
foundError = true;
nameStartPosition += 6;
}
@@ -454,7 +454,12 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
this->DiagLevels[name] = DIAG_ERROR;
} else {
// -Wno-error=<name>
- this->DiagLevels[name] = std::min(this->DiagLevels[name], DIAG_WARN);
+ // This can downgrade an error to a warning, but should not enable
+ // or disable a warning in the first place.
+ auto dli = this->DiagLevels.find(name);
+ if (dli != this->DiagLevels.end()) {
+ dli->second = std::min(dli->second, DIAG_WARN);
+ }
}
} else if (cmHasLiteralPrefix(arg, "-U")) {
std::string entryPattern = arg.substr(2);