summaryrefslogtreecommitdiff
path: root/src/analysis/powerset-lattice-impl.h
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2023-10-19 07:41:53 +0200
committerGitHub <noreply@github.com>2023-10-18 22:41:53 -0700
commitf79b5aa26b1fc722853e56b541cd35128786ef6b (patch)
tree0a8255cb2a3d2c4f1ee41dcb64cbcce4758f4341 /src/analysis/powerset-lattice-impl.h
parentc170fe7893fc05147de455e36d0a36b356b3f3db (diff)
downloadbinaryen-f79b5aa26b1fc722853e56b541cd35128786ef6b.tar.gz
binaryen-f79b5aa26b1fc722853e56b541cd35128786ef6b.tar.bz2
binaryen-f79b5aa26b1fc722853e56b541cd35128786ef6b.zip
[analysis][NFC] Use C++20 concepts for Lattice (#6027)
Replace the static assertions ensuring that Lattice types have the necessary operations with a C++20 concept called `Lattice`. To avoid name conflicts with the new concept, rename existing type parameters named `Lattice` to `L`. When not building with C++20, `Lattice` is a macro that resolves to `typename` so the code continues compiling and has the same behavior, but without any eager checks of the requirements on lattices. Add a new C++20 builder to CI to ensure that future changes compile with both C++17 and C++20. Once we switch to C++20 by default, the new builder can be removed. Update the lint builder to use a recent clang-format that understands concepts.
Diffstat (limited to 'src/analysis/powerset-lattice-impl.h')
-rw-r--r--src/analysis/powerset-lattice-impl.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/analysis/powerset-lattice-impl.h b/src/analysis/powerset-lattice-impl.h
index 6d710826b..33ebd312f 100644
--- a/src/analysis/powerset-lattice-impl.h
+++ b/src/analysis/powerset-lattice-impl.h
@@ -7,7 +7,7 @@ namespace wasm::analysis {
inline LatticeComparison FiniteIntPowersetLattice::compare(
const FiniteIntPowersetLattice::Element& left,
- const FiniteIntPowersetLattice::Element& right) {
+ const FiniteIntPowersetLattice::Element& right) const noexcept {
// Both must be from the powerset lattice of the same set.
assert(left.bitvector.size() == right.bitvector.size());
@@ -41,7 +41,8 @@ inline LatticeComparison FiniteIntPowersetLattice::compare(
return NO_RELATION;
}
-inline FiniteIntPowersetLattice::Element FiniteIntPowersetLattice::getBottom() {
+inline FiniteIntPowersetLattice::Element
+FiniteIntPowersetLattice::getBottom() const noexcept {
FiniteIntPowersetLattice::Element result(setSize);
return result;
}
@@ -60,7 +61,7 @@ inline size_t FiniteIntPowersetLattice::Element::count() const {
// both sides. We return true if a bit is flipped in-place on the left so the
// worklist algorithm will know if when to enqueue more work.
inline bool FiniteIntPowersetLattice::Element::makeLeastUpperBound(
- const FiniteIntPowersetLattice::Element& other) {
+ const FiniteIntPowersetLattice::Element& other) noexcept {
// Both must be from powerset lattice of the same set.
assert(other.bitvector.size() == bitvector.size());