summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus T. Aehlig <aehlig@linta.de>2025-06-13 16:37:40 +0200
committerKlaus T. Aehlig <aehlig@linta.de>2025-06-16 17:23:33 +0200
commita78bd0abe451cde450bbc1eb56c1450b350dc255 (patch)
tree744679bcb9b550ae79d2bb4461f9048f136020cb
parentf4d3c39d9a5efa066adba7da13bef39d846b556f (diff)
downloadjustbuild-a78bd0abe451cde450bbc1eb56c1450b350dc255.tar.gz
Ensure equality operators are really noexcept.
... by explicitly catching any possible exception. Mainly to make clang-tidy happy. ...
-rw-r--r--src/buildtool/build_engine/base_maps/TARGETS2
-rw-r--r--src/buildtool/build_engine/base_maps/entity_name_data.hpp43
-rw-r--r--src/buildtool/common/repository_config.hpp2
-rw-r--r--src/buildtool/file_system/TARGETS7
-rw-r--r--src/buildtool/file_system/file_root.hpp15
-rw-r--r--src/buildtool/file_system/precomputed_root.hpp31
6 files changed, 89 insertions, 11 deletions
diff --git a/src/buildtool/build_engine/base_maps/TARGETS b/src/buildtool/build_engine/base_maps/TARGETS
index dad59e53..3600c260 100644
--- a/src/buildtool/build_engine/base_maps/TARGETS
+++ b/src/buildtool/build_engine/base_maps/TARGETS
@@ -58,6 +58,8 @@
[ "module_name"
, ["@", "json", "", "json"]
, ["src/buildtool/build_engine/expression", "expression_ptr_interface"]
+ , ["src/buildtool/logging", "log_level"]
+ , ["src/buildtool/logging", "logging"]
, ["src/utils/cpp", "hash_combine"]
]
, "stage": ["src", "buildtool", "build_engine", "base_maps"]
diff --git a/src/buildtool/build_engine/base_maps/entity_name_data.hpp b/src/buildtool/build_engine/base_maps/entity_name_data.hpp
index f4241de6..db5d4d4f 100644
--- a/src/buildtool/build_engine/base_maps/entity_name_data.hpp
+++ b/src/buildtool/build_engine/base_maps/entity_name_data.hpp
@@ -18,6 +18,7 @@
#include <compare>
#include <cstddef>
#include <cstdint>
+#include <exception>
#include <filesystem>
#include <functional>
#include <string>
@@ -27,6 +28,8 @@
#include "nlohmann/json.hpp"
#include "src/buildtool/build_engine/base_maps/module_name.hpp"
#include "src/buildtool/build_engine/expression/expression_ptr.hpp"
+#include "src/buildtool/logging/log_level.hpp"
+#include "src/buildtool/logging/logger.hpp"
#include "src/utils/cpp/hash_combine.hpp"
namespace BuildMaps::Base {
@@ -83,12 +86,14 @@ struct NamedTarget {
}
[[nodiscard]] auto ToString() const -> std::string;
[[nodiscard]] friend auto operator==(NamedTarget const& x,
- NamedTarget const& y) -> bool {
+ NamedTarget const& y) noexcept
+ -> bool {
return x.repository == y.repository and x.module == y.module and
x.name == y.name and x.reference_t == y.reference_t;
}
[[nodiscard]] friend auto operator!=(NamedTarget const& x,
- NamedTarget const& y) -> bool {
+ NamedTarget const& y) noexcept
+ -> bool {
return not(x == y);
}
[[nodiscard]] auto operator<(NamedTarget const& other) const noexcept
@@ -128,11 +133,37 @@ class EntityName {
std::move(name),
reference_type}} {}
- friend auto operator==(EntityName const& a, EntityName const& b) -> bool {
- return a.entity_name_ == b.entity_name_;
+ friend auto operator==(EntityName const& a,
+ EntityName const& b) noexcept -> bool {
+ try {
+ return a.entity_name_ == b.entity_name_;
+ } catch (std::exception const& e) {
+ try {
+ Logger::Log(
+ LogLevel::Error, "Unexpected excpetion: {}", e.what());
+ std::terminate();
+ } catch (...) {
+ std::terminate();
+ }
+ } catch (...) {
+ std::terminate();
+ }
}
- friend auto operator<(EntityName const& a, EntityName const& b) -> bool {
- return a.entity_name_ < b.entity_name_;
+ friend auto operator<(EntityName const& a,
+ EntityName const& b) noexcept -> bool {
+ try {
+ return a.entity_name_ < b.entity_name_;
+ } catch (std::exception const& e) {
+ try {
+ Logger::Log(
+ LogLevel::Error, "Unexpected excpetion: {}", e.what());
+ std::terminate();
+ } catch (...) {
+ std::terminate();
+ }
+ } catch (...) {
+ std::terminate();
+ }
}
[[nodiscard]] auto IsAnonymousTarget() const -> bool {
return std::holds_alternative<AnonymousTarget>(entity_name_);
diff --git a/src/buildtool/common/repository_config.hpp b/src/buildtool/common/repository_config.hpp
index 7fe66fa2..71c3fd27 100644
--- a/src/buildtool/common/repository_config.hpp
+++ b/src/buildtool/common/repository_config.hpp
@@ -40,7 +40,7 @@
class RepositoryConfig {
public:
- struct RepositoryInfo {
+ struct RepositoryInfo { // NOLINT(bugprone-exception-escape)
FileRoot workspace_root;
FileRoot target_root{workspace_root};
FileRoot rule_root{target_root};
diff --git a/src/buildtool/file_system/TARGETS b/src/buildtool/file_system/TARGETS
index cdd5bce7..e6d3104f 100644
--- a/src/buildtool/file_system/TARGETS
+++ b/src/buildtool/file_system/TARGETS
@@ -204,7 +204,12 @@
, "name": ["precomputed_root"]
, "hdrs": ["precomputed_root.hpp"]
, "srcs": ["precomputed_root.cpp"]
- , "deps": [["@", "json", "", "json"], ["src/utils/cpp", "expected"]]
+ , "deps":
+ [ ["@", "json", "", "json"]
+ , ["src/buildtool/logging", "log_level"]
+ , ["src/buildtool/logging", "logging"]
+ , ["src/utils/cpp", "expected"]
+ ]
, "private-deps":
[ ["@", "fmt", "", "fmt"]
, ["@", "gsl", "", "gsl"]
diff --git a/src/buildtool/file_system/file_root.hpp b/src/buildtool/file_system/file_root.hpp
index 3384f55e..f8daa429 100644
--- a/src/buildtool/file_system/file_root.hpp
+++ b/src/buildtool/file_system/file_root.hpp
@@ -183,7 +183,20 @@ class FileRoot {
friend auto operator==(Iterator const& x,
Iterator const& y) noexcept -> bool {
- return x.it_ == y.it_;
+ try {
+ return x.it_ == y.it_;
+ } catch (std::exception const& e) {
+ try {
+ Logger::Log(LogLevel::Error,
+ "Unexpected excpetion: {}",
+ e.what());
+ std::terminate();
+ } catch (...) {
+ std::terminate();
+ }
+ } catch (...) {
+ std::terminate();
+ }
}
friend auto operator!=(Iterator const& x,
Iterator const& y) noexcept -> bool {
diff --git a/src/buildtool/file_system/precomputed_root.hpp b/src/buildtool/file_system/precomputed_root.hpp
index f95f7d73..a405d680 100644
--- a/src/buildtool/file_system/precomputed_root.hpp
+++ b/src/buildtool/file_system/precomputed_root.hpp
@@ -16,6 +16,7 @@
#define INCLUDED_SRC_BUILDTOOL_FILE_SYSTEM_PRECOMPUTED_ROOT_HPP
#include <cstddef>
+#include <exception>
#include <functional>
#include <optional>
#include <string>
@@ -23,6 +24,8 @@
#include <variant>
#include "nlohmann/json.hpp"
+#include "src/buildtool/logging/log_level.hpp"
+#include "src/buildtool/logging/logger.hpp"
#include "src/utils/cpp/expected.hpp"
struct ComputedRoot final {
@@ -86,11 +89,35 @@ class PrecomputedRoot final {
[[nodiscard]] auto operator==(PrecomputedRoot const& other) const noexcept
-> bool {
- return root_ == other.root_;
+ try {
+ return root_ == other.root_;
+ } catch (std::exception const& e) {
+ try {
+ Logger::Log(
+ LogLevel::Error, "Unexpected excpetion: {}", e.what());
+ std::terminate();
+ } catch (...) {
+ std::terminate();
+ }
+ } catch (...) {
+ std::terminate();
+ }
}
[[nodiscard]] auto operator<(PrecomputedRoot const& other) const noexcept
-> bool {
- return root_ < other.root_;
+ try {
+ return root_ < other.root_;
+ } catch (std::exception const& e) {
+ try {
+ Logger::Log(
+ LogLevel::Error, "Unexpected excpetion: {}", e.what());
+ std::terminate();
+ } catch (...) {
+ std::terminate();
+ }
+ } catch (...) {
+ std::terminate();
+ }
}
[[nodiscard]] auto ToString() const noexcept -> std::string;