diff options
author | Klaus T. Aehlig <aehlig@linta.de> | 2025-06-13 16:37:40 +0200 |
---|---|---|
committer | Klaus T. Aehlig <aehlig@linta.de> | 2025-06-16 17:23:33 +0200 |
commit | a78bd0abe451cde450bbc1eb56c1450b350dc255 (patch) | |
tree | 744679bcb9b550ae79d2bb4461f9048f136020cb | |
parent | f4d3c39d9a5efa066adba7da13bef39d846b556f (diff) | |
download | justbuild-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/TARGETS | 2 | ||||
-rw-r--r-- | src/buildtool/build_engine/base_maps/entity_name_data.hpp | 43 | ||||
-rw-r--r-- | src/buildtool/common/repository_config.hpp | 2 | ||||
-rw-r--r-- | src/buildtool/file_system/TARGETS | 7 | ||||
-rw-r--r-- | src/buildtool/file_system/file_root.hpp | 15 | ||||
-rw-r--r-- | src/buildtool/file_system/precomputed_root.hpp | 31 |
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; |