[flang] Avoid bogus warning from MSVC build

And expand common::BitSet from 64 to 128 maximum elements.

Differential Revision: https://reviews.llvm.org/D120848
This commit is contained in:
Peter Klausler 2022-03-02 14:04:02 -08:00
parent ad786f5a5c
commit 79f8e909ed
1 changed files with 5 additions and 5 deletions

View File

@ -10,9 +10,10 @@
#define FORTRAN_COMMON_CONSTEXPR_BITSET_H_
// Implements a replacement for std::bitset<> that is suitable for use
// in constexpr expressions. Limited to elements in [0..63].
// in constexpr expressions. Limited to elements in [0..127].
#include "bit-population-count.h"
#include "uint128.h"
#include <cstddef>
#include <cstdint>
#include <initializer_list>
@ -22,11 +23,10 @@
namespace Fortran::common {
template <int BITS> class BitSet {
static_assert(BITS > 0 && BITS <= 64);
static constexpr bool partialWord{BITS != 32 && BITS != 64};
using Word = std::conditional_t<(BITS > 32), std::uint64_t, std::uint32_t>;
static_assert(BITS > 0 && BITS <= 128);
using Word = HostUnsignedIntType<(BITS <= 32 ? 32 : BITS)>;
static constexpr Word allBits{
partialWord ? (static_cast<Word>(1) << BITS) - 1 : ~static_cast<Word>(0)};
~static_cast<Word>(0) >> (8 * sizeof(Word) - BITS)};
constexpr BitSet(Word b) : bits_{b} {}