diff options
-rw-r--r-- | Source/cmake.cxx | 11 | ||||
-rw-r--r-- | Tests/RunCMake/CommandLine/RunCMakeTest.cmake | 4 |
2 files changed, 12 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); diff --git a/Tests/RunCMake/CommandLine/RunCMakeTest.cmake b/Tests/RunCMake/CommandLine/RunCMakeTest.cmake index c438860..bb40c52 100644 --- a/Tests/RunCMake/CommandLine/RunCMakeTest.cmake +++ b/Tests/RunCMake/CommandLine/RunCMakeTest.cmake @@ -671,6 +671,10 @@ set(RunCMake_TEST_OPTIONS -Wno-error=deprecated) run_cmake(Wno-error_deprecated) unset(RunCMake_TEST_OPTIONS) +set(RunCMake_TEST_OPTIONS -Werror=deprecated -Wno-error=deprecated) +run_cmake(Wno-error_deprecated) +unset(RunCMake_TEST_OPTIONS) + # Dev warnings should be on by default run_cmake(Wdev) |