From f79b5aa26b1fc722853e56b541cd35128786ef6b Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Thu, 19 Oct 2023 07:41:53 +0200 Subject: [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. --- src/analysis/powerset-lattice-impl.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/analysis/powerset-lattice-impl.h') 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()); -- cgit v1.2.3