diff options
Diffstat (limited to 'Source/cmake.cxx')
-rw-r--r-- | Source/cmake.cxx | 11 |
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); |